Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1w9GB2-001Iny-2N for pgsql-hackers@arkaria.postgresql.org; Sun, 05 Apr 2026 05:37:41 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1w9GB0-001fzy-1J for pgsql-hackers@arkaria.postgresql.org; Sun, 05 Apr 2026 05:37:38 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1w9GAz-001fzp-08 for pgsql-hackers@lists.postgresql.org; Sun, 05 Apr 2026 05:37:38 +0000 Received: from mail-wr1-x42b.google.com ([2a00:1450:4864:20::42b]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1w9GAu-00000000dMZ-0bGd for pgsql-hackers@lists.postgresql.org; Sun, 05 Apr 2026 05:37:36 +0000 Received: by mail-wr1-x42b.google.com with SMTP id ffacd0b85a97d-43b9d3ebed5so2934649f8f.1 for ; Sat, 04 Apr 2026 22:37:31 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1775367450; cv=none; d=google.com; s=arc-20240605; b=ATWwMFtYZIvOb8N/xch1TuIaKzr+Vy+EgCFncmYokqWkehafQOLW1UAMXOfU/2RN4F p5CAG7lRPCuhqZVeJnYG2T1XZwJlRyyXUVUxEm3nn73/WWRhXJCC2DTQrq7WgtStltmx sLMhFoEYM6Vd7oiMkH6XCizLRjpqlC7Y3WfgMePBega9bH396UlTj54ZNEHQTxPh6lCE n6ze1GweBLkBsWH9XhX3OdTGtd1jlCSLomLvFIyZo4CY/TdiV4232BqjpibpnISU9gdj 24oYSAk+k/oAwXZaQU0bX4VTf7h4TByKnIOmu3zo5iSeW2o1Ec2/VXkPRHligbJqWLcp p2Kw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:dkim-signature; bh=QlmrxHSdX1mjs3myyp3aybZ17+anDeUbPf63CQ1dcOg=; fh=dtXWegnXlgGDS7g+CZbEnm8dWjnaZPWjIknyIKJa8VQ=; b=DgQgj0vYRxL913crlYmSbNY1FiE5eMLb2isLMDJkTxOMRubl6bdAgIifDfF3cQhQp+ +adDnt7T8cxipzf/hllST2a9hGnUv98yCPmJRzKcRozfof9Mg43FXszV1LE54XJM2BXp rcpvGsZve3juYkMYoOY/KGFJlO+FDH4imcRRna8H+ho2NC/LvjKAXX3V232fngnCRUKe RTIln75UoXd9egIUsmKMdl8hLZo5ejXl1obhZ+nC0PO3CTwsz/qZ25Iy/AVfQc6po0q5 FLaljXk2wYncxmLaAlVDQk3VjvMsAM5UxpLCIIvJwElXw8U/Z5ofXBUy7OsH/K5MeCTO Itwg==; darn=lists.postgresql.org ARC-Authentication-Results: i=1; mx.google.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bowt-ie.20251104.gappssmtp.com; s=20251104; t=1775367450; x=1775972250; darn=lists.postgresql.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=QlmrxHSdX1mjs3myyp3aybZ17+anDeUbPf63CQ1dcOg=; b=0VYrnzKXClpqrDd5/rw3UUg5M70nbVptlrS6r/f5zK/wSS/D+Nu9ACJKuI+4Wh2u0P qcMqXvD2aWXUiLo7glMFCXL4LzjXTrm6oxn1xWNM2jAOUMK9ZE21YhNyFd5UrwFkXkVH uG29rFQV0giRl3Xxlll0PY/N8ZQxv/qDEFIh2fnG3RnQTz+cmKoqENJYGHEvvqhoIPnY WkjP9yrQ4rz0wDKMMJL7+OWb+iSudwktMwDn53rIV+sdg9ZXi/EF39uqNksDWyJt42yL ujNvYGcMKtFze/9EfGeRRKX+vMTWPgzW1A7QETwCgKEuE4oR49QUpf/kG5j3f5hw+cGC Su6A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1775367450; x=1775972250; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=QlmrxHSdX1mjs3myyp3aybZ17+anDeUbPf63CQ1dcOg=; b=M4pdjAutw0KawHITk4S9FkLK+vjK483r8NzUsB+fCI1F4GSaLEPLevQy/AMcIqAbVD 4y2e6hb0DPvOKGbloiBNRRRH/tH8eFT8KVUb03Kh8g2le+Df/7RIqu3K1aN8PfqwZK8t 0W8ocM+EOGicJIe6CdzRU98XAba13m/OspNwflODzDseSnwCGOkIOPZJDfB0Xd/YXvLx 83nq8W1IC0v8D9RRUuoyrJRVCamnr626jEYPfoCQ2xP1d0lnz8xpWzhDy+4Hc6YaTX0Y XoLT/8y++Mw+giycKtXMA6U9yUIszurxnajRQL+oVYx8R/fFEPSxi6cEE5tXpkI3AY9w 1eSw== X-Forwarded-Encrypted: i=1; AJvYcCUKvtCAvPdqD7ogkYh3PI2YjG07AnTpW9Y8qy1M+NiGDMWv4pdONr4KJrOLf1eneMdoVLU5gtZ+ssTNrlUX@lists.postgresql.org X-Gm-Message-State: AOJu0YzM3rNOG5jDE12A2nlGAV9NYUt0hIz7fjB96ve3CMDoZCwcc6V5 hT3rNh3s9vEGqUtnCczTEfC2ncdwWIRuX2Q6if+aF/xquf3mS+kWcztz0nejqF+mwMVc5jByIva dQodAqFpXpFTJk4/80iesXMUNoUb6p820U90iITYn9A== X-Gm-Gg: AeBDieud+FVKHLrCCc8rGFBQ7yohrQdqo7nyX7AHS363uzN9XmjzPGcX8jChUrT9//B p9KcY1+PaCbF9J8GINdU67Dfj+/TyhkfjXbvgY5OGpCa6UyCQV0nLFiRky/fpjhlU/MG8QkDfb1 VVeLzYfglLCr5261nHlOjFvkr0DQ1B5TgF8L6aQLaw0wUeBxyh0+mR5R59kfF5dNltUVN7sfVc5 FcSX6jSIDNjL9iaPHDOPuH8WgmCqNoKoLbleMQdPfDzVnfMNk7zjIKfqirQkMTOSnE+/NZ17qMD RwA2WvLQwz2/DoYYh2kFvIbs7pYxwF0LsHhNVEBVjiWatubu88x+tA== X-Received: by 2002:a05:6000:2586:b0:43c:fb6b:b7f with SMTP id ffacd0b85a97d-43d292e1438mr12700089f8f.40.1775367449709; Sat, 04 Apr 2026 22:37:29 -0700 (PDT) MIME-Version: 1.0 References: In-Reply-To: From: Peter Geoghegan Date: Sun, 5 Apr 2026 01:37:02 -0400 X-Gm-Features: AQROBzAVyE82y2TaJp9jLDHAayf_1Wg-AOsgOvDkoJy6FTgweD5qmpTck7Y4gg4 Message-ID: Subject: Re: index prefetching To: Andres Freund Cc: Tomas Vondra , Alexandre Felipe , Thomas Munro , Nazir Bilal Yavuz , Robert Haas , Melanie Plageman , PostgreSQL Hackers , Georgios , Konstantin Knizhnik , Dilip Kumar Content-Type: multipart/mixed; boundary="0000000000002fe31c064eaff221" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0000000000002fe31c064eaff221 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Attached is v23, which addresses your (Andres') most recent review feedback. I respond to the points that you brought up in your review below. Andres just pushed numerous related read stream patches (thanks for your work on that!), so I'm down to only 8 patches. This includes a new version of "Allow read_stream_reset() to not wait for IO completion" (which uses a less "hacky" approach than previous versions of that patch). Note that I reordered the patches for v23, to put the more committable ones first. I already committed 4 of the v22 patches (that I myself authored) that were deemed ready earlier today. The patches I'm posting now are also in a slightly different order to the one used by prior revisions: they put the hash index commit earlier. I think it makes sense to commit that the hash index patch immediately after the main amgetbatch commit gets in. Prefetching itself depends on at least one moew pending patch from you, so that might well need to go in last. On Sat, Apr 4, 2026 at 1:21=E2=80=AFAM Andres Freund w= rote: > > Subject: [PATCH v21 01/15] Rename heapam_index_fetch_tuple argument for > > clarity. > > Subject: [PATCH v21 02/15] Move heapam_handler.c index scan code to new= file. > Any reason to hold off pushing these? Nope, no reason. Pushed those 2, plus the "Track heap block in IndexFetchHeapData" and "Keep buffer pins" patches. > > Index-only scan callers pass table_index_getnext_slot a TupleTableSlot > > (which the table AM needs internally for heap fetches), > > FWIW, that parenthetical does not convince me. Storing tuples in a slot i= s > more expensive than just doing so internally in a non-generic datastructu= re. I changed the wording from "needs" to "uses". Was that all you meant? It's unclear if you're asking (or at least suggesting) that I should invent a new table_index_getnext_slot-like shim, used only during index-only scans, that doesn't require passing a slot (but does require getting a table slot some other way, likely at scan startup). I can see the argument for that. I've only avoided it because it would require adding more mechanism to the generic index_beginscan path (though I guess we could invent a new index_beginscan_indexonly similar to index_beginscan_bitmap). > At first I didn't like very much that now the tableam is responsible for > determining this, but thinking about it more, it makes sense - it very we= ll > could be that a tableam could benefit from choosing a xs_getnext_slot > implementation depending on things only it itself knows. Cool. > I'd strongly prefer forward declaring > typedef struct IndexScanDescData *IndexScanDesc; > over including genam.h into tableam.h Fixed. > > - struct IndexFetchTableData *(*index_fetch_begin) (Relation rel, u= int32 flags); > > + struct IndexFetchTableData *(*index_fetch_begin) (IndexScanDesc s= can, > > + = uint32 flags); > > I kinda wonder if this should look roughly like this instead: > > /* size of the tableam's IndexFetchTableData */ > size_t index_fetch_state_size; > void *(*index_fetch_begin) (Relation rel, IndexScanDesc scan, IndexFe= tchTableData *table_fetch, uint32 flags); > > Moving the allocation of the IndexFetchTableData to the caller. The adva= ntage > would be that this would allow us to later combine the allocation of the > IndexScanDesc with the IndexFetchTableData, without again needing to chan= ge > the tableam interface. Hmmm. So index_fetch_state_size is a field in the TableAmRoutine struct, that is set statically by the table AM? > s/, as needed when fetching tuples for/as part of/ Fixed. > I'd just say "Release resources and deallocate the IndexFetchTableData in= the > scan.". Fixed. > s/don't want to provide their own slot/that just need to check if a tuple= is visible/ Fixed. > This is quite a spectacularly ugly indentation. Not your fault. Still c= an't > stand it :) I was torn between two different neatnik impulses: the desire to have consistent function prototypes (that all appear in the same order as their definitions!), versus the desire for acceptable indentation without any ludicrously long lines. > I'd probably just reorder the function definitions so you don't need the > forward declaration for the pg_attribute_always_inline functions. Okay, sure. I've done it that way; reordered things such that I was able to remove function prototypes with pg_attribute_always_inline only. > > +static pg_attribute_always_inline bool > > +heapam_index_fetch_tuple_impl(Relation rel, > > + IndexFetchHeapD= ata *hscan, > > + ItemPointer tid= , > > + Snapshot snapsh= ot, > > + TupleTableSlot = *slot, > > + bool *heap_cont= inue, bool *all_dead) > > I'd probably put all of these just after heapam_index_fetch_end(), given = they > are basically part of the implementation of heapam_index_*. I don't follow. Note that I renamed heapam_index_fetch_tuple to heapam_index_fetch_tuple and renamed heapam_index_fetch_heap to heapam_index_fetch_heap_item in the attached revision. I think that those names are slightly clearer. The latter function is just a wrapper around the former that performs some extra steps that are secondary to fetching a heap tuple. > Or you just move the definition of > index_beginscan_internal() to before index_beginscan(), and you don't nee= d the > prototype anymore. Which imo is nicer, because you don't need to update = as > many places anymore when changing the signature. Fixed it that way, much like with heapam_indexscan.c prototypes. > > - /* > > - * Only MVCC snapshots are supported here, so the= re should be no > > - * need to keep following the HOT chain once a vi= sible entry has > > - * been found. If we did want to allow that, we'= d need to keep > > - * more state to remember not to call index_getne= xt_tid next time. > > - */ > > - if (scandesc->xs_heap_continue) > > - elog(ERROR, "non-MVCC snapshots are not s= upported in index-only scans"); > > So that's now only an assertion, right? Probably ok... Yes. But the new assertion is *less* strict than this defensive elog was: it tolerates heap_continue being set iff a non-MVCC snapshot is used. It has to work that way now, I think. The new index-only scan code cannot assume that a non-MVCC snapshot will be used in all cases -- we have the selfuncs.c caller to consider (which uses SnapshotNonVacuumable) now. Obviously that never affected the old nodeIndexonlyScan.c code quoted here. Actually, I don't know if we really *should* treat the selfuncs.c caller any different (except as needed to avoid spurious assertion failures). The existing selfuncs.c handling assumes that the first heap tuple returned from a HOT chain is always an acceptable tuple to return to the scan. That is, it doesn't care about later HOT chain members. > Given that all the index_beginscan* callers used onlly one argument per l= ine, > I'd also do that for the ios=3Dfalse. I fixed the affected index_beginscan* callers, by following your suggested approach. > > void > > @@ -92,7 +88,13 @@ heapam_index_fetch_end(IndexScanDesc scan) > > { > > IndexFetchHeapData *hscan =3D (IndexFetchHeapData *) scan->xs_hea= pfetch; > > > > - heapam_index_fetch_reset(scan); > > + /* drop pin if there's a pinned heap page */ > > + if (BufferIsValid(hscan->xs_cbuf)) > > + ReleaseBuffer(hscan->xs_cbuf); > > + > > + /* drop pin if there's a pinned visibility map page */ > > + if (BufferIsValid(hscan->xs_vmbuffer)) > > + ReleaseBuffer(hscan->xs_vmbuffer); > > > > pfree(hscan); > > } > > Personally I'd keep the clearing of the Buffer fields after the release, = but I > do admit that's rank paranoia. The committed patch didn't do that. I just don't see a point here, given that we're directly pfree'ing the memory that you're suggested need to be reset. Besides, if I did this, wouldn't I also have to clear xs_blk by resetting it to InvalidBlockNumber? That's what it would take to make it safe if we weren't just pfree'ing the struct right away. > > This expands the slot-based table AM interface added by commit FIXME > > from two callbacks (for amgettuple plain and index-only scans) to four, > > adding amgetbatch variants for both scan types. > I think this paragraph is a bit out of date. Fixed. > > With amgetbatch, a scan-level policy determines whether each batch's > > index page buffer pin is dropped eagerly by the index AM (for plain > > scans with an MVCC snapshot, where the snapshot itself prevents TID > > recycling problems) or retained as an interlock against concurrent TID > > recycling by VACUUM. The interlock is retained for non-MVCC scans and > > s/non-MVCC/plain non-MVCC/ Fixed. > > This extends the dropPin mechanism added to nbtree by commit 2ed5b87f, > > and generalizes it to work with all index AMs that support the new > > amgetbatch interface (LP_DEAD marking of index entries must be performe= d > > It's a bit funny to say that it expands it to all index AMs that support = the > new amgetbatch, given that that's just nbtree as of this commit :) Plan now is to commit the hash index patch immediately after this one. Maybe that makes it clearer? > > + > > } IndexFetchHeapData; > > Probably unintentional trailing empty line in the struct. Fixed. > I don't think the table AM implementation should need to know about the > allocation base of a batch and similar implementation details. But they have to, if only to be able to implement their own heapam_index_fetch_batch_init-like function. > And index_scan_batch_base()'s comment are now a bit too limited: > Hm. Does all of this actually need to live in heapam.h? Seems like it cou= ld > just be in heapam_indexscan.c. Agreed. Fixed. > > + /* > > + * Theoretically we should set knownEndForward/knownEndBa= ckward to > > + * false (whichever is used when moving in the opposite d= irection) > > + * when this is the scan's first returned batch. We don'= t bother > > + * because the index AM should always record that fact in= its own > > + * opaque area. (These fields only exist because we don'= t want index > > + * AMs setting _any_ field from any priorbatch that we pa= ss to them. > > + * Besides, it would be cumbersome for index AMs to keep = track of > > + * which batch is the current amgetbatch call's original = priorbatch.) > > + */ > > Why aren't we setting them to false? It offers no practical benefit (no query can possibly read extra index pages as a result of the omission), and I'm paranoid (perhaps unreasonably so) about adding cycles here. Especially with pgbench SELECT style point queries. > > +/* > > + * utilities called by index AMs > > + */ > > I'd make these section comments a bit more prominent (like e.g. in tablea= m.h, > otherwise they're quite hard to distinguish from function comments. Fixed. > > +/* > > + * Data about one batch of items returned by (and passed to) amgetbatc= h during > > + * index scans. > > + * > > + * Each batch allocation has the following memory layout: > > + * > > + * [table AM opaque area] <- fixed-size, -(batch_table_offset) fr= om base > > + * [index AM opaque area] <- at -(batch_index_opaque_size) from b= ase > > + * [IndexScanBatchData] <- base pointer, returned by amgetbatch > > This conflicts a bit with how e.g. index_scan_batch_base() uses base poin= ter. Good point. Fixed in latest version, by using "allocation base" terminology in these comments. > > .index_fetch_begin =3D heapam_index_fetch_begin, > > + .index_fetch_batch_init =3D heapam_index_fetch_batch_init, > > .index_fetch_reset =3D heapam_index_fetch_reset, > > .index_fetch_end =3D heapam_index_fetch_end, > > + .index_fetch_markpos =3D heapam_index_fetch_markpos, > > + .index_fetch_restrpos =3D heapam_index_fetch_restrpos, > > Given that the ->index_fetch_begin() now is responsible for configuring > IndexScanDesc->xs_getnext_slot, it's not clear to me that it really makes > sense to have stuff like ->index_fetch_batch_init() be set in TableAmRout= ine. > > Wonder if we should just have a TableIndexFetchRoutine struct embedded in= the > IndexScanDesc that ->index_fetch_begin needs to fully initialize. I'm glad that you came around to my point of view on it being a good idea to allow the table AM to do more in ->index_fetch_begin. Specifically, allowing that callback to pick its preferred slot makes sense. But I don't think the same argument I made works for these other new callbacks, like ->index_fetch_batch_init? Or were you making another argument? > What's the point of fetching hscan and then using a (void) hscon to avoid= a > warning? Fixed in committed patch. > > + return heapam_index_return_scanpos_tid(scan, hscan, direction, > > + = scanBatch, scanPos, all_visible); > > +} > > Still looks like most of this ought to be in a tableam_util_... Why? Code reuse is a virtue, but it isn't the highest virtue. Splitting up this function is possible but quite awkward. > > + pgstat_count_index_tuples(scan->indexRelation, 1); > > The asymmetry of where pgstat_count_index_tuples() is called (i.e. here f= or > amgetbatch(), in index_getnext_tid() for amgettuple) still seems weird to= me. It's also kinda weird that index_getnext_tid can call table_index_fetch_reset, even though index_getnext_tid is only really supposed to be called by table AMs now (and is only called by heapam in practice). What do you want to do about it? index_getnext_tid isn't adding too much right now, I'd say. > > + allbatchitemsvisible =3D lastSetItem <=3D batch->firstIte= m && > > + (posItem =3D=3D batch->lastItem || > > + (hbatch->visInfo[batch->lastItem] & HEAP_BATCH_V= IS_CHECKED)); > > + } > > Might be worth putting into a static inline. Why do you say that? I don't follow. > Can'tt the *2 lead to computing a xs_vm_items bigger than scan->maxitemsb= atch? Yes, it can. > > +tableam_util_batchscan_end(IndexScanDesc scan) > > +{ > > + pfree(index_scan_batch_base(scan, cached)); > > I'd set scan->batchcache[i] to NULL after freeing. I tried that out, but I *think* it regressed pgbench SELECT by about ~1.5% of total TPS (I'd need more thorough testing to confirm this). Are you sure we need this? > > + /* > > + * index_scan_batch_loaded indicates that markPos->batch = is loaded, > > + * but after uint8 overflow a stale batch offset can alia= s a > > Maybe s/overflow/wraparound/? Fixed. > > + * currently-loaded range (false positive). Confirm by c= hecking > > + * whether the batch pointer in markPos->batch's slot sti= ll matches. > > + */ > > + freeMarkBatch =3D (index_scan_batch(scan, markPos->batch)= !=3D markBatch); > > Perhaps this should be be integrated into index_scan_batch_loaded()? I doubt that would be practical, because there is an important difference between a batch being immediately available (meaning it can read it from memory without calling amgetbatch again) and a batch actually being in the ring buffer. markBatch is a special case in that it can be in the former category without also being in the latter one. Most callers really don't need to think about that distinction, and it seems actively bad if index_scan_batch_loaded knows about the scan's saved markBatch in the context of these callers. > > +/* > > + * Restore mark to scanPos position > > This sounds a bit like the mark is restored into the position of the scan= pos, > which obviously makes no sense. Fixed. > > + if (batch->numDead > 0 && > > + scan->indexRelation->rd_indam->amkillitemsbatch !=3D NULL= ) > > + { > > + if (batch->numDead > 1) > > + { > > + qsort(batch->deadItems, batch->numDead, sizeof(in= t), > > + batch_compare_int); > > + batch->numDead =3D qunique(batch->deadItems, batc= h->numDead, > > + = sizeof(int), batch_compare_int); > > + } > > + > > + scan->indexRelation->rd_indam->amkillitemsbatch(scan, bat= ch); > > + } > > Based on the name or function header one sure wouldn't think this will ca= ll > indexam callbacks... I dunno, how do you think it should work? To me it makes sense to call amkillitemsbatch here, because when the table AM frees a batch it clearly has no further need to perform heap fetches for any items in that batch. The table-AM-focussed function name seems fine to me because this is one extra step, that happens to involve calling the index AM. Bear in mind that the call to amkillitemsbatch only does what the AM table instructs. It has no real awareness of any ongoing scan. We always use the LSN trick there now, so it's really not coordinating with itself/with the table AM. > > - scan->kill_prior_tuple =3D false; /* for safety */ > > scan->xs_heap_continue =3D false; > > > > - scan->indexRelation->rd_indam->amrestrpos(scan); > > + table_index_fetch_restrpos(scan); > > } > > Did we loose that kill_prior_tuple? Or is there a reason it's not necessa= ry > anymore? Too tired to think through this. We still need kill_prior_tuple, but only for amgettuple scans. Those don't support mark + restore anymore. -- Peter Geoghegan --0000000000002fe31c064eaff221 Content-Type: application/octet-stream; name="v23-0004-heapam-Optimize-pin-transfers-during-index-scans.patch" Content-Disposition: attachment; filename="v23-0004-heapam-Optimize-pin-transfers-during-index-scans.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mnlbta3b4 RnJvbSAxYjJjZjY3NTYwY2YyNGZkNmRhZjg3YzRlZTdjYjAzYWU2MDViYWJkIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBHZW9naGVnYW4gPHBnQGJvd3QuaWU+CkRhdGU6IFN1 biwgMjIgTWFyIDIwMjYgMDI6MjI6MDYgLTA0MDAKU3ViamVjdDogW1BBVENIIHYyMyA0LzhdIGhl YXBhbTogT3B0aW1pemUgcGluIHRyYW5zZmVycyBkdXJpbmcgaW5kZXggc2NhbnMuCgpBZGQgYW4g eHNfbGFzdGluYmxvY2sgZmxhZyB0byBJbmRleEZldGNoSGVhcERhdGEgdGhhdCB0cmFja3Mgd2hl dGhlciB0aGUKY3VycmVudCBUSUQgaXMgdGhlIGxhc3Qgb25lIG9uIGl0cyBoZWFwIGJsb2NrIHdp dGhpbiB0aGUgY3VycmVudCBiYXRjaC4KV2hlbiBpdCBpcywgaGVhcGFtX2luZGV4X2ZldGNoX3R1 cGxlIGNhbiB0cmFuc2ZlciBpdHMgYnVmZmVyIHBpbiB0byB0aGUKc2xvdCAodmlhIEV4ZWNTdG9y ZVBpbm5lZEJ1ZmZlckhlYXBUdXBsZSkgaW5zdGVhZCBvZiBpbmNyZW1lbnRpbmcgdGhlCnBpbiBj b3VudCwgc2F2aW5nIGEgcGFpciBvZiBJbmNyQnVmZmVyUmVmQ291bnQvUmVsZWFzZUJ1ZmZlciBj YWxscy4KVGhpcyBvcHRpbWl6YXRpb24gaXMgbm90IHVzZWQgZm9yIGluZGV4LW9ubHkgc2NhbnMg YmVjYXVzZSBhbGwtdmlzaWJsZQppdGVtcyBjYW4gYmUgc2tpcHBlZCwgd2hpY2ggd291bGQgYnJl YWsgYmxvY2sgZGVkdXBsaWNhdGlvbiBzeW1tZXRyeQpiZXR3ZWVuIHRoZSBzY2FuIGFuZCB0aGUg cmVhZCBzdHJlYW0gKGJlc2lkZXMsIHRoZSBwZXJmb3JtYW5jZSBvZiB0aGlzCmNvZGUgcGF0aCBj YW4gb25seSBtYXR0ZXIgd2hlbiBtYW55IGhlYXAgZmV0Y2hlcyBhcmUgcmVxdWlyZWQsIHdoaWNo IGlzCmhvcGVmdWxseSByYXJlIGR1cmluZyBpbmRleC1vbmx5IHNjYW5zKS4KCkFsc28gYWRkIGFu IGV4cGxpY2l0IEV4ZWNDbGVhclR1cGxlIHRvIHRoZSBibG9jay1zd2l0Y2ggcGF0aCBpbgpoZWFw YW1faW5kZXhfZmV0Y2hfdHVwbGVfaW1wbCB0byByZWxlYXNlIHRoZSBwaW4gdHJhbnNmZXJyZWQg dG8gdGhlIHNsb3QKb24gdGhlIHByZXZpb3VzIGNhbGwgKGp1c3QgYmVmb3JlIGNhbGxpbmcgUmVs ZWFzZUJ1ZmZlciBhcyBwYXJ0IG9mCm1vdmluZyBvbiB0byB0aGUgc2NhbidzIG5leHQgYmxvY2sp LiAgVGhpcyBmaXhlcyBhIHBlcmZvcm1hbmNlIHByb2JsZW0Kd2hlcmUgdGhlIGNvZGUgcGF0aCBp biBxdWVzdGlvbiB0cmlnZ2VycyBHZXRQcml2YXRlUmVmQ291bnRFbnRyeVNsb3cKY2FsbHMgbW9y ZSBvZnRlbiB0aGFuIG9uZSB3b3VsZCBob3BlLiAgVGhlIHVuZGVybHlpbmcgaXNzdWUgaGFzIGJl ZW4KdGllZCB0byB0aGUgcGluIGluIHRoZSBzbG90IGJlaW5nIGhlbGQsIGV2ZW4gaWYgd2UgZGVj aWRlIHRvIHJlbGVhc2UgdGhlCmJ1ZmZlciBhbmQgbW92ZSBvbjogRXhlY1N0b3JlQnVmZmVySGVh cFR1cGxlIHdpbGwgZmlyc3QgZmFpbCB0byBoaXQgdGhlCmJhY2tlbmQtbG9jYWwgY2FjaGUgZm9y IHRoZSByZWxlYXNlIG9mIHRoZSBvbGQgcGluIChiZWNhdXNlIHdlIGp1c3QKcGlubmVkIGFuZCBs b2NrZWQgdGhlIG5ldyBidWZmZXIpLCBjYXVzaW5nIGEgY2FjaGUgbWlzcyBpbnNpZGUKSW5jckJ1 ZmZlclJlZkNvdW50LgoKQXV0aG9yOiBQZXRlciBHZW9naGVnYW4gPHBnQGJvd3QuaWU+ClN1Z2dl c3RlZC1ieTogQW5kcmVzIEZyZXVuZCA8YW5kcmVzQGFuYXJhemVsLmRlPgpSZXZpZXdlZC1CeTog QW5kcmVzIEZyZXVuZCA8YW5kcmVzQGFuYXJhemVsLmRlPgpEaXNjdXNzaW9uOiBodHRwczovL3Bv c3Rnci5lcy9tL0NBSDItV3o9RDRMcnU5Qmt2cWFSbkZSUERhWmJmVE9kV2N4dzEzenlHNkdWRlR0 el92d0BtYWlsLmdtYWlsLmNvbQotLS0KIHNyYy9pbmNsdWRlL2FjY2Vzcy9oZWFwYW0uaCAgICAg ICAgICAgICAgICB8ICAzICsKIHNyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9pbmRleHNj YW4uYyB8IDczICsrKysrKysrKysrKysrKysrKysrKy0KIDIgZmlsZXMgY2hhbmdlZCwgNzQgaW5z ZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9hY2Nl c3MvaGVhcGFtLmggYi9zcmMvaW5jbHVkZS9hY2Nlc3MvaGVhcGFtLmgKaW5kZXggNzk5NzZmNTBm Li45MjgxZDg2NDUgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9oZWFwYW0uaAorKysg Yi9zcmMvaW5jbHVkZS9hY2Nlc3MvaGVhcGFtLmgKQEAgLTEzMSw2ICsxMzEsOSBAQCB0eXBlZGVm IHN0cnVjdCBJbmRleEZldGNoSGVhcERhdGEKIAkvKiBGb3IgdmlzaWJpbGl0eSBtYXAgY2hlY2tz IChpbmRleC1vbmx5IHNjYW5zIGFuZCBvbi1hY2Nlc3MgcHJ1bmluZykgKi8KIAlCdWZmZXIJCXhz X3ZtYnVmZmVyOwkvKiB2aXNpYmlsaXR5IG1hcCBidWZmZXIgKi8KIAlpbnQJCQl4c192bV9pdGVt czsJLyogIyBpdGVtcyB0byByZXNvbHZlIHZpc2liaWxpdHkgaW5mbyBmb3IgKi8KKworCS8qIFBs YWluIGluZGV4IHNjYW4geHNfbGFzdGluYmxvY2sgb3B0aW1pemF0aW9uICovCisJYm9vbAkJeHNf bGFzdGluYmxvY2s7IC8qIGxhc3QgVElEIG9uIHRoaXMgYmxvY2sgaW4gY3VycmVudCBiYXRjaD8g Ki8KIH0gSW5kZXhGZXRjaEhlYXBEYXRhOwogCiAvKiBSZXN1bHQgY29kZXMgZm9yIEhlYXBUdXBs ZVNhdGlzZmllc1ZhY3V1bSAqLwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAv aGVhcGFtX2luZGV4c2Nhbi5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtX2luZGV4 c2Nhbi5jCmluZGV4IDVmZjlkOGJlYS4uYjZlNTdmOGY4IDEwMDY0NAotLS0gYS9zcmMvYmFja2Vu ZC9hY2Nlc3MvaGVhcC9oZWFwYW1faW5kZXhzY2FuLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNz L2hlYXAvaGVhcGFtX2luZGV4c2Nhbi5jCkBAIC0xMjYsNiArMTI2LDkgQEAgaGVhcGFtX2luZGV4 X2ZldGNoX2JlZ2luKEluZGV4U2NhbkRlc2Mgc2NhbiwgdWludDMyIGZsYWdzKQogCUFzc2VydCho c2Nhbi0+eHNfdm1idWZmZXIgPT0gSW52YWxpZEJ1ZmZlcik7CiAJaHNjYW4tPnhzX3ZtX2l0ZW1z ID0gMTsKIAorCS8qIHhzX2xhc3RpbmJsb2NrIG9wdGltaXphdGlvbiBzdGF0ZSAqLworCUFzc2Vy dCghaHNjYW4tPnhzX2xhc3RpbmJsb2NrKTsKKwogCS8qIFJlc29sdmUgd2hpY2ggeHNfZ2V0bmV4 dF9zbG90IGltcGxlbWVudGF0aW9uIHRvIHVzZSBmb3IgdGhpcyBzY2FuICovCiAJaWYgKHNjYW4t PmluZGV4UmVsYXRpb24tPnJkX2luZGFtLT5hbWdldGJhdGNoICE9IE5VTEwpCiAJewpAQCAtNDM1 LDYgKzQzOCwxNCBAQCBoZWFwYW1faW5kZXhfZmV0Y2hfdHVwbGUoUmVsYXRpb24gcmVsLAogCQkv KiBSZW1lbWJlciB0aGlzIGJ1ZmZlcidzIGJsb2NrIG51bWJlciBmb3IgbmV4dCB0aW1lICovCiAJ CWhzY2FuLT54c19ibGsgPSBJdGVtUG9pbnRlckdldEJsb2NrTnVtYmVyKHRpZCk7CiAKKwkJLyoK KwkJICogRHJvcCB0aGUgeHNfYmxrIHBpbiBpbmRlcGVuZGVudGx5IGhlbGQgb24gYnkgc2xvdCAo aWYgYW55KSBub3csCisJCSAqIGJlZm9yZSBjYWxsaW5nIFJlbGVhc2VCdWZmZXIuICBUaGlzIGF2 b2lkcyBleHBlbnNpdmUgY2FsbHMgdG8KKwkJICogR2V0UHJpdmF0ZVJlZkNvdW50RW50cnlTbG93 IGNhdXNlZCBieSBFeGVjU3RvcmVCdWZmZXJIZWFwVHVwbGUKKwkJICogZmFpbGluZyB0byBoaXQg dGhlIGJhY2tlbmQncyBjYWNoZSBmb3IgdGhlIHJlbGVhc2Ugb2YgdGhlIG9sZCBwaW4uCisJCSAq LworCQlFeGVjQ2xlYXJUdXBsZShzbG90KTsKKwogCQlpZiAoQnVmZmVySXNWYWxpZChoc2Nhbi0+ eHNfY2J1ZikpCiAJCQlSZWxlYXNlQnVmZmVyKGhzY2FuLT54c19jYnVmKTsKIApAQCAtNDcxLDcg KzQ4MiwzMyBAQCBoZWFwYW1faW5kZXhfZmV0Y2hfdHVwbGUoUmVsYXRpb24gcmVsLAogCQkqaGVh cF9jb250aW51ZSA9ICFJc01WQ0NMaWtlU25hcHNob3Qoc25hcHNob3QpOwogCiAJCXNsb3QtPnR0 c190YWJsZU9pZCA9IFJlbGF0aW9uR2V0UmVsaWQocmVsKTsKLQkJRXhlY1N0b3JlQnVmZmVySGVh cFR1cGxlKCZic2xvdC0+YmFzZS50dXBkYXRhLCBzbG90LCBoc2Nhbi0+eHNfY2J1Zik7CisKKwkJ LyoKKwkJICogSWYgdGhpcyBpcyB0aGUgbGFzdCBUSUQgb24gdGhlIGN1cnJlbnQgaGVhcCBibG9j ayB3aXRoaW4gdGhlIGJhdGNoLAorCQkgKiB0cmFuc2ZlciBvdXIgYnVmZmVyIHBpbiB0byB0aGUg c2xvdCByYXRoZXIgdGhhbiBoYXZpbmcgdGhlIHNsb3QKKwkJICogaW5jcmVtZW50IHRoZSBwaW4g Y291bnQuICBUaGlzIHNhdmVzIGEgcGFpciBvZiBJbmNyQnVmZmVyUmVmQ291bnQKKwkJICogYW5k IFJlbGVhc2VCdWZmZXIgY2FsbHMsIHNpbmNlIHRoZSBjYWxsZXIgd291bGQganVzdCByZWxlYXNl IGl0cworCQkgKiBwaW4gb24geHNfY2J1ZiB3aGVuIHN3aXRjaGluZyB0byB0aGUgbmV4dCBibG9j ayBhbnl3YXkuCisJCSAqCisJCSAqIFdlIGNhbiBvbmx5IGRvIHRoaXMgd2hlbiBoZWFwX2NvbnRp bnVlIGlzIGZhbHNlLCBzaW5jZSBvdGhlcndpc2UKKwkJICogdGhlIGNhbGxlciB3aWxsIG5lZWQg eHNfY2J1ZiB0byByZW1haW4gdmFsaWQgZm9yIHRoZSBuZXh0IGNhbGwuCisJCSAqLworCQlpZiAo aHNjYW4tPnhzX2xhc3RpbmJsb2NrICYmICEqaGVhcF9jb250aW51ZSkKKwkJeworCQkJRXhlY1N0 b3JlUGlubmVkQnVmZmVySGVhcFR1cGxlKCZic2xvdC0+YmFzZS50dXBkYXRhLCBzbG90LAorCQkJ CQkJCQkJCSAgIGhzY2FuLT54c19jYnVmKTsKKwkJCWhzY2FuLT54c19jYnVmID0gSW52YWxpZEJ1 ZmZlcjsKKwkJCWhzY2FuLT54c19ibGsgPSBJbnZhbGlkQmxvY2tOdW1iZXI7CisKKwkJCS8qCisJ CQkgKiBOb3RlOiB0aGUgcGluIG5vdyBvd25lZCBieSB0aGUgc2xvdCBpcyBleHBlY3RlZCB0byBi ZSByZWxlYXNlZAorCQkJICogb24gdGhlIG5leHQgY2FsbCBoZXJlLCB2aWEgYW4gZXhwbGljaXQg RXhlY0NsZWFyVHVwbGUuICBUaGlzCisJCQkgKiBhdm9pZHMgY2h1cm4gaW4gdGhlIGJhY2tlbmQn cyBwcml2YXRlIHJlZmNvdW50IGNhY2hlLgorCQkJICovCisJCX0KKwkJZWxzZQorCQkJRXhlY1N0 b3JlQnVmZmVySGVhcFR1cGxlKCZic2xvdC0+YmFzZS50dXBkYXRhLCBzbG90LAorCQkJCQkJCQkJ IGhzY2FuLT54c19jYnVmKTsKIAl9CiAJZWxzZQogCXsKQEAgLTY1OSwxMCArNjk2LDQyIEBAIGhl YXBhbV9pbmRleF9yZXR1cm5fc2NhbnBvc190aWQoSW5kZXhTY2FuRGVzYyBzY2FuLCBJbmRleEZl dGNoSGVhcERhdGEgKmhzY2FuLAogCiAJaWYgKGFsbF92aXNpYmxlID09IE5VTEwpCiAJeworCQlp bnQJCQluZXh0SXRlbTsKKwkJYm9vbAkJaGFzTmV4dDsKKwogCQkvKgogCQkgKiBQbGFpbiBpbmRl eCBzY2FuLgorCQkgKgorCQkgKiBEZXRlcm1pbmUgaWYgdGhlIG5leHQgaXRlbSBpbiB0aGUgY3Vy cmVudCBzY2FuIGRpcmVjdGlvbiBpcyBvbiBhCisJCSAqIGRpZmZlcmVudCBoZWFwIGJsb2NrLiAg V2hlbiBpdCBpcywgaGVhcGFtX2luZGV4X2ZldGNoX3R1cGxlIGNhbgorCQkgKiB0cmFuc2ZlciBp dHMgYnVmZmVyIHBpbiB0byB0aGUgc2xvdCBpbnN0ZWFkIG9mIGluY3JlbWVudGluZyB0aGUgcGlu CisJCSAqIGNvdW50LCBzYXZpbmcgYSBwYWlyIG9mIEluY3JCdWZmZXJSZWZDb3VudC9SZWxlYXNl QnVmZmVyIGNhbGxzLgorCQkgKgorCQkgKiBOb3RlOiBXZSBjYW5ub3QgZG8gdGhpcyBmb3IgaW5k ZXgtb25seSBzY2FucyBiZWNhdXNlIGFsbC12aXNpYmxlCisJCSAqIGl0ZW1zIGFyZSBza2lwcGVk IGJ5IGJvdGggdGhlIHNjYW4gYW5kIHRoZSByZWFkIHN0cmVhbSBjYWxsYmFjay4gSXQKKwkJICog ZG9lc24ndCBzZWVtIHdvcnRoIHRoZSB0cm91YmxlIG9mIHJlYXNvbmluZyBhYm91dCB0aGVzZSBp c3N1ZXMsCisJCSAqIHNpbmNlIHRoZSBvcHRpbWl6YXRpb24gb25seSBoZWxwcyB3aGVuIGhlYXAg ZmV0Y2hlcyBhcmUgcmVxdWlyZWQuCisJCSAqCisJCSAqIE5vdGU6IFdlIGRlbGliZXJhdGVseSBk b24ndCBjb25zaWRlciB0aGUgYmF0Y2ggYWZ0ZXIgc2NhbkJhdGNoLAorCQkgKiBiZWNhdXNlIGRv aW5nIHNvIHdvdWxkIGFkZCBjb21wbGV4aXR5IGZvciBsaXR0bGUgYmVuZWZpdC4gIEl0J3MKKwkJ ICogb2theSBpZiB4c19sYXN0aW5ibG9jayBpcyBzcHVyaW91c2x5IHNldCB0byBmYWxzZS4KIAkJ ICovCiAJCUFzc2VydCghc2Nhbi0+eHNfd2FudF9pdHVwKTsKKwkJaWYgKFNjYW5EaXJlY3Rpb25J c0ZvcndhcmQoZGlyZWN0aW9uKSkKKwkJeworCQkJbmV4dEl0ZW0gPSBzY2FuUG9zLT5pdGVtICsg MTsKKwkJCWhhc05leHQgPSAobmV4dEl0ZW0gPD0gc2NhbkJhdGNoLT5sYXN0SXRlbSk7CisJCX0K KwkJZWxzZQorCQl7CisJCQluZXh0SXRlbSA9IHNjYW5Qb3MtPml0ZW0gLSAxOworCQkJaGFzTmV4 dCA9IChuZXh0SXRlbSA+PSBzY2FuQmF0Y2gtPmZpcnN0SXRlbSk7CisJCX0KKworCQloc2Nhbi0+ eHNfbGFzdGluYmxvY2sgPSBoYXNOZXh0ICYmCisJCQlJdGVtUG9pbnRlckdldEJsb2NrTnVtYmVy KCZzY2FuQmF0Y2gtPml0ZW1zW25leHRJdGVtXS50YWJsZVRpZCkgIT0KKwkJCUl0ZW1Qb2ludGVy R2V0QmxvY2tOdW1iZXIoJnNjYW4tPnhzX2hlYXB0aWQpOworCiAJCXJldHVybiAmc2Nhbi0+eHNf aGVhcHRpZDsKIAl9CiAKQEAgLTY3MSw3ICs3NDAsNyBAQCBoZWFwYW1faW5kZXhfcmV0dXJuX3Nj YW5wb3NfdGlkKEluZGV4U2NhbkRlc2Mgc2NhbiwgSW5kZXhGZXRjaEhlYXBEYXRhICpoc2NhbiwK IAkgKgogCSAqIEFsc28gc2V0IHhzX2l0dXAsIHdoaWNoIGNhbGxlciBhbHNvIG5lZWRzLgogCSAq LwotCUFzc2VydChzY2FuLT54c193YW50X2l0dXApOworCUFzc2VydChzY2FuLT54c193YW50X2l0 dXAgJiYgIWhzY2FuLT54c19sYXN0aW5ibG9jayk7CiAJc2Nhbi0+eHNfaXR1cCA9IChJbmRleFR1 cGxlKSAoc2NhbkJhdGNoLT5jdXJyVHVwbGVzICsKIAkJCQkJCQkJICBzY2FuQmF0Y2gtPml0ZW1z W3NjYW5Qb3MtPml0ZW1dLnR1cGxlT2Zmc2V0KTsKIAotLSAKMi41My4wCgo= --0000000000002fe31c064eaff221 Content-Type: application/octet-stream; name="v23-0005-heapam-Add-index-scan-I-O-prefetching.patch" Content-Disposition: attachment; filename="v23-0005-heapam-Add-index-scan-I-O-prefetching.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mnlbta373 RnJvbSA1M2Q1MjMxNTZhNjhkZjVmNDA0NWNjYjg3NGViODFkY2IxMmIwZDc4IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBHZW9naGVnYW4gPHBnQGJvd3QuaWU+CkRhdGU6IFdl ZCwgMjUgTWFyIDIwMjYgMTY6NTg6MDkgLTA0MDAKU3ViamVjdDogW1BBVENIIHYyMyA1LzhdIGhl YXBhbTogQWRkIGluZGV4IHNjYW4gSS9PIHByZWZldGNoaW5nLgoKVGhpcyBjb21taXQgaW1wbGVt ZW50cyBJL08gcHJlZmV0Y2hpbmcgZm9yIGluZGV4IHNjYW5zIChhbmQgaW5kZXgtb25seQpzY2Fu cyB0aGF0IHJlcXVpcmUgaGVhcCBmZXRjaGVzKS4gVGhpcyB3YXMgbWFkZSBwb3NzaWJsZSBieSB0 aGUgcmVjZW50CmFkZGl0aW9uIG9mIGJhdGNoaW5nIGludGVyZmFjZXMgdG8gYm90aCB0aGUgdGFi bGUgQU0gYW5kIGluZGV4IEFNIEFQSXMuCgpUaGUgYW1nZXRiYXRjaCBpbmRleCBBTSBpbnRlcmZh Y2UgcHJvdmlkZXMgYmF0Y2hlcyBvZiBtYXRjaGluZyBUSURzCihyYXRoZXIgdGhhbiBvbmUgdHVw bGUgYXQgYSB0aW1lKSwgZWFjaCBvZiB3aGljaCBtdXN0IGJlIHRha2VuIGZyb20KaW5kZXggdHVw bGVzIHRoYXQgYXBwZWFyIHRvZ2V0aGVyIG9uIGEgc2luZ2xlIGluZGV4IHBhZ2UuICBUaGlzIGFs bG93cwptdWx0aXBsZSBiYXRjaGVzIHRvIGJlIGhlbGQgb3BlbiBzaW11bHRhbmVvdXNseS4gIEdp dmluZyB0aGUgdGFibGUgQU0gYW4KZXhwbGljaXQgdW5kZXJzdGFuZGluZyBvZiBpbmRleCBBTSBj b25jZXB0cy9pbmRleCBwYWdlIGJvdW5kYXJpZXMgYWxsb3dzCml0IHRvIGNvbnNpZGVyIGFsbCBv ZiB0aGUgcmVsZXZhbnQgY29zdHMgYW5kIGJlbmVmaXRzLgoKUHJlZmV0Y2hpbmcgaXMgaW1wbGVt ZW50ZWQgdXNpbmcgYSBwcmVmZXRjaGluZyBwb3NpdGlvbiB1bmRlciB0aGUKY29udHJvbCBvZiB0 aGUgdGFibGUgQU0gYW5kIGNvcmUgY29kZS4gIFRoaXMgaXMgY2xvc2VseSByZWxhdGVkIHRvIHRo ZQpzY2FuIHBvc2l0aW9uIGFkZGVkIGJ5IGNvbW1pdCBGSVhNRSwgd2hpY2ggaW50cm9kdWNlZCB0 aGUgYW1nZXRiYXRjaAppbnRlcmZhY2UuICBBIHJlYWQgc3RyZWFtIGNhbGxiYWNrIGFkdmFuY2Vz IHRoZSByZWFkIHN0cmVhbSBhcyBuZWVkZWQgdG8KcHJvdmlkZSBzdWZmaWNpZW50bHkgbWFueSBo ZWFwIGJsb2NrIG51bWJlcnMgdG8gbWFpbnRhaW4gdGhlIHJlYWQKc3RyZWFtJ3MgdGFyZ2V0IHBy ZWZldGNoIGRpc3RhbmNlLgoKVGVzdGluZyBoYXMgc2hvd24gdGhhdCBpbmRleCBwcmVmZXRjaGlu ZyBjYW4gbWFrZSBpbmRleCBzY2FucyBtdWNoCmZhc3Rlci4gIExhcmdlIHJhbmdlIHNjYW5zIHRo YXQgcmV0dXJuIG1hbnkgdHVwbGVzIGNhbiBiZSBhcyBtdWNoIGFzIDMweApmYXN0ZXIgd2l0aCBs b2NhbCBTU0RzIHdoZW4gYnVmZmVyZWQgSS9PIGlzIHVzZWQsIGFuZCA1MHggZmFzdGVyIG9yIG1v cmUKd2l0aCBoaWdoZXItbGF0ZW5jeSBzdG9yYWdlIHN1Y2ggYXMgbmV0d29yay1hdHRhY2hlZCBi bG9jayBkZXZpY2VzLAp3aGVyZSB0aGUgYmVuZWZpdCBvZiBoaWRpbmcgSS9PIGxhdGVuY3kgdGhy b3VnaCBwcmVmZXRjaGluZyBpcyBldmVuCmdyZWF0ZXIuCgpBIG5ldyBHVUMgKGVuYWJsZV9pbmRl eHNjYW5fcHJlZmV0Y2gpIGNvbnRyb2xzIHRoZSB1c2Ugb2YgaW5kZXgKcHJlZmV0Y2hpbmcuICBU aGUgZGVmYXVsdCBzZXR0aW5nIGlzICdvbicsIHNvIGFsbCBwbGFpbiBpbmRleCBzY2FucyB1c2UK cHJlZmV0Y2hpbmcgd2hlcmUgc3VwcG9ydCBleGlzdHMuICBBbGwgaW5kZXgtb25seSBzY2FucyB3 aWxsIGFsc28gdXNlCnByZWZldGNoaW5nIGF1dG9tYXRpY2FsbHkgd2hlcmUgc3VwcG9ydGVkIChv bmNlIHRoZSBzY2FuIHN0YXJ0cyB0bwpyZXF1aXJlIGEgc2lnbmlmaWNhbnQgbnVtYmVyIG9mIGhl YXAgZmV0Y2hlcykuCgpBbiBpbXBvcnRhbnQgZ29hbCBvZiB0aGUgYW1nZXRiYXRjaCBkZXNpZ24g aXMgdG8gZW5hYmxlIHRoZSB0YWJsZSBBTSdzCnJlYWQgc3RyZWFtIGNhbGxiYWNrIHRvIGFkdmFu Y2UgaXRzIHByZWZldGNoIHBvc2l0aW9uIHVzaW5nIFRJRHMgdGhhdAphcHBlYXIgb24gYSBsZWFm IHBhZ2UgdGhhdCdzIGFoZWFkIG9mIHRoZSBjdXJyZW50IHNjYW4gcG9zaXRpb24ncyBsZWFmCnBh Z2UuICBUaGlzIGlzIGNydWNpYWwgd2l0aCBzY2FucyBvZiBpbmRleGVzIHdoZXJlIGVhY2ggbGVh ZiBwYWdlCmhhcHBlbnMgdG8gaGF2ZSByZWxhdGl2ZWx5IGZldyBkaXN0aW5jdCBoZWFwIGJsb2Nr cyBhbW9uZyBpdHMgbWF0Y2hpbmcKVElEcyAoYXMgd2VsbCBhcyB3aXRoIHNjYW5zIHdpdGggbGVh ZiBwYWdlcyB0aGF0IGhhdmUgcmVsYXRpdmVseSBmZXcKdG90YWwgbWF0Y2hpbmcgaXRlbXMpLiAg SW5kZXggc2NhbnMgY2FuIGhhdmUgYXMgbWFueSBhcyA2NCBvcGVuIGJhdGNoZXMsCndoaWNoIHRl c3RpbmcgaGFzIHNob3duIHRvIGJlIGFib3V0IHRoZSBtYXhpbXVtIG51bWJlciB0aGF0IGNhbiBl dmVyIGJlCnVzZWZ1bC4gIEJhdGNoZXMgYXJlIG1haW50YWluZWQgaW4gc2NhbiBvcmRlciB1c2lu ZyBhIHNpbXBsZSByaW5nIGJ1ZmZlcgpkYXRhIHN0cnVjdHVyZS4KCkluIHJhcmUgY2FzZXMgd2hl cmUgdGhlIHNjYW4gZXhjZWVkcyB0aGlzIHF1YXNpLWFyYml0cmFyeSBsaW1pdCBvZiA2NCwKdGhl IHJlYWQgc3RyZWFtIGlzIHRlbXBvcmFyaWx5IHBhdXNlZCB1c2luZyB0aGUgcmVhZCBzdHJlYW0g cGF1c2luZwptZWNoYW5pc20gYWRkZWQgYnkgY29tbWl0IDM4MjI5Y2I5LiAgUHJlZmV0Y2hpbmcg KHZpYSB0aGUgcmVhZCBzdHJlYW0pCmlzIHJlc3VtZWQgb25seSBhZnRlciB0aGUgc2NhbiBwb3Np dGlvbiBhZHZhbmNlcyBiZXlvbmQgaXRzIGN1cnJlbnQgb3BlbgpiYXRjaCBhbmQgdGhlbiBmcmVl cyBhbmQgcmVtb3ZlcyB0aGUgYmF0Y2ggZnJvbSB0aGUgc2NhbidzIGJhdGNoIHJpbmcKYnVmZmVy LiAgVGVzdGluZyBoYXMgc2hvd24gdGhhdCBpdCBpc24ndCB2ZXJ5IGNvbW1vbiBmb3Igc2NhbnMg dG8gaG9sZApvcGVuIG1vcmUgdGhhbiBhYm91dCAxMCBiYXRjaGVzIHRvIGdldCB0aGUgZGVzaXJl ZCBJL08gcHJlZmV0Y2gKZGlzdGFuY2UuCgpUaGUgaGV1cmlzdGljIHVzZWQgdG8gZGVjaWRlIHdo ZW4gdG8gYmVnaW4gcHJlZmV0Y2hpbmcgZGVsYXlzCmluaXRpYWxpemF0aW9uIG9mIHRoZSBzY2Fu J3MgcmVhZCBzdHJlYW0gdW50aWwgdGhlIHNjYW4gdHJhbnNpdGlvbnMgZnJvbQppdHMgZmlyc3Qg YmF0Y2ggdG8gaXRzIHNlY29uZCBiYXRjaC4gIEVhY2ggYmF0Y2ggY29ycmVzcG9uZHMgdG8gbWF0 Y2hpbmcKVElEcyBmcm9tIGEgc2luZ2xlIGluZGV4IGxlYWYgcGFnZSwgc28gcHJlZmV0Y2hpbmcg b25seSBiZWdpbnMgb25jZSB0aGUKc2NhbiByZWFkcyBmcm9tIGl0cyBzZWNvbmQgbGVhZiBwYWdl IGNvbnRhaW5pbmcgYXQgbGVhc3Qgb25lIG1hdGNoaW5nCml0ZW0uICBBIHNlbGVjdGl2ZSBpbmRl eCBzY2FuIHRoYXQgdG91Y2hlcyBvbmx5IG9uZSBsZWFmIHBhZ2UgbmV2ZXIKcmVhY2hlcyB0aGUg c2Vjb25kIGJhdGNoLCBzbyB0aGUgaGV1cmlzdGljIGNvcnJlY3RseSBhdm9pZHMgcHJlZmV0Y2hp bmcKb3ZlcmhlYWQuICBUaGUgcGljdHVyZSBmb3IgbW9yZSBjb21wbGljYXRlZCBjYXNlcyBpcyBt aXhlZC4KClRoZSBzYW1lIHByaW5jaXBsZSBhcHBsaWVzIHRvIG5lc3Rsb29wIGlubmVyIGluZGV4 IHNjYW5zIHdpdGggdmVyeSB0aWdodApsaW1pdHMgKGUuZy4sIGEgY29ycmVsYXRlZCBzdWJxdWVy eSB3aXRoIExJTUlUIDEpLCB3aGVyZSBlYWNoIHJlc2NhbgpyZWFkcyBmcm9tIG9ubHkgYSBzaW5n bGUgbGVhZiBwYWdlOiB0aGUgaGV1cmlzdGljIGF2b2lkcyB0aGUgY29zdCBvZgpyZXBlYXRlZGx5 IHJlc2V0dGluZyBhIHJlYWQgc3RyZWFtIGFjcm9zcyBtYW55IHJlc2NhbnMuICBPbiB0aGUgb3Ro ZXIKaGFuZCwgc29tZSBzZWxlY3RpdmUgc2NhbnMgdGhhdCBhY2Nlc3MgcmFuZG9tbHktb3JkZXJl ZCBoZWFwIHBhZ2VzIHdvdWxkCmdlbnVpbmVseSBiZW5lZml0IGZyb20gcHJlZmV0Y2hpbmcsIGJ1 dCBuZXZlciBnZXQgYXMgZmFyIGFzIHJlYWNoaW5nCnRoZWlyIHNlY29uZCBiYXRjaCAtLSBhIG1p c3NlZCBvcHBvcnR1bml0eSwgd2hlcmUgdGhlIGhldXJpc3RpYyBpcwpvdmVybHkgY2F1dGlvdXMu CgpDb252ZXJzZWx5LCB0aGUgaGV1cmlzdGljIGlzIG5vdCBjYXV0aW91cyBlbm91Z2ggd2l0aCBz bGlnaHRseSBsZXNzCnNlbGVjdGl2ZSBuZXN0bG9vcCBpbm5lciBzY2FucyAoZS5nLiwgTElNSVQg MyB3aXRoaW4gYSBMQVRFUkFMIGpvaW4pLgpUaGVzZSByZXNjYW5zIG1heSBzcGFuIHR3byBsZWFm IHBhZ2VzLCBqdXN0IGJhcmVseSBjcm9zc2luZyB0aGUKc2Vjb25kLWJhdGNoIHRocmVzaG9sZCwg d2hpbGUgc3RpbGwgb25seSBuZWVkaW5nIHRvIGZldGNoIHR3byBvciB0aHJlZQpoZWFwIHBhZ2Vz IC0tIG5vdCBlbm91Z2ggZm9yIHByZWZldGNoaW5nIHRvIHJlYWxpc3RpY2FsbHkgaGVscCBvciBw YXkKZm9yIGl0c2VsZiBvbiBhbnkgaW5kaXZpZHVhbCByZXNjYW4uICBTdWNoIHF1ZXJpZXMgYXJl IHJlZ3Jlc3NlZCBieSB0aGUKd29yayBmcm9tIHRoaXMgY29tbWl0IChyZWxhdGl2ZSB0byBQb3N0 Z3JlU1FMIDE4KSwgdGhvdWdoIG9ubHkgd2hlbiB0aGUKc2NhbiBoYXMgdG8gcmVhZCBoZWFwIHBh Z2VzIGZyb20gc3RvcmFnZS4KCkFkZGluZyBhIHNtYXJ0ZXIgaGV1cmlzdGljIHRoYXQgYWRkcmVz c2VzIGJvdGggc2hvcnRjb21pbmdzIHJlbWFpbnMgYXMKd29yayBmb3IgYSBmdXR1cmUgcmVsZWFz ZS4gIFBhc3NpbmcgZG93biBhbiBFeGVjU2V0VHVwbGVCb3VuZCBzdHlsZSBoaW50CmFuZCB1c2lu ZyB0aGF0IGhpbnQgdG8gaW5mbHVlbmNlIGhvdyB0aGUgcmVhZCBzdHJlYW0gcmFtcHMgdXAgaXRz CmRpc3RhbmNlIHNlZW1zIGxpa2UgYSBwcm9taXNpbmcgYXBwcm9hY2guCgpBdXRob3I6IFRvbWFz IFZvbmRyYSA8dG9tYXNAdm9uZHJhLm1lPgpBdXRob3I6IFBldGVyIEdlb2doZWdhbiA8cGdAYm93 dC5pZT4KUmV2aWV3ZWQtQnk6IEFuZHJlcyBGcmV1bmQgPGFuZHJlc0BhbmFyYXplbC5kZT4KUmV2 aWV3ZWQtQnk6IFRob21hcyBNdW5ybyA8dGhvbWFzLm11bnJvQGdtYWlsLmNvbT4KRGlzY3Vzc2lv bjogaHR0cHM6Ly9wb3N0Z3IuZXMvbS9jZjg1ZjQ2Zi1iMDJmLTA1YjItNTI0OC01MDAwYjg5NGVi YWJAZW50ZXJwcmlzZWRiLmNvbQotLS0KIHNyYy9pbmNsdWRlL2FjY2Vzcy9oZWFwYW0uaCAgICAg ICAgICAgICAgICAgICB8ICAxMyArCiBzcmMvaW5jbHVkZS9hY2Nlc3MvaW5kZXhiYXRjaC5oICAg ICAgICAgICAgICAgfCAgIDkgKy0KIHNyYy9pbmNsdWRlL2FjY2Vzcy9yZWxzY2FuLmggICAgICAg ICAgICAgICAgICB8ICAzOCArKwogc3JjL2luY2x1ZGUvb3B0aW1pemVyL2Nvc3QuaCAgICAgICAg ICAgICAgICAgIHwgICAxICsKIHNyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9pbmRleHNj YW4uYyAgICB8IDQ1OSArKysrKysrKysrKysrKysrKy0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9pbmRl eC9pbmRleGJhdGNoLmMgICAgICAgICB8ICAzNiArLQogc3JjL2JhY2tlbmQvb3B0aW1pemVyL3Bh dGgvY29zdHNpemUuYyAgICAgICAgIHwgICAxICsKIHNyYy9iYWNrZW5kL3V0aWxzL21pc2MvZ3Vj X3BhcmFtZXRlcnMuZGF0ICAgICB8ICAgNyArCiBzcmMvYmFja2VuZC91dGlscy9taXNjL3Bvc3Rn cmVzcWwuY29uZi5zYW1wbGUgfCAgIDEgKwogZG9jL3NyYy9zZ21sL2NvbmZpZy5zZ21sICAgICAg ICAgICAgICAgICAgICAgIHwgIDE2ICsKIGRvYy9zcmMvc2dtbC9pbmRleGFtLnNnbWwgICAgICAg ICAgICAgICAgICAgICB8ICA4NCArKystCiBkb2Mvc3JjL3NnbWwvdGFibGVhbS5zZ21sICAgICAg ICAgICAgICAgICAgICAgfCAgIDggKwogc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9zeXN2aWV3 cy5vdXQgICAgICAgIHwgICAzICstCiAxMyBmaWxlcyBjaGFuZ2VkLCA2NjAgaW5zZXJ0aW9ucygr KSwgMTYgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvYWNjZXNzL2hlYXBh bS5oIGIvc3JjL2luY2x1ZGUvYWNjZXNzL2hlYXBhbS5oCmluZGV4IDkyODFkODY0NS4uZGFhMDA5 NzIwIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9hY2Nlc3MvaGVhcGFtLmgKKysrIGIvc3JjL2lu Y2x1ZGUvYWNjZXNzL2hlYXBhbS5oCkBAIC0xMzQsNiArMTM0LDE5IEBAIHR5cGVkZWYgc3RydWN0 IEluZGV4RmV0Y2hIZWFwRGF0YQogCiAJLyogUGxhaW4gaW5kZXggc2NhbiB4c19sYXN0aW5ibG9j ayBvcHRpbWl6YXRpb24gKi8KIAlib29sCQl4c19sYXN0aW5ibG9jazsgLyogbGFzdCBUSUQgb24g dGhpcyBibG9jayBpbiBjdXJyZW50IGJhdGNoPyAqLworCisJLyoKKwkgKiBSZWFkIHN0cmVhbSBz dGF0ZSBmb3IgcHJlZmV0Y2hpbmcgKG9ubHkgdXNlZCBkdXJpbmcgYW1nZXRiYXRjaCBzY2Fucyku CisJICoKKwkgKiBUaGUgcmVhZCBzdHJlYW0gbW92ZXMgYWhlYWQgb2YgdGhlIHNjYW4ncyBjdXJy ZW50IHBvc2l0aW9uIHVzaW5nIGl0cworCSAqIG93biBwcmVmZXRjaGluZyBwb3NpdGlvbiAocGVy IGNvbnZlbnRpb25zIHN1cHBvcnRlZCBieSBpbmRleGJhdGNoLmMpLgorCSAqIFRoZSByZWFkIHN0 cmVhbSBpcyBhbGxvY2F0ZWQgZWFybHkgaW4gdGhlIHNjYW4sIGFuZCByZXNldCBvbiByZXNjYW4K KwkgKiAoYW5kIHdoZW4gdGhlIHNjYW4gZGlyZWN0aW9uIGNoYW5nZXMpLgorCSAqLworCWJvb2wJ CXhzX3BhdXNlZDsJCS8qIHBhdXNlZCB1bnRpbCBuZXh0IGJhdGNoIGlzIHJlYWQ/ICovCisJU2Nh bkRpcmVjdGlvbiB4c19yZWFkX3N0cmVhbV9kaXI7CS8qIGluZGV4IHNjYW4gZGlyZWN0aW9uICov CisJQmxvY2tOdW1iZXIgeHNfcHJlZmV0Y2hfYmxvY2s7CS8qIGxhc3QgYmxvY2sgcmV0dXJuZWQg dG8geHNfcmVhZF9zdHJlYW0gKi8KKwlSZWFkU3RyZWFtICp4c19yZWFkX3N0cmVhbTsgLyogcHJl ZmV0Y2hpbmcgcmVhZCBzdHJlYW0gKi8KIH0gSW5kZXhGZXRjaEhlYXBEYXRhOwogCiAvKiBSZXN1 bHQgY29kZXMgZm9yIEhlYXBUdXBsZVNhdGlzZmllc1ZhY3V1bSAqLwpkaWZmIC0tZ2l0IGEvc3Jj L2luY2x1ZGUvYWNjZXNzL2luZGV4YmF0Y2guaCBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9pbmRleGJh dGNoLmgKaW5kZXggOWY4N2ZiOTZhLi5jN2IzZDQ3NTAgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRl L2FjY2Vzcy9pbmRleGJhdGNoLmgKKysrIGIvc3JjL2luY2x1ZGUvYWNjZXNzL2luZGV4YmF0Y2gu aApAQCAtNDQsNiArNDQsNyBAQCB0YWJsZWFtX3V0aWxfYmF0Y2hzY2FuX2luaXQoSW5kZXhTY2Fu RGVzYyBzY2FuKQogCUFzc2VydChzY2FuLT5pbmRleFJlbGF0aW9uLT5yZF9pbmRhbS0+YW1nZXRi YXRjaCAhPSBOVUxMKTsKIAogCXNjYW4tPmJhdGNocmluZ2J1Zi5zY2FuUG9zLnZhbGlkID0gZmFs c2U7CisJc2Nhbi0+YmF0Y2hyaW5nYnVmLnByZWZldGNoUG9zLnZhbGlkID0gZmFsc2U7CiAJc2Nh bi0+YmF0Y2hyaW5nYnVmLm1hcmtQb3MudmFsaWQgPSBmYWxzZTsKIAogCXNjYW4tPmJhdGNocmlu Z2J1Zi5tYXJrQmF0Y2ggPSBOVUxMOwpAQCAtNjUsMTYgKzY2LDE2IEBAIGV4dGVybiB2b2lkIHRh YmxlYW1fdXRpbF91bmd1YXJkX2JhdGNoKEluZGV4U2NhbkRlc2Mgc2NhbiwgSW5kZXhTY2FuQmF0 Y2ggYmF0Y2gpCiAvKgogICogRmV0Y2ggdGhlIG5leHQgYmF0Y2ggb2YgbWF0Y2hpbmcgaXRlbXMg Zm9yIHRoZSBzY2FuIChvciB0aGUgZmlyc3QpLgogICoKLSAqIENhbGxlZCB3aGVuIGNhbGxlcidz IGN1cnJlbnQgYmF0Y2ggKHBhc3NlZCB0byB1cyBhcyBwcmlvckJhdGNoKSBoYXMgbm8gbW9yZQot ICogbWF0Y2hpbmcgaXRlbXMgaW4gdGhlIGdpdmVuIHNjYW4gZGlyZWN0aW9uLiAgQ2FsbGVyIHBh c3NlcyBhIE5VTEwKLSAqIHByaW9yQmF0Y2ggb24gdGhlIGZpcnN0IGNhbGwgaGVyZSBmb3IgdGhl IHNjYW4uCisgKiBDYWxsZWQgd2hlbiBjYWxsZXIncyBjdXJyZW50IHNjYW5CYXRjaC9wcmVmZXRj aEJhdGNoIChwYXNzZWQgdG8gdXMgYXMKKyAqIHByaW9yQmF0Y2gpIGhhcyBubyBtb3JlIG1hdGNo aW5nIGl0ZW1zIGluIHRoZSBnaXZlbiBzY2FuIGRpcmVjdGlvbi4gIENhbGxlcgorICogcGFzc2Vz IGEgTlVMTCBwcmlvckJhdGNoIG9uIHRoZSBmaXJzdCBjYWxsIGhlcmUgZm9yIHRoZSBzY2FuLgog ICoKICAqIFJldHVybnMgdGhlIG5leHQgYmF0Y2ggdG8gYmUgcHJvY2Vzc2VkIGJ5IGNhbGxlciBp biB0aGUgZ2l2ZW4gc2NhbgogICogZGlyZWN0aW9uLCBvciBOVUxMIHdoZW4gdGhlcmUgYXJlIG5v IG1vcmUgbWF0Y2hlcyBpbiB0aGF0IGRpcmVjdGlvbi4KICAqCiAgKiBUaGlzIGlzIHdoZXJlIGJh dGNoZXMgYXJlIGFwcGVuZGVkIHRvIHRoZSBzY2FuJ3MgcmluZyBidWZmZXIuICBXZSBkb24ndAog ICogZnJlZSBhbnkgYmF0Y2hlcyBoZXJlLCB0aG91Z2g7IHRoYXQgaXMgbGVmdCB1cCB0byB0aGUg Y2FsbGVyLiAgVGhlIGNhbGxlcgotICogaXMgYWxzbyByZXNwb25zaWJsZSBmb3IgYWR2YW5jaW5n IHRoZWlyIHBvc2l0aW9uLgorICogaXMgYWxzbyByZXNwb25zaWJsZSBmb3IgYWR2YW5jaW5nIHRo ZWlyIHNjYW5Qb3MvcHJlZmV0Y2hQb3MgcG9zaXRpb24uCiAgKi8KIHN0YXRpYyBwZ19hdHRyaWJ1 dGVfYWx3YXlzX2lubGluZSBJbmRleFNjYW5CYXRjaAogdGFibGVhbV91dGlsX2ZldGNoX25leHRf YmF0Y2goSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcmVjdGlvbiwKZGlmZiAt LWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9yZWxzY2FuLmggYi9zcmMvaW5jbHVkZS9hY2Nlc3Mv cmVsc2Nhbi5oCmluZGV4IDM0MjFjODNjMS4uZDhlNjY4NWI2IDEwMDY0NAotLS0gYS9zcmMvaW5j bHVkZS9hY2Nlc3MvcmVsc2Nhbi5oCisrKyBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9yZWxzY2FuLmgK QEAgLTIxNSw2ICsyMTUsMTAgQEAgdHlwZWRlZiBzdHJ1Y3QgSW5kZXhTY2FuQmF0Y2hEYXRhCiAJ ICogVGhpcyBhbGxvd3MgdGFibGUgQU1zIHRvIGF2b2lkIHJlZHVuZGFudCBhbWdldGJhdGNoIGNh bGxzIHdpdGggdGhlIHNhbWUKIAkgKiBwcmlvcmJhdGNoIC0tIHRoZSBpbmRleCBBTSBtaWdodCBu ZWVkIHRvIHJlYWQgYWRkaXRpb25hbCBpbmRleCBwYWdlcyB0bwogCSAqIGRldGVybWluZSB0aGVy ZSBhcmUgbm8gbW9yZSBtYXRjaGluZyBpdGVtcyBiZXlvbmQgY2FsbGVyJ3MgcHJpb3JiYXRjaC4K KwkgKiBJbiBwYXJ0aWN1bGFyLCBkdXJpbmcgcHJlZmV0Y2hpbmcgdGhlIHJlYWQgc3RyZWFtIGNh bGxiYWNrIGRpc2NvdmVycworCSAqIHRoZSBlbmQtb2Ytc2NhbiB2aWEgcHJlZmV0Y2hCYXRjaC4g IHRhYmxlYW1fdXRpbF9mZXRjaF9uZXh0X2JhdGNoKCkKKwkgKiBjaGVja3MgdGhlc2UgZmxhZ3Mg c28gdGhhdCB0aGUgc2NhbiBzaWRlIGRvZXNuJ3QgcmVwZWF0IHRoZSBzYW1lCisJICogYW1nZXRi YXRjaCBjYWxsIHdoZW4gaXQgbGF0ZXIgcmVhY2hlcyB0aGF0IGJhdGNoIGFzIHNjYW5CYXRjaC4K IAkgKi8KIAlib29sCQlrbm93bkVuZEJhY2t3YXJkOwogCWJvb2wJCWtub3duRW5kRm9yd2FyZDsK QEAgLTI2NiwxMSArMjcwLDE0IEBAIHR5cGVkZWYgc3RydWN0IEluZGV4U2NhbkJhdGNoRGF0YSAq SW5kZXhTY2FuQmF0Y2g7CiAgKiBjdXJyZW50IHJlYWQgcG9zaXRpb24gYnkgX211bHRpcGxlXyBi YXRjaGVzL2luZGV4IHBhZ2VzLiAgVGhlIGZ1cnRoZXIgb3V0CiAgKiB0aGUgdGFibGUgQU0gcmVh ZHMgYWhlYWQgbGlrZSB0aGlzLCB0aGUgZnVydGhlciBpdCBjYW4gc2VlIGludG8gdGhlIGZ1dHVy ZS4KICAqIFRoYXQgd2F5IHRoZSB0YWJsZSBBTSBpcyBhYmxlIHRvIHJlb3JkZXIgd29yayBhcyBh Z2dyZXNzaXZlbHkgYXMgZGVzaXJlZC4KKyAqIEluZGV4IHNjYW5zIHNvbWV0aW1lcyBuZWVkIHRv IHJlYWRhaGVhZCBieSBzZXZlcmFsIGRvemVuIGJhdGNoZXMgaW4gb3JkZXIKKyAqIHRvIG1haW50 YWluIGFuIG9wdGltYWwgSS9PIHByZWZldGNoIGRpc3RhbmNlIChmb3IgcmVhZGluZyB0YWJsZSBi bG9ja3MpLgogICovCiB0eXBlZGVmIHN0cnVjdCBCYXRjaFJpbmdCdWZmZXIKIHsKIAkvKiBjdXJy ZW50IHBvc2l0aW9ucyBpbiBJbmRleFNjYW5EZXNjRGF0YS5iYXRjaGJ1ZltdIGZvciBzY2FuICov CiAJQmF0Y2hSaW5nSXRlbVBvcyBzY2FuUG9zOwkvKiBzY2FuJ3MgcmVhZCBwb3NpdGlvbiAqLwor CUJhdGNoUmluZ0l0ZW1Qb3MgcHJlZmV0Y2hQb3M7CS8qIHByZWZldGNoaW5nIHBvc2l0aW9uICov CiAJQmF0Y2hSaW5nSXRlbVBvcyBtYXJrUG9zOwkvKiBtYXJrL3Jlc3RvcmUgcG9zaXRpb24gKi8K IAogCS8qIG1hcmtQb3MncyBiYXRjaCAobm90IGluIHJpbmcgYnVmZmVyIHdoZW4gbWFya0JhdGNo ICE9IHNjYW5CYXRjaCkgKi8KQEAgLTUwOCw2ICs1MTUsMzcgQEAgaW5kZXhfc2Nhbl9iYXRjaF9i YXNlKEluZGV4U2NhbkRlc2NEYXRhICpzY2FuLCBJbmRleFNjYW5CYXRjaCBiYXRjaCkKIAlyZXR1 cm4gKGNoYXIgKikgYmF0Y2ggLSBzY2FuLT5iYXRjaF90YWJsZV9vZmZzZXQ7CiB9CiAKKy8qCisg KiBDb21wYXJlIHR3byBiYXRjaCByaW5nIHBvc2l0aW9ucyBpbiB0aGUgZ2l2ZW4gc2NhbiBkaXJl Y3Rpb24uCisgKgorICogUmV0dXJucyBuZWdhdGl2ZSBpZiBwb3MxIGlzIGJlaGluZCBwb3MyLCAw IGlmIGVxdWFsLCBwb3NpdGl2ZSBpZiBwb3MxIGlzCisgKiBhaGVhZCBvZiBwb3MyLgorICovCitz dGF0aWMgaW5saW5lIGludAoraW5kZXhfc2Nhbl9wb3NfY21wKEJhdGNoUmluZ0l0ZW1Qb3MgKnBv czEsIEJhdGNoUmluZ0l0ZW1Qb3MgKnBvczIsCisJCQkJICAgU2NhbkRpcmVjdGlvbiBkaXJlY3Rp b24pCit7CisJaW50OAkJYmF0Y2hkaWZmOworCisJQXNzZXJ0KHBvczEtPnZhbGlkICYmIHBvczIt PnZhbGlkKTsKKworCWJhdGNoZGlmZiA9IChpbnQ4KSAocG9zMS0+YmF0Y2ggLSBwb3MyLT5iYXRj aCk7CisJaWYgKGJhdGNoZGlmZiAhPSAwKQorCXsKKwkJLyogUmVzb2x2ZSBjb21wYXJpc29uIHVz aW5nIGRpZmZlcmluZyBiYXRjaCBvZmZzZXRzICovCisJCXJldHVybiBiYXRjaGRpZmY7CisJfQor CisJLyoKKwkgKiBSZXNvbHZlIGNvbXBhcmlzb24gdXNpbmcgaXRlbXNbXS13aXNlIGluZGV4ZXMg ZnJvbSBjYWxsZXIncyBwb3NpdGlvbnMsCisJICogc2luY2UgYm90aCBwb3NpdGlvbnMgcG9pbnQg dG8gdGhlIHNhbWUgcmluZyBidWZmZXIgYmF0Y2gKKwkgKi8KKwlpZiAoU2NhbkRpcmVjdGlvbklz Rm9yd2FyZChkaXJlY3Rpb24pKQorCQlyZXR1cm4gcG9zMS0+aXRlbSAtIHBvczItPml0ZW07CisJ ZWxzZQorCQlyZXR1cm4gcG9zMi0+aXRlbSAtIHBvczEtPml0ZW07Cit9CisKIC8qCiAgKiBBZHZh bmNlIHBvc2l0aW9uIHRvIGl0cyBuZXh0IGl0ZW0gaW4gdGhlIGJhdGNoLgogICoKZGlmZiAtLWdp dCBhL3NyYy9pbmNsdWRlL29wdGltaXplci9jb3N0LmggYi9zcmMvaW5jbHVkZS9vcHRpbWl6ZXIv Y29zdC5oCmluZGV4IGYyZmQ1ZDMxNS4uNDE5MzAwYTZiIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVk ZS9vcHRpbWl6ZXIvY29zdC5oCisrKyBiL3NyYy9pbmNsdWRlL29wdGltaXplci9jb3N0LmgKQEAg LTUyLDYgKzUyLDcgQEAgZXh0ZXJuIFBHRExMSU1QT1JUIGludCBtYXhfcGFyYWxsZWxfd29ya2Vy c19wZXJfZ2F0aGVyOwogZXh0ZXJuIFBHRExMSU1QT1JUIGJvb2wgZW5hYmxlX3NlcXNjYW47CiBl eHRlcm4gUEdETExJTVBPUlQgYm9vbCBlbmFibGVfaW5kZXhzY2FuOwogZXh0ZXJuIFBHRExMSU1Q T1JUIGJvb2wgZW5hYmxlX2luZGV4b25seXNjYW47CitleHRlcm4gUEdETExJTVBPUlQgYm9vbCBl bmFibGVfaW5kZXhzY2FuX3ByZWZldGNoOwogZXh0ZXJuIFBHRExMSU1QT1JUIGJvb2wgZW5hYmxl X2JpdG1hcHNjYW47CiBleHRlcm4gUEdETExJTVBPUlQgYm9vbCBlbmFibGVfdGlkc2NhbjsKIGV4 dGVybiBQR0RMTElNUE9SVCBib29sIGVuYWJsZV9zb3J0OwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvYWNjZXNzL2hlYXAvaGVhcGFtX2luZGV4c2Nhbi5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hl YXAvaGVhcGFtX2luZGV4c2Nhbi5jCmluZGV4IGI2ZTU3ZjhmOC4uZmQ3MGFkNWJjIDEwMDY0NAot LS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1faW5kZXhzY2FuLmMKKysrIGIvc3Jj L2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtX2luZGV4c2Nhbi5jCkBAIC0xOSw2ICsxOSw3IEBA CiAjaW5jbHVkZSAiYWNjZXNzL2luZGV4YmF0Y2guaCIKICNpbmNsdWRlICJhY2Nlc3MvcmVsc2Nh bi5oIgogI2luY2x1ZGUgImFjY2Vzcy92aXNpYmlsaXR5bWFwLmgiCisjaW5jbHVkZSAib3B0aW1p emVyL2Nvc3QuaCIKICNpbmNsdWRlICJzdG9yYWdlL3ByZWRpY2F0ZS5oIgogI2luY2x1ZGUgInV0 aWxzL3Bnc3RhdF9pbnRlcm5hbC5oIgogCkBAIC00MCw2ICs0MSw5IEBAIHR5cGVkZWYgc3RydWN0 IEhlYXBCYXRjaERhdGEKICNkZWZpbmUgSEVBUF9CQVRDSF9WSVNfQ0hFQ0tFRAkJMHgwMQkvKiBj aGVja2VkIGl0ZW0gaW4gVk0/ICovCiAjZGVmaW5lIEhFQVBfQkFUQ0hfVklTX0FMTF9WSVNJQkxF CTB4MDIJLyogYmxvY2sgaXMga25vd24gYWxsLXZpc2libGU/ICovCiAKK3N0YXRpYyBwZ19ub2lu bGluZSB2b2lkIGhlYXBhbV9pbmRleF9kaXJjaGFuZ2VfcmVzZXQoSW5kZXhGZXRjaEhlYXBEYXRh ICpoc2NhbiwKKwkJCQkJCQkJCQkJCQkgU2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24sCisJCQkJCQkJ CQkJCQkJIEJhdGNoUmluZ0J1ZmZlciAqYmF0Y2hyaW5nYnVmKTsKIHN0YXRpYyBpbmxpbmUgSGVh cEJhdGNoRGF0YSAqaGVhcGFtX2luZGV4X2JhdGNoX2RhdGEoSW5kZXhTY2FuRGVzYyBzY2FuLAog CQkJCQkJCQkJCQkJCSBJbmRleFNjYW5CYXRjaCBiYXRjaCk7CiBzdGF0aWMgaW5saW5lIEl0ZW1Q b2ludGVyIGhlYXBhbV9pbmRleF9yZXR1cm5fc2NhbnBvc190aWQoSW5kZXhTY2FuRGVzYyBzY2Fu LApAQCAtNTMsNiArNTcsOSBAQCBzdGF0aWMgdm9pZCBoZWFwYW1faW5kZXhfYmF0Y2hfcG9zX3Zp c2liaWxpdHkoSW5kZXhTY2FuRGVzYyBzY2FuLAogCQkJCQkJCQkJCQkgIEluZGV4U2NhbkJhdGNo IGJhdGNoLAogCQkJCQkJCQkJCQkgIEhlYXBCYXRjaERhdGEgKmhiYXRjaCwKIAkJCQkJCQkJCQkJ ICBCYXRjaFJpbmdJdGVtUG9zICpwb3MpOworc3RhdGljIEJsb2NrTnVtYmVyIGhlYXBhbV9pbmRl eF9wcmVmZXRjaF9uZXh0X2Jsb2NrKFJlYWRTdHJlYW0gKnN0cmVhbSwKKwkJCQkJCQkJCQkJCQl2 b2lkICpjYWxsYmFja19wcml2YXRlX2RhdGEsCisJCQkJCQkJCQkJCQkJdm9pZCAqcGVyX2J1ZmZl cl9kYXRhKTsKIHN0YXRpYyBib29sIGhlYXBhbV9pbmRleF9wbGFpbl9iYXRjaF9nZXRuZXh0X3Ns b3QoSW5kZXhTY2FuRGVzYyBzY2FuLAogCQkJCQkJCQkJCQkJICBTY2FuRGlyZWN0aW9uIGRpcmVj dGlvbiwKIAkJCQkJCQkJCQkJCSAgVHVwbGVUYWJsZVNsb3QgKnNsb3QpOwpAQCAtMTI5LDYgKzEz NiwxMCBAQCBoZWFwYW1faW5kZXhfZmV0Y2hfYmVnaW4oSW5kZXhTY2FuRGVzYyBzY2FuLCB1aW50 MzIgZmxhZ3MpCiAJLyogeHNfbGFzdGluYmxvY2sgb3B0aW1pemF0aW9uIHN0YXRlICovCiAJQXNz ZXJ0KCFoc2Nhbi0+eHNfbGFzdGluYmxvY2spOwogCisJLyogUmVhZCBzdHJlYW0gc3RhdGUgKG90 aGVyIGZpZWxkcyBpbml0aWFsaXplZCBieSBjYWxsYmFjaykgKi8KKwlBc3NlcnQoaHNjYW4tPnhz X3JlYWRfc3RyZWFtX2RpciA9PSBOb01vdmVtZW50U2NhbkRpcmVjdGlvbik7CisJQXNzZXJ0KGhz Y2FuLT54c19yZWFkX3N0cmVhbSA9PSBOVUxMKTsKKwogCS8qIFJlc29sdmUgd2hpY2ggeHNfZ2V0 bmV4dF9zbG90IGltcGxlbWVudGF0aW9uIHRvIHVzZSBmb3IgdGhpcyBzY2FuICovCiAJaWYgKHNj YW4tPmluZGV4UmVsYXRpb24tPnJkX2luZGFtLT5hbWdldGJhdGNoICE9IE5VTEwpCiAJewpAQCAt MTk4LDYgKzIwOSwxNSBAQCBoZWFwYW1faW5kZXhfZmV0Y2hfcmVzZXQoSW5kZXhTY2FuRGVzYyBz Y2FuKQogCS8qIFJlc2NhbnMgc2hvdWxkIGF2b2lkIGFuIGV4Y2Vzc2l2ZSBudW1iZXIgb2YgVk0g bG9va3VwcyAqLwogCWhzY2FuLT54c192bV9pdGVtcyA9IDE7CiAKKwkvKiBEZWZlbnNpdmVseSBk byBhbiB1bmNvbmRpdGlvbmFsIHJlYWQgc3RyZWFtIGRpcmVjdGlvbiByZXNldCAqLworCWhzY2Fu LT54c19yZWFkX3N0cmVhbV9kaXIgPSBOb01vdmVtZW50U2NhbkRpcmVjdGlvbjsKKworCWlmICho c2Nhbi0+eHNfcmVhZF9zdHJlYW0pCisJeworCQloc2Nhbi0+eHNfcGF1c2VkID0gZmFsc2U7CisJ CXJlYWRfc3RyZWFtX3Jlc2V0KGhzY2FuLT54c19yZWFkX3N0cmVhbSk7CisJfQorCiAJLyogUmVz ZXQgYmF0Y2ggcmluZyBidWZmZXIgc3RhdGUgKi8KIAlpZiAoc2Nhbi0+dXNlYmF0Y2hyaW5nKQog CQl0YWJsZWFtX3V0aWxfYmF0Y2hzY2FuX3Jlc2V0KHNjYW4sIGZhbHNlKTsKQEAgLTIyMiw2ICsy NDIsOSBAQCBoZWFwYW1faW5kZXhfZmV0Y2hfZW5kKEluZGV4U2NhbkRlc2Mgc2NhbikKIAlpZiAo QnVmZmVySXNWYWxpZChoc2Nhbi0+eHNfdm1idWZmZXIpKQogCQlSZWxlYXNlQnVmZmVyKGhzY2Fu LT54c192bWJ1ZmZlcik7CiAKKwlpZiAoaHNjYW4tPnhzX3JlYWRfc3RyZWFtKQorCQlyZWFkX3N0 cmVhbV9lbmQoaHNjYW4tPnhzX3JlYWRfc3RyZWFtKTsKKwogCS8qIEZyZWUgYWxsIGJhdGNoIHJl bGF0ZWQgcmVzb3VyY2VzICovCiAJaWYgKHNjYW4tPnVzZWJhdGNocmluZykKIAkJdGFibGVhbV91 dGlsX2JhdGNoc2Nhbl9lbmQoc2Nhbik7CkBAIC0yNDYsOCArMjY5LDE2IEBAIGhlYXBhbV9pbmRl eF9mZXRjaF9tYXJrcG9zKEluZGV4U2NhbkRlc2Mgc2NhbikKIHZvaWQKIGhlYXBhbV9pbmRleF9m ZXRjaF9yZXN0cnBvcyhJbmRleFNjYW5EZXNjIHNjYW4pCiB7CisJSW5kZXhGZXRjaEhlYXBEYXRh ICpoc2NhbiA9IChJbmRleEZldGNoSGVhcERhdGEgKikgc2Nhbi0+eHNfaGVhcGZldGNoOworCiAJ QXNzZXJ0KHNjYW4tPnVzZWJhdGNocmluZyk7CiAKKwlpZiAoaHNjYW4tPnhzX3JlYWRfc3RyZWFt KQorCXsKKwkJaHNjYW4tPnhzX3BhdXNlZCA9IGZhbHNlOworCQlyZWFkX3N0cmVhbV9yZXNldCho c2Nhbi0+eHNfcmVhZF9zdHJlYW0pOworCX0KKwogCXRhYmxlYW1fdXRpbF9iYXRjaHNjYW5fcmVz dG9yZV9wb3Moc2Nhbik7CiB9CiAKQEAgLTQ0OSw3ICs0ODAsMTQgQEAgaGVhcGFtX2luZGV4X2Zl dGNoX3R1cGxlKFJlbGF0aW9uIHJlbCwKIAkJaWYgKEJ1ZmZlcklzVmFsaWQoaHNjYW4tPnhzX2Ni dWYpKQogCQkJUmVsZWFzZUJ1ZmZlcihoc2Nhbi0+eHNfY2J1Zik7CiAKLQkJaHNjYW4tPnhzX2Ni dWYgPSBSZWFkQnVmZmVyKHJlbCwgaHNjYW4tPnhzX2Jsayk7CisJCS8qCisJCSAqIFdoZW4gdXNp bmcgYSByZWFkIHN0cmVhbSwgdGhlIHN0cmVhbSB3aWxsIGFscmVhZHkga25vdyB3aGljaCBibG9j aworCQkgKiBudW1iZXIgY29tZXMgbmV4dCAodGhvdWdoIGFuIGFzc2VydGlvbiB3aWxsIHZlcmlm eSBhIG1hdGNoIGJlbG93KQorCQkgKi8KKwkJaWYgKGhzY2FuLT54c19yZWFkX3N0cmVhbSkKKwkJ CWhzY2FuLT54c19jYnVmID0gcmVhZF9zdHJlYW1fbmV4dF9idWZmZXIoaHNjYW4tPnhzX3JlYWRf c3RyZWFtLCBOVUxMKTsKKwkJZWxzZQorCQkJaHNjYW4tPnhzX2NidWYgPSBSZWFkQnVmZmVyKHJl bCwgaHNjYW4tPnhzX2Jsayk7CiAKIAkJLyoKIAkJICogUHJ1bmUgcGFnZSB3aGVuIGl0IGlzIHBp bm5lZCBmb3IgdGhlIGZpcnN0IHRpbWUKQEAgLTU3Miw2ICs2MTAsNjkgQEAgaGVhcGFtX2luZGV4 X2ZldGNoX2hlYXBfaXRlbShJbmRleFNjYW5EZXNjIHNjYW4sIEluZGV4RmV0Y2hIZWFwRGF0YSAq aHNjYW4sCiAJcmV0dXJuIGZvdW5kOwogfQogCisvKgorICogSGFuZGxlIGEgY2hhbmdlIGluIGlu ZGV4IHNjYW4gZGlyZWN0aW9uIChhdCB0aGUgdHVwbGUgZ3JhbnVsYXJpdHkpLgorICoKKyAqIFJl c2V0cyB0aGUgcmVhZCBzdHJlYW0sIHNpbmNlIHdlIGNhbid0IHJlbHkgb24gc2NhblBvcyBjb250 aW51aW5nIHRvIGFncmVlCisgKiB3aXRoIHRoZSBibG9ja3MgdGhhdCByZWFkIHN0cmVhbSBhbHJl YWR5IGNvbnN1bWVkIHVzaW5nIHByZWZldGNoUG9zLgorICoKKyAqIE5vdGU6IGlmZiB0aGUgc2Nh biBfY29udGludWVzXyBpbiB0aGlzIG5ldyBkaXJlY3Rpb24sIGFuZCBhY3R1YWxseSBzdGVwcwor ICogb2ZmIHNjYW5CYXRjaCB0byBhbiBlYXJsaWVyIGluZGV4IHBhZ2UsIHRhYmxlYW1fdXRpbF9m ZXRjaF9uZXh0X2JhdGNoIHdpbGwKKyAqIGRlYWwgd2l0aCBpdC4gIEJ1dCB0aGF0IG1pZ2h0IG5l dmVyIGhhcHBlbjsgdGhlIHNjYW4gbWlnaHQgeWV0IGNoYW5nZQorICogZGlyZWN0aW9uIGFnYWlu IChvciBqdXN0IGVuZCBiZWZvcmUgcmV0dXJuaW5nIG1vcmUgaXRlbXMpLgorICovCitzdGF0aWMg cGdfbm9pbmxpbmUgdm9pZAoraGVhcGFtX2luZGV4X2RpcmNoYW5nZV9yZXNldChJbmRleEZldGNo SGVhcERhdGEgKmhzY2FuLAorCQkJCQkJCSBTY2FuRGlyZWN0aW9uIGRpcmVjdGlvbiwKKwkJCQkJ CQkgQmF0Y2hSaW5nQnVmZmVyICpiYXRjaHJpbmdidWYpCit7CisJLyogUmVzZXQgcmVhZCBzdHJl YW0gc3RhdGUgKi8KKwliYXRjaHJpbmdidWYtPnByZWZldGNoUG9zLnZhbGlkID0gZmFsc2U7CisJ aHNjYW4tPnhzX3BhdXNlZCA9IGZhbHNlOworCWhzY2FuLT54c19yZWFkX3N0cmVhbV9kaXIgPSBk aXJlY3Rpb247CisKKwkvKiBSZXNldCByZWFkIHN0cmVhbSBpdHNlbGYgKi8KKwlpZiAoaHNjYW4t PnhzX3JlYWRfc3RyZWFtKQorCQlyZWFkX3N0cmVhbV9yZXNldChoc2Nhbi0+eHNfcmVhZF9zdHJl YW0pOworfQorCisvKgorICogRGVjaWRlIHdoZXRoZXIgdG8gc3RhcnQgYSByZWFkIHN0cmVhbSBm b3IgaGVhcCBibG9jayBwcmVmZXRjaGluZyBkdXJpbmcgYW4KKyAqIGluZGV4IHNjYW4uCisgKgor ICogQ2FsbGVkIGVhY2ggdGltZSBhIG5ldyBiYXRjaCBpcyBvYnRhaW5lZCBmcm9tIHRoZSBpbmRl eCBBTSwgYmFycmluZyB0aGUKKyAqIGZpcnN0IHRpbWUgdGhhdCBoYXBwZW5zLiAgV2UgZGVsYXkg aW5pdGlhbGl6aW5nIHRoZSBzdHJlYW0gdW50aWwgcmVhZGluZworICogZnJvbSB0aGUgc2Nhbidz IHNlY29uZCBiYXRjaC4gIFRoaXMgaGV1cmlzdGljIGF2b2lkcyB3YXN0aW5nIGN5Y2xlcyBvbgor ICogc3RhcnRpbmcgYSByZWFkIHN0cmVhbSBmb3IgdmVyeSBzZWxlY3RpdmUgaW5kZXggc2NhbnMu CisgKgorICogV2UgYXZvaWQgcHJlZmV0Y2hpbmcgZHVyaW5nIHNjYW5zIHdoZXJlIHdlJ3JlIHVu YWJsZSB0byB1bmd1YXJkICh1bnBpbikKKyAqIGVhY2ggYmF0Y2gncyBidWZmZXJzIHJpZ2h0IGF3 YXkgKG5vbi1NVkNDIHNuYXBzaG90IHNjYW5zKS4gIFdlIGFyZSBub3QKKyAqIHByZXBhcmVkIHRv IHNlbnNpYmx5IGxpbWl0IHRoZSB0b3RhbCBudW1iZXIgb2YgYnVmZmVyIHBpbnMgaGVsZCAocmVh ZAorICogc3RyZWFtIGhhbmRsZXMgYWxsIHBpbiByZXNvdXJjZSBtYW5hZ2VtZW50IGZvciB1cywg YW5kIGtub3dzIG5vdGhpbmcKKyAqIGFib3V0IHBpbnMgaGVsZCBvbiBpbmRleCBwYWdlcy93aXRo aW4gYmF0Y2hlcykuCisgKgorICogV2UgYWxzbyBkZWxheSBjcmVhdGluZyBhIHJlYWQgc3RyZWFt IGR1cmluZyBpbmRleC1vbmx5IHNjYW5zIHRoYXQgaGF2ZW4ndAorICogZG9uZSBhbnkgaGVhcCBm ZXRjaGVzIHlldC4gIFdlIGRvbid0IHdhbnQgdG8gd2FzdGUgYW55IGN5Y2xlcyBvbgorICogYWxs b2NhdGluZyBhIHJlYWQgc3RyZWFtIHVudGlsIHdlIGhhdmUgYSBkZW1vbnN0cmF0ZWQgbmVlZCB0 byBwZXJmb3JtCisgKiBoZWFwIGZldGNoZXMuCisgKi8KK3N0YXRpYyBwZ19hdHRyaWJ1dGVfYWx3 YXlzX2lubGluZSB2b2lkCitoZWFwYW1faW5kZXhfY29uc2lkZXJfcHJlZmV0Y2hpbmcoSW5kZXhT Y2FuRGVzYyBzY2FuLAorCQkJCQkJCQkgIEluZGV4RmV0Y2hIZWFwRGF0YSAqaHNjYW4pCit7CisJ QXNzZXJ0KCFoc2Nhbi0+eHNfcmVhZF9zdHJlYW0pOworCUFzc2VydCghc2Nhbi0+YmF0Y2hyaW5n YnVmLnByZWZldGNoUG9zLnZhbGlkKTsKKworCWlmIChzY2FuLT5NVkNDU2NhbiAmJiBlbmFibGVf aW5kZXhzY2FuX3ByZWZldGNoICYmCisJCWhzY2FuLT54c19ibGsgIT0gSW52YWxpZEJsb2NrTnVt YmVyKQkvKiBmb3IgaW5kZXgtb25seSBzY2FucyAqLworCQloc2Nhbi0+eHNfcmVhZF9zdHJlYW0g PQorCQkJcmVhZF9zdHJlYW1fYmVnaW5fcmVsYXRpb24oUkVBRF9TVFJFQU1fREVGQVVMVCwgTlVM TCwKKwkJCQkJCQkJCSAgIHNjYW4tPmhlYXBSZWxhdGlvbiwgTUFJTl9GT1JLTlVNLAorCQkJCQkJ CQkJICAgaGVhcGFtX2luZGV4X3ByZWZldGNoX25leHRfYmxvY2ssCisJCQkJCQkJCQkgICBzY2Fu LCAwKTsKKwkvKiBlbHNlIGRvbid0IHN0YXJ0IGEgcmVhZCBzdHJlYW0gZm9yIHByZWZldGNoaW5n IChub3QgeWV0LCBhdCBsZWFzdCkgKi8KK30KKwogLyoKICAqIEdldCBuZXh0IFRJRCBmcm9tIGJh dGNoIHJpbmcgYnVmZmVyLCBtb3ZpbmcgaW4gdGhlIGdpdmVuIHNjYW4gZGlyZWN0aW9uLgogICog QWxzbyBzZXRzICphbGxfdmlzaWJsZSBmb3IgaXRlbSB3aGVuIGNhbGxlciBwYXNzZXMgYSBub24t TlVMTCBhcmcuCkBAIC01ODksNiArNjkwLDEyIEBAIGhlYXBhbV9pbmRleF9nZXRuZXh0X3NjYW5i YXRjaF9wb3MoSW5kZXhTY2FuRGVzYyBzY2FuLCBJbmRleEZldGNoSGVhcERhdGEgKmhzY2FuCiAJ QXNzZXJ0KHNjYW5Qb3MtPnZhbGlkIHx8IGluZGV4X3NjYW5fYmF0Y2hfY291bnQoc2NhbikgPT0g MCk7CiAJQXNzZXJ0KGFsbF92aXNpYmxlID09IE5VTEwgfHwgc2Nhbi0+eHNfd2FudF9pdHVwKTsK IAorCS8qIEhhbmRsZSByZXNldHRpbmcgdGhlIHJlYWQgc3RyZWFtIHdoZW4gc2NhbiBkaXJlY3Rp b24gY2hhbmdlcyAqLworCWlmIChoc2Nhbi0+eHNfcmVhZF9zdHJlYW1fZGlyID09IE5vTW92ZW1l bnRTY2FuRGlyZWN0aW9uKQorCQloc2Nhbi0+eHNfcmVhZF9zdHJlYW1fZGlyID0gZGlyZWN0aW9u OwkvKiBmaXJzdCBjYWxsICovCisJZWxzZSBpZiAodW5saWtlbHkoaHNjYW4tPnhzX3JlYWRfc3Ry ZWFtX2RpciAhPSBkaXJlY3Rpb24pKQorCQloZWFwYW1faW5kZXhfZGlyY2hhbmdlX3Jlc2V0KGhz Y2FuLCBkaXJlY3Rpb24sIGJhdGNocmluZ2J1Zik7CisKIAkvKgogCSAqIENoZWNrIGlmIHRoZXJl J3MgYW4gZXhpc3RpbmcgbG9hZGVkIHNjYW5CYXRjaCBmb3IgdXMgdG8gcmV0dXJuIHRoZSBuZXh0 CiAJICogbWF0Y2hpbmcgaXRlbSdzIFRJRC9pbmRleCB0dXBsZSBmcm9tCkBAIC01OTgsNyArNzA1 LDcgQEAgaGVhcGFtX2luZGV4X2dldG5leHRfc2NhbmJhdGNoX3BvcyhJbmRleFNjYW5EZXNjIHNj YW4sIEluZGV4RmV0Y2hIZWFwRGF0YSAqaHNjYW4KIAl7CiAJCS8qCiAJCSAqIHNjYW5Qb3MgaXMg dmFsaWQsIHNvIHNjYW5CYXRjaCBtdXN0IGFscmVhZHkgYmUgbG9hZGVkIGluIGJhdGNoIHJpbmcK LQkJICogYnVmZmVyLiAgV2UgcmVseSBvbiB0aGF0IGhlcmUuCisJCSAqIGJ1ZmZlci4gIFdlIHJl bHkgb24gdGhhdCBoZXJlIChjYW4ndCBkbyB0aGlzIHdpdGggcHJlZmV0Y2hCYXRjaCkuCiAJCSAq LwogCQlwZ19hc3N1bWUoYmF0Y2hyaW5nYnVmLT5oZWFkQmF0Y2ggPT0gc2NhblBvcy0+YmF0Y2gp OwogCkBAIC02MjksNiArNzM2LDE3IEBAIGhlYXBhbV9pbmRleF9nZXRuZXh0X3NjYW5iYXRjaF9w b3MoSW5kZXhTY2FuRGVzYyBzY2FuLCBJbmRleEZldGNoSGVhcERhdGEgKmhzY2FuCiAJCXJldHVy biBOVUxMOwogCX0KIAorCWlmIChoYWRFeGlzdGluZ1NjYW5CYXRjaCAmJiAhaHNjYW4tPnhzX3Jl YWRfc3RyZWFtKQorCXsKKwkJQXNzZXJ0KCFzY2FuLT5iYXRjaHJpbmdidWYucHJlZmV0Y2hQb3Mu dmFsaWQpOworCisJCS8qCisJCSAqIE5vdCB1c2luZyBhIHJlYWQgc3RyZWFtIHRvIGRvIGluZGV4 IHByZWZldGNoaW5nLiAgRGVjaWRlIHdoZXRoZXIgdG8KKwkJICogc3RhcnQgb25lIG5vdy4KKwkJ ICovCisJCWhlYXBhbV9pbmRleF9jb25zaWRlcl9wcmVmZXRjaGluZyhzY2FuLCBoc2Nhbik7CisJ fQorCiAJLyoKIAkgKiBBZHZhbmNlZCBzY2FuQmF0Y2guICBOb3cgcG9zaXRpb24gc2NhblBvcyB0 byB0aGUgc3RhcnQgb2YgbmV3CiAJICogc2NhbkJhdGNoLgpAQCAtNjQ0LDYgKzc2Miw3IEBAIGhl YXBhbV9pbmRleF9nZXRuZXh0X3NjYW5iYXRjaF9wb3MoSW5kZXhTY2FuRGVzYyBzY2FuLCBJbmRl eEZldGNoSGVhcERhdGEgKmhzY2FuCiAJewogCQlJbmRleFNjYW5CYXRjaCBoZWFkQmF0Y2ggPSBp bmRleF9zY2FuX2JhdGNoKHNjYW4sCiAJCQkJCQkJCQkJCQkJYmF0Y2hyaW5nYnVmLT5oZWFkQmF0 Y2gpOworCQlCYXRjaFJpbmdJdGVtUG9zICpwcmVmZXRjaFBvcyA9ICZiYXRjaHJpbmdidWYtPnBy ZWZldGNoUG9zOwogCiAJCUFzc2VydChoZWFkQmF0Y2ggIT0gc2NhbkJhdGNoKTsKIAkJQXNzZXJ0 KGJhdGNocmluZ2J1Zi0+aGVhZEJhdGNoICE9IHNjYW5Qb3MtPmJhdGNoKTsKQEAgLTY1MSwxMiAr NzcwLDQ3IEBAIGhlYXBhbV9pbmRleF9nZXRuZXh0X3NjYW5iYXRjaF9wb3MoSW5kZXhTY2FuRGVz YyBzY2FuLCBJbmRleEZldGNoSGVhcERhdGEgKmhzY2FuCiAJCS8qIGZyZWUgb2Jzb2xlc2NlbnQg aGVhZCBiYXRjaCAodW5sZXNzIGl0IGlzIHNjYW4ncyBtYXJrQmF0Y2gpICovCiAJCXRhYmxlYW1f dXRpbF9mcmVlX2JhdGNoKHNjYW4sIGhlYWRCYXRjaCk7CiAKKwkJLyoKKwkJICogSWYgd2UncmUg YWJvdXQgdG8gcmVsZWFzZSB0aGUgYmF0Y2ggdGhhdCBwcmVmZXRjaFBvcyBjdXJyZW50bHkKKwkJ ICogcG9pbnRzIHRvLCBqdXN0IGludmFsaWRhdGUgcHJlZmV0Y2hQb3MuICBTZWUgdGhlIGNvbW1l bnRzIGFib3V0CisJCSAqIHByZWZldGNoUG9zL3NjYW5Qb3Mgd2l0aGluIGhlYXBhbV9pbmRleF9w cmVmZXRjaF9uZXh0X2Jsb2NrIGZvciBhbgorCQkgKiBleHBsYW5hdGlvbi4KKwkJICoKKwkJICog VGhpcyBoYW5kbGluZyBpcyBhcHByb3hpbWF0ZWx5IHRoZSBvcHBvc2l0ZSBvZiByZXN1bWluZyBh IHBhdXNlZAorCQkgKiByZWFkIHN0cmVhbTogdGhpcyBoZWxwcyB0aGUgc2NhbiBkZWFsIHdpdGgg cHJlZmV0Y2hQb3MgZmFsbGluZworCQkgKiBiZWhpbmQgc2NhblBvcywgd2hlcmVhcyBwYXVzaW5n IGlzIHVzZWQgd2hlbiBzY2FuUG9zIGhhcyBmYWxsZW4KKwkJICogYmVoaW5kICh2ZXJ5IGZhciBi ZWhpbmQpIHByZWZldGNoUG9zLgorCQkgKi8KKwkJaWYgKHByZWZldGNoUG9zLT52YWxpZCAmJgor CQkJcHJlZmV0Y2hQb3MtPmJhdGNoID09IGJhdGNocmluZ2J1Zi0+aGVhZEJhdGNoKQorCQkJcHJl ZmV0Y2hQb3MtPnZhbGlkID0gZmFsc2U7CisKIAkJLyogUmVtb3ZlIHRoZSBiYXRjaCBmcm9tIHRo ZSByaW5nIGJ1ZmZlciAoZXZlbiBpZiBpdCdzIG1hcmtCYXRjaCkgKi8KIAkJYmF0Y2hyaW5nYnVm LT5oZWFkQmF0Y2grKzsKKworCQlpZiAodW5saWtlbHkoaHNjYW4tPnhzX3BhdXNlZCkpCisJCXsK KwkJCS8qCisJCQkgKiBoZWFwYW1faW5kZXhfcHJlZmV0Y2hfbmV4dF9ibG9jayBwYXVzZWQgdGhl IHNjYW4ncyByZWFkIHN0cmVhbQorCQkJICogZHVlIHRvIG91ciBydW5uaW5nIG91dCBvZiBmcmVl IGJhdGNoIHNsb3RzLiAgTm93IHRoYXQgd2UndmUKKwkJCSAqIGZyZWVkIHVwIG9uZSBzdWNoIHNs b3QsIHdlIGNhbiByZXN1bWUgdGhlIHJlYWQgc3RyZWFtIChzaW5jZQorCQkJICogdGhlcmUncyBu b3cgc3BhY2UgZm9yIGhlYXBhbV9pbmRleF9wcmVmZXRjaF9uZXh0X2Jsb2NrIHRvIHN0b3JlCisJ CQkgKiBvbmUgbW9yZSBiYXRjaCkuCisJCQkgKi8KKwkJCUFzc2VydChwcmVmZXRjaFBvcy0+YmF0 Y2ggIT0gc2NhblBvcy0+YmF0Y2gpOworCQkJQXNzZXJ0KHByZWZldGNoUG9zLT52YWxpZCAmJgor CQkJCSAgIGluZGV4X3NjYW5fYmF0Y2hfbG9hZGVkKHNjYW4sIHByZWZldGNoUG9zLT5iYXRjaCkp OworCQkJQXNzZXJ0KGluZGV4X3NjYW5fcG9zX2NtcChwcmVmZXRjaFBvcywgc2NhblBvcywgZGly ZWN0aW9uKSA+IDApOworCQkJQXNzZXJ0KCFpbmRleF9zY2FuX2JhdGNoX2Z1bGwoc2NhbikpOwor CisJCQlyZWFkX3N0cmVhbV9yZXN1bWUoaHNjYW4tPnhzX3JlYWRfc3RyZWFtKTsKKwkJCWhzY2Fu LT54c19wYXVzZWQgPSBmYWxzZTsKKwkJfQogCX0KIAogCS8qIEluIHByYWN0aWNlIHNjYW5CYXRj aCB3aWxsIGFsd2F5cyBiZSB0aGUgcmluZyBidWZmZXIncyBoZWFkQmF0Y2ggKi8KIAlBc3NlcnQo YmF0Y2hyaW5nYnVmLT5oZWFkQmF0Y2ggPT0gc2NhblBvcy0+YmF0Y2gpOworCUFzc2VydCghaHNj YW4tPnhzX3BhdXNlZCk7CiAKIAlyZXR1cm4gaGVhcGFtX2luZGV4X3JldHVybl9zY2FucG9zX3Rp ZChzY2FuLCBoc2NhbiwgZGlyZWN0aW9uLAogCQkJCQkJCQkJCSAgIHNjYW5CYXRjaCwgc2NhblBv cywgYWxsX3Zpc2libGUpOwpAQCAtNzc0LDYgKzkyOCwxMyBAQCBoZWFwYW1faW5kZXhfcmV0dXJu X3NjYW5wb3NfdGlkKEluZGV4U2NhbkRlc2Mgc2NhbiwgSW5kZXhGZXRjaEhlYXBEYXRhICpoc2Nh biwKICAqIChpbXBvcnRhbnQgZm9yIGlubmVyIGluZGV4IHNjYW5zIG9mIGFudGktam9pbnMgYW5k IHNlbWktam9pbnMpLCBhbmQgdGhlCiAgKiBuZWVkIHRvIHVuZ3VhcmQgYmF0Y2hlcyBwcm9tcHRs eS4KICAqCisgKiBJbiBubyBldmVudCB3aWxsIHRoZSBzY2FuIGJlIGFsbG93ZWQgdG8gZ3VhcmQg bW9yZSB0aGFuIG9uZSBiYXRjaCBhdCBhCisgKiB0aW1lLiAgVGhlIHByaW1hcnkgcmVhc29uIGZv ciB0aGlzIHJlc3RyaWN0aW9uIGlzIHRvIGF2b2lkIHVuaW50ZW5kZWQKKyAqIGludGVyYWN0aW9u cyB3aXRoIHRoZSByZWFkIHN0cmVhbSwgd2hpY2ggaGFzIGl0cyBvd24gc3RyYXRlZ3kgZm9yIGtl ZXBpbmcKKyAqIHRoZSBudW1iZXIgb2YgcGlucyBoZWxkIGJ5IHRoZSBiYWNrZW5kIHVuZGVyIGNv bnRyb2wuICAoVW5ndWFyZGluZyB2aWEKKyAqIHRoZSBhbXVuZ3VhcmRiYXRjaCBjYWxsYmFjayBv ZnRlbiBtZWFucyByZWxlYXNpbmcgYSBidWZmZXIgcGluIG9uIGFuCisgKiBpbmRleCBwYWdlLCB3 aGljaCBjb3VudHMgYWdhaW5zdCB0aGUgc2FtZSBzaGFyZWQgcGluIGxpbWl0LikKKyAqCiAgKiBP bmNlIHdlJ3ZlIHJlc29sdmVkIHZpc2liaWxpdHkgZm9yIGFsbCBpdGVtcyBpbiBhIGJhdGNoLCB3 ZSBjYW4gc2FmZWx5CiAgKiB1bmd1YXJkIGl0IGJ5IGNhbGxpbmcgYW11bmd1YXJkYmF0Y2guICBU aGlzIGlzIHNhZmUgd2l0aCByZXNwZWN0IHRvCiAgKiBjb25jdXJyZW50IFZBQ1VVTSBiZWNhdXNl IHRoZSBiYXRjaCdzIGd1YXJkICh0eXBpY2FsbHkgYSBidWZmZXIgcGluIG9uIHRoZQpAQCAtOTEx LDYgKzEwNzIsMzAwIEBAIGhlYXBhbV9pbmRleF9iYXRjaF9wb3NfdmlzaWJpbGl0eShJbmRleFNj YW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyZWN0aW9uLAogCQloc2Nhbi0+eHNfdm1faXRl bXMgPSBzY2FuLT5tYXhpdGVtc2JhdGNoOwogfQogCisvKgorICogUmV0dXJuIHRoZSBuZXh0IGJs b2NrIHRvIHRoZSByZWFkIHN0cmVhbSB3aGVuIHBlcmZvcm1pbmcgaW5kZXggcHJlZmV0Y2hpbmcu CisgKgorICogVGhlIGluaXRpYWwgYmF0Y2ggaXMgYWx3YXlzIGxvYWRlZCBieSBoZWFwYW1faW5k ZXhfZ2V0bmV4dF9zY2FuYmF0Y2hfcG9zLgorICogV2UgZG9uJ3QgZ2V0IGNhbGxlZCB1bnRpbCB0 aGUgZmlyc3QgcmVhZF9zdHJlYW1fbmV4dF9idWZmZXIgY2FsbCwgd2hlbiBhCisgKiBoZWFwIGJs b2NrIGlzIHJlcXVlc3RlZCBmcm9tIHRoZSBzY2FuJ3Mgc3RyZWFtIGZvciB0aGUgZmlyc3QgdGlt ZS4KKyAqCisgKiBUaGUgcG9zaXRpb24gb2YgdGhlIHJlYWRfc3RyZWFtIGlzIHN0b3JlZCBpbiBw cmVmZXRjaFBvcy4gIEl0IGlzIHR5cGljYWwKKyAqIGZvciBwcmVmZXRjaFBvcyB0byBjb25zaXN0 ZW50bHkgc3RheSBhaGVhZCBvZiB0aGUgc2NhblBvcyBwb3NpdGlvbiB0aGF0J3MKKyAqIHVzZWQg dG8gdHJhY2sgdGhlIG5leHQgVElEIGhlYXBhbV9pbmRleF9nZXRuZXh0X3NjYW5iYXRjaF9wb3Mg d2lsbCByZXR1cm4KKyAqIHRvIHRoZSBzY2FuIChhZnRlciB0aGUgZmlyc3QgdGltZSB3ZSBnZXQg Y2FsbGVkKS4gIEhvd2V2ZXIsIHRoYXQgaXNuJ3QgYQorICogc3RyaWN0IHByZWNvbmRpdGlvbiAo dGhvdWdoIGFzIGV4cGxhaW5lZCBiZWxvdyB3ZSBpbXBsZW1lbnQgYSBzY2hlbWUKKyAqIGVzc2Vu dGlhbGx5IGVxdWl2YWxlbnQgdG8gbWFraW5nIGl0IGEgc3RyaWN0IHByZWNvbmRpdGlvbikuICBU aGVyZSBpcyBhCisgKiB0cnVlIHN0cmljdCBwb3N0Y29uZGl0aW9uLCB0aG91Z2g6IHdoZW4gd2Ug cmV0dXJuIHdlJ2xsIGFsd2F5cyBsZWF2ZQorICogc2NhblBvcyA8PSBwcmVmZXRjaFBvcy4KKyAq Lworc3RhdGljIEJsb2NrTnVtYmVyCitoZWFwYW1faW5kZXhfcHJlZmV0Y2hfbmV4dF9ibG9jayhS ZWFkU3RyZWFtICpzdHJlYW0sCisJCQkJCQkJCSB2b2lkICpjYWxsYmFja19wcml2YXRlX2RhdGEs CisJCQkJCQkJCSB2b2lkICpwZXJfYnVmZmVyX2RhdGEpCit7CisJSW5kZXhTY2FuRGVzYyBzY2Fu ID0gKEluZGV4U2NhbkRlc2MpIGNhbGxiYWNrX3ByaXZhdGVfZGF0YTsKKwlJbmRleEZldGNoSGVh cERhdGEgKmhzY2FuID0gKEluZGV4RmV0Y2hIZWFwRGF0YSAqKSBzY2FuLT54c19oZWFwZmV0Y2g7 CisJQmF0Y2hSaW5nQnVmZmVyICpiYXRjaHJpbmdidWYgPSAmc2Nhbi0+YmF0Y2hyaW5nYnVmOwor CUJhdGNoUmluZ0l0ZW1Qb3MgKnNjYW5Qb3MgPSAmYmF0Y2hyaW5nYnVmLT5zY2FuUG9zOworCUJh dGNoUmluZ0l0ZW1Qb3MgKnByZWZldGNoUG9zID0gJmJhdGNocmluZ2J1Zi0+cHJlZmV0Y2hQb3M7 CisJU2NhbkRpcmVjdGlvbiB4c19yZWFkX3N0cmVhbV9kaXIgPSBoc2Nhbi0+eHNfcmVhZF9zdHJl YW1fZGlyOworCUluZGV4U2NhbkJhdGNoIHByZWZldGNoQmF0Y2g7CisJYm9vbAkJZnJvbVNjYW5Q b3MgPSBmYWxzZTsKKworCS8qCisJICogc2NhblBvcyBtdXN0IGFsd2F5cyBiZSB2YWxpZCB3aGVu IHByZWZldGNoaW5nIHRha2VzIHBsYWNlLiAgVGhlcmUgaGFzCisJICogdG8gYmUgYXQgbGVhc3Qg b25lIGJhdGNoLCBsb2FkZWQgYXMgb3VyIHNjYW5CYXRjaC4gIFRoZSBzY2FuIGRpcmVjdGlvbgor CSAqIG11c3QgYmUgZXN0YWJsaXNoZWQsIHRvby4KKwkgKi8KKwlBc3NlcnQoaW5kZXhfc2Nhbl9i YXRjaF9jb3VudChzY2FuKSA+IDApOworCUFzc2VydChzY2FuUG9zLT52YWxpZCAmJiBpbmRleF9z Y2FuX2JhdGNoX2xvYWRlZChzY2FuLCBzY2FuUG9zLT5iYXRjaCkpOworCUFzc2VydChzY2FuLT5N VkNDU2Nhbik7CisJQXNzZXJ0KCFoc2Nhbi0+eHNfcGF1c2VkKTsKKwlBc3NlcnQoeHNfcmVhZF9z dHJlYW1fZGlyICE9IE5vTW92ZW1lbnRTY2FuRGlyZWN0aW9uKTsKKworCS8qCisJICogSGFuZGxl IGluaXRpYWxpemF0aW9uIG9uIHRoZSBmaXJzdCBjYWxsIGhlcmUsIHdoZW4gcHJlZmV0Y2hQb3Mg aXNuJ3QKKwkgKiB5ZXQgdmFsaWQgKGFsc28gaGFuZGxlcyB0aGUgcHJlZmV0Y2hQb3MgPCBzY2Fu UG9zIGVkZ2UgY2FzZSkuCisJICoKKwkgKiBJZiBwcmVmZXRjaFBvcyBoYXMgbm90IGJlZW4gaW5p dGlhbGl6ZWQgeWV0LCB0aGF0IHR5cGljYWxseSBpbmRpY2F0ZXMKKwkgKiB0aGF0IHRoaXMgaXMg dGhlIGZpcnN0IGNhbGwgaGVyZSBmb3IgdGhlIGVudGlyZSBzY2FuLiAgV2UgaW5pdGlhbGl6ZQor CSAqIHByZWZldGNoUG9zIHVzaW5nIHRoZSBjdXJyZW50IHNjYW5Qb3MsIHNpbmNlIHRoZSBjdXJy ZW50IHNjYW5CYXRjaAorCSAqIGl0ZW0ncyBUSUQgc2hvdWxkIGhhdmUgaXRzIGJsb2NrIG51bWJl ciByZXR1cm5lZCBieSB0aGUgcmVhZCBzdHJlYW0KKwkgKiBmaXJzdC4gIFdoZW4gdGhpcyBoYXBw ZW5zLCBpdCdzIGxpa2VseSB0aGF0IHByZWZldGNoUG9zIHdpbGwgZ2V0IGFoZWFkCisJICogb2Yg c2NhblBvcyB2ZXJ5IHNvb24sIGFmdGVyIHRoZSBfbmV4dF8gY2FsbCBoZXJlIHJldHVybnMuCisJ ICoKKwkgKiBUaGVyZSdzIGFsc28gYW4gZWRnZSBjYXNlIHRoYXQgd2UgaGFuZGxlIHVzaW5nIGV4 YWN0bHkgdGhlIHNhbWUgc3RlcHMuCisJICogSXQncyBwb3NzaWJsZSBmb3IgcHJlZmV0Y2hQb3Mg dG8gImZhbGwgYmVoaW5kIiBzY2FuUG9zLCBhdCBsZWFzdCBpbiBhCisJICogdHJpdmlhbCBzZW5z ZTogaWYgbWFueSBhZGphY2VudCBtYXRjaGluZyBpdGVtcyBjb250YWluIFRJRHMgdGhhdCBhbGwK KwkgKiBwb2ludCB0byB0aGUgc2FtZSBoZWFwIGJsb2NrLCBzY2FuUG9zIGNhbiBhY3R1YWxseSBv dmVydGFrZSBwcmVmZXRjaFBvcworCSAqIChwcmVmZXRjaFBvcyBjYW4ndCBhZHZhbmNlIHVudGls IHdlJ3JlIGFjdHVhbGx5IGNhbGxlZCkuICBBIHNpbWlsYXIKKwkgKiBpc3N1ZSBhcmlzZXMgZHVy aW5nIGluZGV4LW9ubHkgc2NhbnMgdGhhdCByZXF1aXJlIG9ubHkgYSBmZXcgaGVhcAorCSAqIGZl dGNoZXM6IHdlJ2xsIHRlbmQgdG8gYmUgY2FsbGVkIGZhciBsZXNzIG9mdGVuIHRoYW4gd2UnZCBi ZSBjYWxsZWQKKwkgKiBkdXJpbmcgYW4gZXF1aXZhbGVudCBwbGFpbiBpbmRleCBzY2FuIGR1ZSB0 byBhbGwtdmlzaWJsZSBpdGVtcy4gIEFuCisJICogYWxsLXZpc2libGUgaXRlbSB3aWxsIGFkdmFu Y2Ugc2NhblBvcywgYnV0IGNhbid0IHRyaWdnZXIgYSBjYWxsIHRvIGhlcmUKKwkgKiAoanVzdCBs aWtlIGFuIGl0ZW0gdGhhdCBwb2ludHMgdG8gdGhlIHNhbWUgaGVhcCBibG9jayB0aGF0IHRoZSBw cmV2aW91cworCSAqIGl0ZW0gYWxzbyBwb2ludGVkIHRvKS4KKwkgKgorCSAqIFRoaXMgc2NoZW1l IHByb2R1Y2VzIGV4YWN0bHkgdGhlIHNhbWUgYmxvY2sgcHJlZmV0Y2ggcmVxdWVzdHMgYXMgYQor CSAqIHNjaGVtZSB0aGF0IHJlcXVpcmVzIGhlYXBhbV9pbmRleF9nZXRuZXh0X3NjYW5iYXRjaF9w b3MgdG8gYWN0aXZlbHkKKwkgKiBlbnN1cmUgdGhhdCAicHJlZmV0Y2hQb3MgPCBzY2FuUG9zIiBj YW4gbmV2ZXIgaGFwcGVuLiAgVGhhdCBpc24ndCBhCisJICogc3RyaWN0IHByZWNvbmRpdGlvbiBm b3IgdGhpcyBmdW5jdGlvbiBiZWNhdXNlIG1ha2luZyBpdCBleHBsaWNpdCB3b3VsZAorCSAqIGlt cG9zZSBhIHBlcmZvcm1hbmNlIHBlbmFsdHkgb24gaGVhcGFtX2luZGV4X2dldG5leHRfc2NhbmJh dGNoX3Bvcy4KKwkgKgorCSAqIE5vdGU6IHdoZW4gaGVhcGFtX2luZGV4X2dldG5leHRfc2NhbmJh dGNoX3BvcyBmcmVlcyBhIGJhdGNoIHRoYXQKKwkgKiBwcmVmZXRjaFBvcyBwb2ludHMgdG8sIGl0 J2xsIGF0IGxlYXN0IGludmFsaWRhdGUgcHJlZmV0Y2hQb3MgZm9yIHVzLgorCSAqIFRoaXMgcmVt b3ZlcyBhbnkgZGFuZ2VyIG9mIHByZWZldGNoUG9zLmJhdGNoIGZhbGxpbmcgc28gZmFyIGJlaGlu ZAorCSAqIHNjYW5Qb3MuYmF0Y2ggdGhhdCBpdCB3cmFwcyBhcm91bmQgKGFuZCBhcHBlYXJzIHRv IGJlIGFoZWFkIG9mIHNjYW5Qb3MKKwkgKiBpbnN0ZWFkIG9mIGJlaGluZCBpdCkuICBJbiBvdGhl ciB3b3JkcywgaW4gYSBjZXJ0YWluIHNlbnNlIHdlIGFjdHVhbGx5CisJICogX2Nhbl8gdHJ1c3Qg aGVhcGFtX2luZGV4X2dldG5leHRfc2NhbmJhdGNoX3BvcyB0byBub3QgbGV0IHByZWZldGNoUG9z CisJICogZmFsbCBiZWhpbmQgc2NhblBvczogaXQgY2FuJ3QgaGFwcGVuIGF0IHRoZSBiYXRjaCBn cmFudWxhcml0eSAob25seSBhdAorCSAqIHRoZSBpdGVtL3R1cGxlIGdyYW51bGFyaXR5LCB3aGlj aCB3ZSBjYW4gYWx3YXlzIGNvcGUgd2l0aCBoZXJlKS4KKwkgKi8KKwlpZiAoIXByZWZldGNoUG9z LT52YWxpZCB8fAorCQlpbmRleF9zY2FuX3Bvc19jbXAocHJlZmV0Y2hQb3MsIHNjYW5Qb3MsIHhz X3JlYWRfc3RyZWFtX2RpcikgPCAwKQorCXsKKwkJaHNjYW4tPnhzX3ByZWZldGNoX2Jsb2NrID0g SW52YWxpZEJsb2NrTnVtYmVyOworCQkqcHJlZmV0Y2hQb3MgPSAqc2NhblBvczsKKwkJZnJvbVNj YW5Qb3MgPSB0cnVlOworCisJCS8qCisJCSAqIFdlIG11c3QgYXZvaWQga2VlcGluZyBhbnkgYmF0 Y2ggZ3VhcmRlZCBmb3IgbW9yZSB0aGFuIGFuIGluc3RhbnQsCisJCSAqIHRvIGF2b2lkIHVuZGVz aXJhYmxlIGludGVyYWN0aW9ucyB3aXRoIHRoZSBzY2FuJ3MgcmVhZCBzdHJlYW0uIFNlZQorCQkg KiBjb21tZW50IGFuZCBhc3NlcnRpb24gYXQgdGhlIHRvcCBvZiB0aGUgbG9vcCBiZWxvdy4KKwkJ ICovCisJCWlmIChzY2FuLT54c193YW50X2l0dXApCisJCXsKKwkJCS8qCisJCQkgKiBNYWtlIGhl YXBhbV9pbmRleF9iYXRjaF9wb3NfdmlzaWJpbGl0eSByZWxlYXNlIHJlc291cmNlcworCQkJICog ZWFnZXJseQorCQkJICovCisJCQloc2Nhbi0+eHNfdm1faXRlbXMgPSBzY2FuLT5tYXhpdGVtc2Jh dGNoOworCisJCQkvKiBNYWtlIHN1cmUgdGhhdCB0aGlzIG5ldyBwcmVmZXRjaEJhdGNoIGlzIHVu Z3VhcmRlZCAqLworCQkJcHJlZmV0Y2hCYXRjaCA9IGluZGV4X3NjYW5fYmF0Y2goc2NhbiwgcHJl ZmV0Y2hQb3MtPmJhdGNoKTsKKwkJCWlmIChwcmVmZXRjaEJhdGNoLT5pc0d1YXJkZWQpCisJCQl7 CisJCQkJSGVhcEJhdGNoRGF0YSAqaGJhdGNoID0gaGVhcGFtX2luZGV4X2JhdGNoX2RhdGEoc2Nh biwKKwkJCQkJCQkJCQkJCQkJCQlwcmVmZXRjaEJhdGNoKTsKKworCQkJCS8qIFNldCB2aXNpYmls aXR5IGluZm8gbm90IHNldCB0aHJvdWdoIHNjYW5CYXRjaCAqLworCQkJCWhlYXBhbV9pbmRleF9i YXRjaF9wb3NfdmlzaWJpbGl0eShzY2FuLCB4c19yZWFkX3N0cmVhbV9kaXIsCisJCQkJCQkJCQkJ CQkgIHByZWZldGNoQmF0Y2gsIGhiYXRjaCwKKwkJCQkJCQkJCQkJCSAgcHJlZmV0Y2hQb3MpOwor CQkJfQorCQl9CisJfQorCisJcHJlZmV0Y2hCYXRjaCA9IGluZGV4X3NjYW5fYmF0Y2goc2Nhbiwg cHJlZmV0Y2hQb3MtPmJhdGNoKTsKKworCS8qCisJICogSWYgcHJlZmV0Y2hQb3Mgd2Fzbid0IGp1 c3QgaW5pdGlhbGl6ZWQgdXNpbmcgc2NhblBvcywgd2UncmUgZGlyZWN0bHkKKwkgKiBwaWNraW5n IHVwIHByZWZldGNoaW5nIHdoZXJlIHRoZSBsYXN0IGNhbGwgaGVyZSBsZWZ0IG9mZi4gIEFzc2Vy dCB0aGF0CisJICogeHNfcHJlZmV0Y2hfYmxvY2sgbWF0Y2hlcyB0aGUgbGFzdCBpdGVtIHdlIHJl dHVybmVkIGFzIGV4cGVjdGVkLgorCSAqCisJICogTm90ZTogd2UgZG9uJ3QgYWN0dWFsbHkgbmVl ZCBhIHhzX3ByZWZldGNoX2Jsb2NrIGZpZWxkIGF0IGFsbDsgd2UgY291bGQKKwkgKiBqdXN0IHRh a2UgdGhlIGxhc3QgYmxvY2sgd2UgcmV0dXJuZWQgZnJvbSBwcmVmZXRjaFBvcyBkaXJlY3RseSBp bnN0ZWFkLgorCSAqIEJ1dCBtYWludGFpbmluZyB4c19wcmVmZXRjaF9ibG9jayBleHBsaWNpdGx5 IGlzIHNsaWdodGx5IG1vcmUgcm9idXN0LgorCSAqIEl0IGdpdmVzIHVzIGEgd2F5IHRvIG1ha2Ug c3VyZSB0aGF0IHRoZSBsYXN0IGNhbGwgaGVyZSBsZWZ0IHByZWZldGNoUG9zCisJICogaW4gYSBj b25zaXN0ZW50IHN0YXRlIChlLmcuLCB3aGVuIHRoZSByZWFkIHN0cmVhbSBoYWQgdG8gYmUgcGF1 c2VkKS4KKwkgKi8KKyNpZmRlZiBVU0VfQVNTRVJUX0NIRUNLSU5HCisJaWYgKCFmcm9tU2NhblBv cykKKwl7CisJCUJhdGNoTWF0Y2hpbmdJdGVtICpsYXN0aXRlbSA9ICZwcmVmZXRjaEJhdGNoLT5p dGVtc1twcmVmZXRjaFBvcy0+aXRlbV07CisJCUJsb2NrTnVtYmVyIGxhc3RfYmxvY2sgPSBJdGVt UG9pbnRlckdldEJsb2NrTnVtYmVyKCZsYXN0aXRlbS0+dGFibGVUaWQpOworCisJCUFzc2VydChs YXN0X2Jsb2NrID09IGhzY2FuLT54c19wcmVmZXRjaF9ibG9jayk7CisJfQorI2VuZGlmCisKKwlm b3IgKDs7KQorCXsKKwkJQmF0Y2hNYXRjaGluZ0l0ZW0gKml0ZW07CisJCUJsb2NrTnVtYmVyIHBy ZWZldGNoX2Jsb2NrOworCisJCS8qCisJCSAqIFdlIG5ldmVyIGNhbGwgYW1nZXRiYXRjaCB3aXRo b3V0IGltbWVkaWF0ZWx5IHVuZ3VhcmRpbmcgdGhlIGJhdGNoLAorCQkgKiBlaXRoZXIgd2l0aGlu IHRoZSBpbmRleCBBTSBvciBoZXJlICh3aGVuIHdlIGVhZ2VybHkgbG9hZCBhbGwgb2YgdGhlCisJ CSAqIGJhdGNoJ3MgdmlzaWJpbGl0eSBpbmZvcm1hdGlvbiBkdXJpbmcgYW4gaW5kZXgtb25seSBz Y2FuKS4gIFRoZQorCQkgKiBpbmRleCBBTSB3b24ndCBob2xkIG9udG8gVElEIGludGVybG9jayBi dWZmZXIgcGlucywga2VlcGluZyB0aGUKKwkJICogYWJzb2x1dGUgbnVtYmVyIG9mIHBpbnMgaGVs ZCB0byBhIG1pbmltdW0uCisJCSAqCisJCSAqIFRoaXMgaXMgZGVmZW5zaXZlLiAgVGhlIHJlYWQg c3RyZWFtIHRyaWVzIHRvIGJlIGNhcmVmdWwgYWJvdXQgbm90CisJCSAqIHBpbm5pbmcgdG9vIG1h bnkgYnVmZmVycywgYW5kIHRoYXQncyBoYXJkZXIgdG8gZG8gcmVsaWFibHkgaWYgdGhlcmUKKwkJ ICogYXJlIHZhcmlhYmxlIG51bWJlcnMgb2YgcGlucyB0YWtlbiB3aXRob3V0IHN1Y2ggY2FyZS4K KwkJICovCisJCUFzc2VydCghcHJlZmV0Y2hCYXRjaC0+aXNHdWFyZGVkKTsKKwkJaWYgKGZyb21T Y2FuUG9zKQorCQl7CisJCQkvKgorCQkJICogRG9uJ3QgaW5jcmVtZW50IGl0ZW0gd2hlbiBwcmVm ZXRjaFBvcyB3YXMganVzdCBpbml0aWFsaXplZAorCQkJICogdXNpbmcgc2NhblBvcy4gIFdlJ2xs IHJldHVybiB0aGUgc2NhblBvcyBpdGVtJ3MgaGVhcCBibG9jaworCQkJICogZGlyZWN0bHkgb24g dGhlIGZpcnN0IGNhbGwgaGVyZS4gIEluIG90aGVyIHdvcmRzLCB3ZSdsbCByZXR1cm4KKwkJCSAq IHRoZSBoZWFwIGJsb2NrIGZyb20gVElEIHBhc3NlZCB0byBoZWFwYW1faW5kZXhfZmV0Y2hfdHVw bGUgYXQKKwkJCSAqIHRoZSBwb2ludCB3aGVyZSBpdCBjYWxsZWQgcmVhZF9zdHJlYW1fbmV4dF9i dWZmZXIgZm9yIHRoZSBmaXJzdAorCQkJICogdGltZSBkdXJpbmcgdGhlIHNjYW4uIChBcyBleHBs YWluZWQgYWJvdmUsIHdlIGFsc28gZW5kIHVwIGhlcmUKKwkJCSAqIGR1cmluZyB0aGUgZmlyc3Qg Y2FsbCB0byByZWFkX3N0cmVhbV9uZXh0X2J1ZmZlciBmb2xsb3dpbmcKKwkJCSAqIHByZWZldGNo UG9zIGZhbGxpbmcgYmVoaW5kIHNjYW5Qb3MvYmVpbmcgaW52YWxpZGF0ZWQgZm9yIHVzLikKKwkJ CSAqLworCQkJZnJvbVNjYW5Qb3MgPSBmYWxzZTsKKwkJfQorCQllbHNlIGlmICghaW5kZXhfc2Nh bl9wb3NfYWR2YW5jZSh4c19yZWFkX3N0cmVhbV9kaXIsCisJCQkJCQkJCQkJIHByZWZldGNoQmF0 Y2gsIHByZWZldGNoUG9zKSkKKwkJeworCQkJLyoKKwkJCSAqIFJhbiBvdXQgb2YgaXRlbXMgZnJv bSBwcmVmZXRjaEJhdGNoLiAgVHJ5IHRvIGFkdmFuY2UgdG8gdGhlCisJCQkgKiBzY2FuJ3MgbmV4 dCBiYXRjaC4KKwkJCSAqLworCQkJaWYgKHVubGlrZWx5KGluZGV4X3NjYW5fYmF0Y2hfZnVsbChz Y2FuKSkpCisJCQl7CisJCQkJLyoKKwkJCQkgKiBDYW4ndCBhZHZhbmNlIHByZWZldGNoQmF0Y2gg YmVjYXVzZSBhbGwgYXZhaWxhYmxlCisJCQkJICogYmF0Y2hyaW5nYnVmIGJhdGNoIHNsb3RzIGFy ZSBjdXJyZW50bHkgaW4gdXNlLgorCQkJCSAqCisJCQkJICogRGVhbCB3aXRoIHRoaXMgYnkgbW9t ZW50YXJpbHkgcGF1c2luZyB0aGUgcmVhZCBzdHJlYW0uCisJCQkJICogaGVhcGFtX2luZGV4X2dl dG5leHRfc2NhbmJhdGNoX3BvcyB3aWxsIHJlc3VtZSB0aGUgcmVhZAorCQkJCSAqIHN0cmVhbSBs YXRlciwgdGhvdWdoIG9ubHkgYWZ0ZXIgc2NhblBvcyBoYXMgY29uc3VtZWQgYWxsCisJCQkJICog cmVtYWluaW5nIGl0ZW1zIGZyb20gc2NhbkJhdGNoIChhdCB3aGljaCBwb2ludCB0aGUgY3VycmVu dAorCQkJCSAqIGhlYWQgYmF0Y2ggd2lsbCBiZSBmcmVlZCwgbWFraW5nIGEgc2xvdCBhdmFpbGFi bGUgZm9yIHJldXNlCisJCQkJICogaGVyZSBieSB1cykuCisJCQkJICoKKwkJCQkgKiBJbiBwcmFj dGljZSB3ZSBoYXJkbHkgZXZlciBuZWVkIHRvIGRvIHRoaXMuICBJdCB3b3VsZCBiZQorCQkJCSAq IHBvc3NpYmxlIHRvIGF2b2lkIHRoZSBuZWVkIHRvIHBhdXNlIHRoZSByZWFkIHN0cmVhbSBieQor CQkJCSAqIGR5bmFtaWNhbGx5IGFsbG9jYXRpbmcgc2xvdHMsIGJ1dCB0aGF0IHdvdWxkIGFkZCBj b21wbGV4aXR5CisJCQkJICogZm9yIG5vIHJlYWwgYmVuZWZpdC4gIEl0IGFsc28gc2VlbXMgbGlr ZSBhIGdvb2QgaWRlYSB0bworCQkJCSAqIGltcG9zZSBzb21lIGhhcmQgbGltaXQgb24gdGhlIG51 bWJlciBvZiBiYXRjaGVzIHRoYXQKKwkJCQkgKiBwcmVmZXRjaFBvcyBjYW4gZ2V0IGFoZWFkIG9m IHNjYW5Qb3MgYnkgKGVzcGVjaWFsbHkgaW4gdGhlCisJCQkJICogY2FzZSBvZiBpbmRleC1vbmx5 IHNjYW5zLCB3aGVyZSB3ZSBvZnRlbiB3b24ndCBoYXZlIGFueQorCQkJCSAqIGhlYXAgYmxvY2sg dG8gcmV0dXJuIGZyb20gbW9zdCBvZiB0aGUgc2NhbidzIGJhdGNoZXMpLgorCQkJCSAqLworCQkJ CWhzY2FuLT54c19wYXVzZWQgPSB0cnVlOworCisJCQkJLyoKKwkJCQkgKiBCZWZvcmUgcmV0dXJu aW5nLCBhZHZhbmNlIHByZWZldGNoUG9zIGluIHRoZSBvcHBvc2l0ZQorCQkJCSAqIGRpcmVjdGlv biB0byB0aGUgb25lIHVzZWQgYnkgdGhlIHNjYW4uICBUaGlzIHVuZG9lcyB0aGUKKwkJCQkgKiBl ZmZlY3RzIG9mIHRoZSBtb3N0IHJlY2VudCBhZHZhbmNlLiAgV2UncmUgbm90IGdvaW5nIHRvCisJ CQkJICogcmV0dXJuIGFueSBibG9jaywgc28gaXQgc2VlbXMgbGlrZSBhIGdvb2QgaWRlYSB0byBs ZWF2ZQorCQkJCSAqIHByZWZldGNoUG9zIGluIGEgc3RhdGUgY29uc2lzdGVudCB3aXRoIHRoYXQu CisJCQkJICovCisJCQkJaWYgKFNjYW5EaXJlY3Rpb25Jc0ZvcndhcmQoeHNfcmVhZF9zdHJlYW1f ZGlyKSkKKwkJCQl7CisJCQkJCUFzc2VydChwcmVmZXRjaFBvcy0+aXRlbSA9PSBwcmVmZXRjaEJh dGNoLT5sYXN0SXRlbSArIDEpOworCQkJCQlwcmVmZXRjaFBvcy0+aXRlbSA9IHByZWZldGNoQmF0 Y2gtPmxhc3RJdGVtOworCQkJCX0KKwkJCQllbHNlCisJCQkJeworCQkJCQlBc3NlcnQocHJlZmV0 Y2hQb3MtPml0ZW0gPT0gcHJlZmV0Y2hCYXRjaC0+Zmlyc3RJdGVtIC0gMSk7CisJCQkJCXByZWZl dGNoUG9zLT5pdGVtID0gcHJlZmV0Y2hCYXRjaC0+Zmlyc3RJdGVtOworCQkJCX0KKworCQkJCXJl dHVybiByZWFkX3N0cmVhbV9wYXVzZShzdHJlYW0pOworCQkJfQorCisJCQlwcmVmZXRjaEJhdGNo ID0gdGFibGVhbV91dGlsX2ZldGNoX25leHRfYmF0Y2goc2NhbiwKKwkJCQkJCQkJCQkJCQkJICB4 c19yZWFkX3N0cmVhbV9kaXIsCisJCQkJCQkJCQkJCQkJCSAgcHJlZmV0Y2hCYXRjaCwKKwkJCQkJ CQkJCQkJCQkJICBwcmVmZXRjaFBvcyk7CisJCQlpZiAoIXByZWZldGNoQmF0Y2gpCisJCQl7CisJ CQkJLyoKKwkJCQkgKiBObyBtb3JlIGJhdGNoZXMgaW4gdGhpcyBkaXJlY3Rpb24sIHNvIGFsbCB0 aGUgYmF0Y2hlcyB0aGF0CisJCQkJICogdGhlIHNjYW4gd2lsbCBldmVyIHJlcXVpcmUgaGF2ZSBu b3cgYmVlbiByZXR1cm5lZAorCQkJCSAqLworCQkJCXJldHVybiBJbnZhbGlkQmxvY2tOdW1iZXI7 CisJCQl9CisKKwkJCS8qIFBvc2l0aW9uIHByZWZldGNoUG9zIHRvIHRoZSBzdGFydCBvZiBuZXcg cHJlZmV0Y2hCYXRjaCAqLworCQkJaW5kZXhfc2Nhbl9wb3NfbmV4dGJhdGNoKHhzX3JlYWRfc3Ry ZWFtX2RpciwKKwkJCQkJCQkJCSBwcmVmZXRjaEJhdGNoLCBwcmVmZXRjaFBvcyk7CisKKwkJCWlm IChzY2FuLT54c193YW50X2l0dXApCisJCQl7CisJCQkJSGVhcEJhdGNoRGF0YSAqaGJhdGNoID0g aGVhcGFtX2luZGV4X2JhdGNoX2RhdGEoc2NhbiwKKwkJCQkJCQkJCQkJCQkJCQlwcmVmZXRjaEJh dGNoKTsKKworCQkJCS8qIG1ha2Ugc3VyZSB3ZSBoYXZlIHZpc2liaWxpdHkgaW5mbyBmb3IgdGhl IGVudGlyZSBiYXRjaCAqLworCQkJCUFzc2VydChoc2Nhbi0+eHNfdm1faXRlbXMgPT0gc2Nhbi0+ bWF4aXRlbXNiYXRjaCk7CisJCQkJaGVhcGFtX2luZGV4X2JhdGNoX3Bvc192aXNpYmlsaXR5KHNj YW4sIHhzX3JlYWRfc3RyZWFtX2RpciwKKwkJCQkJCQkJCQkJCSAgcHJlZmV0Y2hCYXRjaCwgaGJh dGNoLAorCQkJCQkJCQkJCQkJICBwcmVmZXRjaFBvcyk7CisJCQl9CisJCX0KKworCQkvKgorCQkg KiBwcmVmZXRjaFBvcyBub3cgcG9pbnRzIHRvIHRoZSBuZXh0IGl0ZW0gd2hvc2UgVElEJ3MgaGVh cCBibG9jaworCQkgKiBudW1iZXIgbWlnaHQgbmVlZCB0byBiZSBwcmVmZXRjaGVkCisJCSAqLwor CQlBc3NlcnQoaW5kZXhfc2Nhbl9iYXRjaChzY2FuLCBwcmVmZXRjaFBvcy0+YmF0Y2gpID09IHBy ZWZldGNoQmF0Y2gpOworCQlBc3NlcnQocHJlZmV0Y2hQb3MtPml0ZW0gPj0gcHJlZmV0Y2hCYXRj aC0+Zmlyc3RJdGVtICYmCisJCQkgICBwcmVmZXRjaFBvcy0+aXRlbSA8PSBwcmVmZXRjaEJhdGNo LT5sYXN0SXRlbSk7CisJCS8qIHNjYW5Qb3MgaXMgYWx3YXlzIDw9IHByZWZldGNoUG9zIHdoZW4g d2UgcmV0dXJuICovCisJCUFzc2VydChpbmRleF9zY2FuX3Bvc19jbXAoc2NhblBvcywgcHJlZmV0 Y2hQb3MsIHhzX3JlYWRfc3RyZWFtX2RpcikgPD0gMCk7CisKKwkJaWYgKHNjYW4tPnhzX3dhbnRf aXR1cCkKKwkJeworCQkJSGVhcEJhdGNoRGF0YSAqaGJhdGNoID0gaGVhcGFtX2luZGV4X2JhdGNo X2RhdGEoc2NhbiwKKwkJCQkJCQkJCQkJCQkJCXByZWZldGNoQmF0Y2gpOworCisJCQlBc3NlcnQo aGJhdGNoLT52aXNJbmZvW3ByZWZldGNoUG9zLT5pdGVtXSAmIEhFQVBfQkFUQ0hfVklTX0NIRUNL RUQpOworCQkJaWYgKGhiYXRjaC0+dmlzSW5mb1twcmVmZXRjaFBvcy0+aXRlbV0gJiBIRUFQX0JB VENIX1ZJU19BTExfVklTSUJMRSkKKwkJCXsKKwkJCQkvKiBpdGVtIGlzIGtub3duIHRvIGJlIGFs bC12aXNpYmxlIC0tIGRvbid0IHByZWZldGNoICovCisJCQkJY29udGludWU7CisJCQl9CisJCX0K KworCQlpdGVtID0gJnByZWZldGNoQmF0Y2gtPml0ZW1zW3ByZWZldGNoUG9zLT5pdGVtXTsKKwkJ cHJlZmV0Y2hfYmxvY2sgPSBJdGVtUG9pbnRlckdldEJsb2NrTnVtYmVyKCZpdGVtLT50YWJsZVRp ZCk7CisKKwkJaWYgKHByZWZldGNoX2Jsb2NrID09IGhzY2FuLT54c19wcmVmZXRjaF9ibG9jaykK KwkJeworCQkJLyoKKwkJCSAqIHByZWZldGNoX2Jsb2NrIG1hdGNoZXMgdGhlIGxhc3QgcHJlZmV0 Y2hQb3MgaXRlbSdzIFRJRCdzIGhlYXAKKwkJCSAqIGJsb2NrIG51bWJlcjsgd2UgbXVzdCBub3Qg cmV0dXJuIHRoZSBzYW1lIHByZWZldGNoX2Jsb2NrIHR3aWNlCisJCQkgKiAodHdpY2UgaW4gc3Vj Y2Vzc2lvbikKKwkJCSAqLworCQkJY29udGludWU7CisJCX0KKworCQkvKiBXZSBoYXZlIGEgbmV3 IGhlYXAgYmxvY2sgbnVtYmVyIHRvIHJldHVybiB0byByZWFkIHN0cmVhbSAqLworCQloc2Nhbi0+ eHNfcHJlZmV0Y2hfYmxvY2sgPSBwcmVmZXRjaF9ibG9jazsKKwkJcmV0dXJuIHByZWZldGNoX2Js b2NrOworCX0KKworCXJldHVybiBJbnZhbGlkQmxvY2tOdW1iZXI7Cit9CisKIC8qCiAgKiBDb21t b24gaW1wbGVtZW50YXRpb24gZm9yIGFsbCBmb3VyIGhlYXBhbV9pbmRleF8qX2dldG5leHRfc2xv dCB2YXJpYW50cy4KICAqCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvaW5k ZXhiYXRjaC5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L2luZGV4YmF0Y2guYwppbmRleCBi MmIzYWZlODAuLmM2YzUwMzA2ZCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4 L2luZGV4YmF0Y2guYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvaW5kZXhiYXRjaC5j CkBAIC01LDE1ICs1LDIyIEBACiAgKgogICogVGhpcyBtb2R1bGUgcHJvdmlkZXMgdGhlIGNvcmUg aW5mcmFzdHJ1Y3R1cmUgZm9yIGJhdGNoLWJhc2VkIGluZGV4IHNjYW5zLAogICogd2hpY2ggYWxs b3cgaW5kZXggQU1zIHRvIHJldHVybiBtdWx0aXBsZSBtYXRjaGluZyBUSURzIHBlciBwYWdlIGlu IGEgc2luZ2xlCi0gKiBjYWxsLiAgVGhlIGJhdGNoIHJpbmcgYnVmZmVyIGlzIG93bmVkIGJ5IHRo ZSB0YWJsZSBBTS4KKyAqIGNhbGwuICBUaGUgYmF0Y2ggcmluZyBidWZmZXIgaXMgb3duZWQgYnkg dGhlIHRhYmxlIEFNLCB0eXBpY2FsbHkgbWFpbnRhaW5lZAorICogYWxvbmdzaWRlIGEgcmVhZCBz dHJlYW0gdXNlZCBmb3IgcHJlZmV0Y2hpbmcgdGFibGUgYmxvY2tzLgogICoKLSAqIFRoZSByaW5n IGJ1ZmZlciBsb2FkcyBiYXRjaGVzIGluIGluZGV4IGtleSBzcGFjZS9pbmRleCBzY2FuIG9yZGVy LgorICogVGhlIHJpbmcgYnVmZmVyIGxvYWRzIGJhdGNoZXMgaW4gaW5kZXgga2V5IHNwYWNlL2lu ZGV4IHNjYW4gb3JkZXIuICBUaGlzCisgKiBhbGxvd3MgdGhlIHRhYmxlIEFNIHRvIG1haW50YWlu IGFuIGFkZXF1YXRlIHByZWZldGNoIGRpc3RhbmNlOiBpdHMgcmVhZAorICogc3RyZWFtIGNhbGxi YWNrIGlzIHRoZXJlYnkgYWJsZSB0byByZXF1ZXN0IHRhYmxlIGJsb2NrcyByZWZlcmVuY2VkIGJ5 IGluZGV4CisgKiBwYWdlcyB0aGF0IGFyZSB3ZWxsIGFoZWFkIG9mIHRoZSBjdXJyZW50IHNjYW4g cG9zaXRpb24ncyBpbmRleCBwYWdlLgogICoKICAqIE1vc3QgZnVuY3Rpb25zIGhlcmUgYXJlIHRh YmxlIEFNIHV0aWxpdGllcyAodGFibGVhbV91dGlsXyopLCBjYWxsZWQgYnkKICAqIHRhYmxlIEFN cyBkdXJpbmcgYW1nZXRiYXRjaCBpbmRleCBzY2Fucy4gIFRoZXNlIG1hbmFnZSB0aGUgYmF0Y2gg cmluZwogICogYnVmZmVyJ3MgbGlmZWN5Y2xlIGFuZCBwb3NpdGlvbmFsIHN0YXRlLCBhbmQgaGVs cCB3aXRoIGNlcnRhaW4gYXNwZWN0cyBvZgogICogcmVzb3VyY2UgbWFuYWdlbWVudC4gIFRoZSB0 YWJsZSBBTSB1c2VzIHNjYW5Qb3MgKGFuZCBpdHMgc2NhbkJhdGNoIGJhdGNoKQotICogdG8gcmV0 dXJuIGl0ZW1zIGZyb20gYmF0Y2hlcyByZXR1cm5lZCBieSBhbWdldGJhdGNoLgorICogdG8gcmV0 dXJuIGl0ZW1zIGZyb20gYmF0Y2hlcyByZXR1cm5lZCBieSBhbWdldGJhdGNoLiAgVGFibGUgQU1z IHRoYXQKKyAqIHN1cHBvcnQgaW5kZXggSS9PIHByZWZldGNoaW5nIHVzZSBwcmVmZXRjaFBvcyAo YW5kIGl0cyBwcmVmZXRjaEJhdGNoIGJhdGNoKQorICogYnkgaW1wbGVtZW50aW5nIGEgcmVhZCBz dHJlYW0gY2FsbGJhY2sgdGhhdCBjb25zdW1lcyBpdGVtcyB3ZWxsIGFoZWFkIG9mCisgKiBzY2Fu UG9zLgogICoKICAqIFRoZXJlIGFyZSBhbHNvIHNvbWUgaW5kZXggQU0gdXRpbGl0aWVzIChpbmRl eGFtX3V0aWxfKiksIGNhbGxlZCBieSBpbmRleAogICogQU1zIHRoYXQgaW1wbGVtZW50IHRoZSBh bWdldGJhdGNoIGludGVyZmFjZSwgdG8gaGVscCBtYW5hZ2UgcmVzb3VyY2VzIGxpa2UKQEAgLTU1 LDYgKzYyLDcgQEAgdGFibGVhbV91dGlsX2JhdGNoc2Nhbl9yZXNldChJbmRleFNjYW5EZXNjIHNj YW4sIGJvb2wgZW5kc2NhbikKIAlib29sCQltYXJrQmF0Y2hGcmVlZCA9IGZhbHNlOwogCiAJYmF0 Y2hyaW5nYnVmLT5zY2FuUG9zLnZhbGlkID0gZmFsc2U7CisJYmF0Y2hyaW5nYnVmLT5wcmVmZXRj aFBvcy52YWxpZCA9IGZhbHNlOwogCWJhdGNocmluZ2J1Zi0+bWFya1Bvcy52YWxpZCA9IGZhbHNl OwogCiAJLyogRW5zdXJlIGJhdGNoX2ZyZWUgd29uJ3Qgc2tpcCB0aGUgb2xkIG1hcmtCYXRjaCBp biB0aGUgbG9vcCBiZWxvdyAqLwpAQCAtMTcwLDcgKzE3OCwxMiBAQCB0YWJsZWFtX3V0aWxfYmF0 Y2hzY2FuX21hcmtfcG9zKEluZGV4U2NhbkRlc2Mgc2NhbikKICAqIHRoZSBjdXJyZW50IHNjYW5C YXRjaCB3aGVuIG5lZWRlZC4KICAqCiAgKiBXZSBqdXN0IGRpc2NhcmQgYWxsIGJhdGNoZXMgKG90 aGVyIHRoYW4gbWFya0JhdGNoL3Jlc3RvcmVkIHNjYW5CYXRjaCksCi0gKiBleGNlcHQgd2hlbiBt YXJrQmF0Y2ggaXMgYWxyZWFkeSB0aGUgc2NhbidzIGN1cnJlbnQgc2NhbkJhdGNoLgorICogZXhj ZXB0IHdoZW4gbWFya0JhdGNoIGlzIGFscmVhZHkgdGhlIHNjYW4ncyBjdXJyZW50IHNjYW5CYXRj aC4gIFdlIGFsd2F5cworICogaW52YWxpZGF0ZSBwcmVmZXRjaFBvcy4gIFRoZSByZWFkIHN0cmVh bSBhbmQgcmVsYXRlZCBwcmVmZXRjaGluZyBzdGF0ZSBhcmUKKyAqIHJlc2V0IGJ5IHRoZSBjYWxs ZXIgKHdoaWNoIGNhbGxzIHRoaXMgZnVuY3Rpb24gYXMgaXQgcmVzZXRzIHRoYXQgc3RhdGUpLgor ICogVGhpcyBhcHByb2FjaCBrZWVwcyB0aGluZ3Mgc2ltcGxlIGZvciB0YWJsZSBBTXM6IG1vc3Qg Y29kZSB0aGF0IGRlYWxzIHdpdGgKKyAqIGJhdGNoZXMgaXMgdGhlcmVieSBhYmxlIHRvIGFzc3Vt ZSB0aGF0IHRoZSBjb21tb24gY2FzZSB3aGVyZSBzY2FuIGRpcmVjdGlvbgorICogbmV2ZXIgY2hh bmdlcyBpcyB0aGUgb25seSBjYXNlLgogICovCiB2b2lkCiB0YWJsZWFtX3V0aWxfYmF0Y2hzY2Fu X3Jlc3RvcmVfcG9zKEluZGV4U2NhbkRlc2Mgc2NhbikKQEAgLTE4NSw2ICsxOTgsMTQgQEAgdGFi bGVhbV91dGlsX2JhdGNoc2Nhbl9yZXN0b3JlX3BvcyhJbmRleFNjYW5EZXNjIHNjYW4pCiAJQXNz ZXJ0KHNjYW4tPnhzX2hlYXBmZXRjaCk7CiAJQXNzZXJ0KG1hcmtQb3MtPnZhbGlkKTsKIAorCS8q CisJICogUmVzdG9yaW5nIGEgbWFyayBhbHdheXMgcmVxdWlyZXMgc3RvcHBpbmcgcHJlZmV0Y2hp bmcuICBUaGlzIGlzIHNpbWlsYXIKKwkgKiB0byB0aGUgaGFuZGxpbmcgdGFibGUgQU1zIGltcGxl bWVudCB0byBkZWFsIHdpdGggYSB0dXBsZS1sZXZlbCBjaGFuZ2UKKwkgKiBpbiB0aGUgc2Nhbidz IGRpcmVjdGlvbi4gIFRoZSByZWFkIHN0cmVhbSBtdXN0IGhhdmUgYWxyZWFkeSBiZWVuIHJlc2V0 CisJICogYnkgdGhlIGNhbGxlciAodmlhIHRhYmxlX2luZGV4X2ZldGNoX3Jlc2V0KS4KKwkgKi8K KwliYXRjaHJpbmdidWYtPnByZWZldGNoUG9zLnZhbGlkID0gZmFsc2U7CisKIAlpZiAoc2NhbkJh dGNoID09IG1hcmtCYXRjaCkKIAl7CiAJCS8qIG1hcmtCYXRjaCBpcyBhbHJlYWR5IHNjYW5CYXRj aDsgbmVlZG4ndCBjaGFuZ2UgYmF0Y2hyaW5nYnVmICovCkBAIC0yNDksNiArMjcwLDEzIEBAIHRh YmxlYW1fdXRpbF9iYXRjaHNjYW5fcmVzdG9yZV9wb3MoSW5kZXhTY2FuRGVzYyBzY2FuKQogICog dG8gZGV0ZXJtaW5lIHdoaWNoIGJhdGNoIGNvbWVzIG5leHQgaW4gdGhlIG5ldyBzY2FuIGRpcmVj dGlvbi4gIFRoaXMKICAqIGFwcHJvYWNoIGlzbid0IHBhcnRpY3VsYXJseSBlZmZpY2llbnQsIGJ1 dCBpdCB3b3JrcyB3ZWxsIGVub3VnaCBmb3Igd2hhdAogICogb3VnaHQgdG8gYmUgYSByZWxhdGl2 ZWx5IHJhcmUgb2NjdXJyZW5jZS4KKyAqCisgKiBDYWxsZXIgbXVzdCBoYXZlIHJlc2V0IHRoZSBz Y2FuJ3MgcmVhZCBzdHJlYW0gYmVmb3JlIGNhbGxpbmcgaGVyZS4gIFRoYXQKKyAqIG5lZWRzIHRv IGhhcHBlbiBhcyBzb29uIGFzIHRoZSBzY2FuIHJlcXVlc3RzIGEgdHVwbGUgaW4gd2hhdGV2ZXIg c2NhbgorICogZGlyZWN0aW9uIGlzIG9wcG9zaXRlLXRvLWN1cnJlbnQuICBXZSBvbmx5IGRlYWwg d2l0aCB0aGUgY2FzZSB3aGVyZSB0aGUKKyAqIHNjYW4gYmFja3MgdXAgYnkgZW5vdWdoIGl0ZW1z IHRvIGNyb3NzIGEgYmF0Y2ggYm91bmRhcnkgKHdoZW4gdGhlIHNjYW4KKyAqIHJlc3VtZXMgc2Nh bm5pbmcgaW4gaXRzIG9yaWdpbmFsIGRpcmVjdGlvbi9lbmRzIGJlZm9yZSBjcm9zc2luZyBhIGJv dW5kYXJ5LAorICogdGhlcmUgaXNuJ3QgYW55IG5lZWQgdG8gY2FsbCBoZXJlKS4KICAqLwogdm9p ZAogdGFibGVhbV91dGlsX3NjYW5iYXRjaF9kaXJjaGFuZ2UoSW5kZXhTY2FuRGVzYyBzY2FuKQpk aWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvY29zdHNpemUuYyBiL3NyYy9i YWNrZW5kL29wdGltaXplci9wYXRoL2Nvc3RzaXplLmMKaW5kZXggMWM1NzVlNTZmLi42ZmNiODE1 ZjcgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2Nvc3RzaXplLmMKKysr IGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvY29zdHNpemUuYwpAQCAtMTQ2LDYgKzE0Niw3 IEBAIGludAkJCW1heF9wYXJhbGxlbF93b3JrZXJzX3Blcl9nYXRoZXIgPSAyOwogYm9vbAkJZW5h YmxlX3NlcXNjYW4gPSB0cnVlOwogYm9vbAkJZW5hYmxlX2luZGV4c2NhbiA9IHRydWU7CiBib29s CQllbmFibGVfaW5kZXhvbmx5c2NhbiA9IHRydWU7Citib29sCQllbmFibGVfaW5kZXhzY2FuX3By ZWZldGNoID0gdHJ1ZTsKIGJvb2wJCWVuYWJsZV9iaXRtYXBzY2FuID0gdHJ1ZTsKIGJvb2wJCWVu YWJsZV90aWRzY2FuID0gdHJ1ZTsKIGJvb2wJCWVuYWJsZV9zb3J0ID0gdHJ1ZTsKZGlmZiAtLWdp dCBhL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvZ3VjX3BhcmFtZXRlcnMuZGF0IGIvc3JjL2JhY2tl bmQvdXRpbHMvbWlzYy9ndWNfcGFyYW1ldGVycy5kYXQKaW5kZXggYTMxNWM0YWI4Li40OGViMWI2 YjkgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvZ3VjX3BhcmFtZXRlcnMuZGF0 CisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvZ3VjX3BhcmFtZXRlcnMuZGF0CkBAIC05MzIs NiArOTMyLDEzIEBACiAgIGJvb3RfdmFsID0+ICd0cnVlJywKIH0sCiAKK3sgbmFtZSA9PiAnZW5h YmxlX2luZGV4c2Nhbl9wcmVmZXRjaCcsIHR5cGUgPT4gJ2Jvb2wnLCBjb250ZXh0ID0+ICdQR0Nf VVNFUlNFVCcsIGdyb3VwID0+ICdRVUVSWV9UVU5JTkdfTUVUSE9EJywKKyAgc2hvcnRfZGVzYyA9 PiAnRW5hYmxlcyBwcmVmZXRjaGluZyBmb3IgaW5kZXggc2NhbnMgYW5kIGluZGV4LW9ubHkgc2Nh bnMuJywKKyAgZmxhZ3MgPT4gJ0dVQ19FWFBMQUlOJywKKyAgdmFyaWFibGUgPT4gJ2VuYWJsZV9p bmRleHNjYW5fcHJlZmV0Y2gnLAorICBib290X3ZhbCA9PiAndHJ1ZScsCit9LAorCiB7IG5hbWUg PT4gJ2VuYWJsZV9tYXRlcmlhbCcsIHR5cGUgPT4gJ2Jvb2wnLCBjb250ZXh0ID0+ICdQR0NfVVNF UlNFVCcsIGdyb3VwID0+ICdRVUVSWV9UVU5JTkdfTUVUSE9EJywKICAgc2hvcnRfZGVzYyA9PiAn RW5hYmxlcyB0aGUgcGxhbm5lclwncyB1c2Ugb2YgbWF0ZXJpYWxpemF0aW9uLicsCiAgIGZsYWdz ID0+ICdHVUNfRVhQTEFJTicsCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9taXNjL3Bv c3RncmVzcWwuY29uZi5zYW1wbGUgYi9zcmMvYmFja2VuZC91dGlscy9taXNjL3Bvc3RncmVzcWwu Y29uZi5zYW1wbGUKaW5kZXggNmQwMzM3ODUzLi41Nzc1NTU1MTggMTAwNjQ0Ci0tLSBhL3NyYy9i YWNrZW5kL3V0aWxzL21pc2MvcG9zdGdyZXNxbC5jb25mLnNhbXBsZQorKysgYi9zcmMvYmFja2Vu ZC91dGlscy9taXNjL3Bvc3RncmVzcWwuY29uZi5zYW1wbGUKQEAgLTQyMCw2ICs0MjAsNyBAQAog I2VuYWJsZV9pbmNyZW1lbnRhbF9zb3J0ID0gb24KICNlbmFibGVfaW5kZXhzY2FuID0gb24KICNl bmFibGVfaW5kZXhvbmx5c2NhbiA9IG9uCisjZW5hYmxlX2luZGV4c2Nhbl9wcmVmZXRjaCA9IG9u CiAjZW5hYmxlX21hdGVyaWFsID0gb24KICNlbmFibGVfbWVtb2l6ZSA9IG9uCiAjZW5hYmxlX21l cmdlam9pbiA9IG9uCmRpZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwvY29uZmlnLnNnbWwgYi9kb2Mv c3JjL3NnbWwvY29uZmlnLnNnbWwKaW5kZXggZDNmZWE3MzhjLi4xN2RhZWFlZDQgMTAwNjQ0Ci0t LSBhL2RvYy9zcmMvc2dtbC9jb25maWcuc2dtbAorKysgYi9kb2Mvc3JjL3NnbWwvY29uZmlnLnNn bWwKQEAgLTU3MTIsNiArNTcxMiwyMiBAQCBBTlkgPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0 ZXIiPm51bV9zeW5jPC9yZXBsYWNlYWJsZT4gKCA8cmVwbGFjZWFibGUgY2xhc3M9IgogICAgICAg PC9saXN0aXRlbT4KICAgICAgPC92YXJsaXN0ZW50cnk+CiAKKyAgICAgPHZhcmxpc3RlbnRyeSBp ZD0iZ3VjLWVuYWJsZS1pbmRleHNjYW4tcHJlZmV0Y2giIHhyZWZsYWJlbD0iZW5hYmxlX2luZGV4 c2Nhbl9wcmVmZXRjaCI+CisgICAgICA8dGVybT48dmFybmFtZT5lbmFibGVfaW5kZXhzY2FuX3By ZWZldGNoPC92YXJuYW1lPiAoPHR5cGU+Ym9vbGVhbjwvdHlwZT4pCisgICAgICA8aW5kZXh0ZXJt PgorICAgICAgIDxwcmltYXJ5Pjx2YXJuYW1lPmVuYWJsZV9pbmRleHNjYW5fcHJlZmV0Y2g8L3Zh cm5hbWU+IGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVyPC9wcmltYXJ5PgorICAgICAgPC9pbmRleHRl cm0+CisgICAgICA8L3Rlcm0+CisgICAgICA8bGlzdGl0ZW0+CisgICAgICAgPHBhcmE+CisgICAg ICAgIEVuYWJsZXMgb3IgZGlzYWJsZXMgcHJlZmV0Y2hpbmcgZm9yIGluZGV4IHNjYW4gYW5kIGlu ZGV4LW9ubHkgc2NhbgorICAgICAgICBwbGFuIHR5cGVzLiAgUHJlZmV0Y2hpbmcgY2FuIGltcHJv dmUgcGVyZm9ybWFuY2UgYnkgcmVhZGluZyB0YWJsZSBBTQorICAgICAgICBwYWdlcyBhaGVhZCBv ZiB3aGVuIHRoZXkgYXJlIG5lZWRlZCBkdXJpbmcgaW5kZXggc2NhbnMuICBUaGUgZGVmYXVsdAor ICAgICAgICBpcyA8bGl0ZXJhbD5vbjwvbGl0ZXJhbD4uCisgICAgICAgPC9wYXJhPgorICAgICAg PC9saXN0aXRlbT4KKyAgICAgPC92YXJsaXN0ZW50cnk+CisKICAgICAgPHZhcmxpc3RlbnRyeSBp ZD0iZ3VjLWVuYWJsZS1tYXRlcmlhbCIgeHJlZmxhYmVsPSJlbmFibGVfbWF0ZXJpYWwiPgogICAg ICAgPHRlcm0+PHZhcm5hbWU+ZW5hYmxlX21hdGVyaWFsPC92YXJuYW1lPiAoPHR5cGU+Ym9vbGVh bjwvdHlwZT4pCiAgICAgICA8aW5kZXh0ZXJtPgpkaWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21sL2lu ZGV4YW0uc2dtbCBiL2RvYy9zcmMvc2dtbC9pbmRleGFtLnNnbWwKaW5kZXggNDQ4NGEyMTY1Li5k OTkwYzFhNTMgMTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC9pbmRleGFtLnNnbWwKKysrIGIvZG9j L3NyYy9zZ21sL2luZGV4YW0uc2dtbApAQCAtODEwLDkgKzgxMCwxMiBAQCBhbWdldGJhdGNoIChJ bmRleFNjYW5EZXNjIHNjYW4sCiAgIDxwYXJhPgogICAgVGhlIDxmdW5jdGlvbj5hbWdldGJhdGNo PC9mdW5jdGlvbj4gaW50ZXJmYWNlIGlzIGFuIGFsdGVybmF0aXZlIHRvCiAgICA8ZnVuY3Rpb24+ YW1nZXR0dXBsZTwvZnVuY3Rpb24+IHRoYXQgcmV0dXJucyBtYXRjaGluZyBpbmRleCBlbnRyaWVz IGluIGJhdGNoZXMKLSAgIHJhdGhlciB0aGFuIG9uZSBhdCBhIHRpbWUuICBCeSByZXR1cm5pbmcg YWxsIG1hdGNoaW5nIGluZGV4IGVudHJpZXMgZnJvbSBhCi0gICBzaW5nbGUgaW5kZXggcGFnZSB0 b2dldGhlciwgdGhlIHRhYmxlIEFNIGdhaW5zIHZpc2liaWxpdHkgaW50byB3aGljaCB0YWJsZQot ICAgYmxvY2tzIHdpbGwgYmUgbmVlZGVkIGluIHRoZSBuZWFyIGZ1dHVyZS4KKyAgIHJhdGhlciB0 aGFuIG9uZSBhdCBhIHRpbWUuIFRoaXMgZW5hYmxlcyB0aGUgdGFibGUgYWNjZXNzIG1ldGhvZCB0 bworICAgb3B0aW1pemUgdGFibGUgYmxvY2sgYWNjZXNzIHBhdHRlcm5zIGFuZCBwZXJmb3JtIEkv TyBwcmVmZXRjaGluZy4KKyAgIEJ5IHJldHVybmluZyBhbGwgbWF0Y2hpbmcgaW5kZXggZW50cmll cyBmcm9tIGEgc2luZ2xlIGluZGV4IHBhZ2UgdG9nZXRoZXIsCisgICB0aGUgdGFibGUgQU0gY2Fu IHJlYWRhaGVhZCB0aHJvdWdoIHRoZSBpbmRleCBhbmQgaWRlbnRpZnkgd2hpY2ggdGFibGUKKyAg IGJsb2NrcyB3aWxsIGJlIG5lZWRlZCwgYWxsb3dpbmcgcHJlZmV0Y2hpbmcgb2YgdGFibGUgQU0g cGFnZXMgZHVyaW5nCisgICBvcmRlcmVkIGluZGV4IHNjYW5zLgogICA8L3BhcmE+CiAKICAgPHBh cmE+CkBAIC05MzcsNyArOTQwLDkgQEAgYW11bmd1YXJkYmF0Y2ggKEluZGV4U2NhbkRlc2Mgc2Nh biwKICAgICB0byBmcmVlIHRoZSBwaW5zIGF0IGFuIG9wcG9ydHVuZSBwb2ludCAoYXQgYSBtaW5p bXVtIHdoZW5ldmVyCiAgICAgPGZ1bmN0aW9uPmFtZW5kc2NhbjwvZnVuY3Rpb24+IGlzIGNhbGxl ZCwgYW5kIHR5cGljYWxseSB3aGVuCiAgICAgPGZ1bmN0aW9uPmFtcmVzY2FuPC9mdW5jdGlvbj4g aXMgY2FsbGVkKS4gIEl0IG11c3QgYWxzbyBrZWVwIHRoZSBudW1iZXIgb2YKLSAgICByZXRhaW5l ZCBwaW5zIGZpeGVkIGFuZCBzbWFsbC4KKyAgICByZXRhaW5lZCBwaW5zIGZpeGVkIGFuZCBzbWFs bCwgdG8gYXZvaWQgZXhoYXVzdGluZyB0aGUgYmFja2VuZCdzIGJ1ZmZlcgorICAgIHBpbiBsaW1p dCAod2hpY2ggaXMgc2hhcmVkIHdpdGggdGhlIHRhYmxlIEFNJ3MgcmVhZCBzdHJlYW0gZm9yIGlu ZGV4IHNjYW4KKyAgICBwcmVmZXRjaGluZykuCiAgICA8L3BhcmE+CiAgIDwvbm90ZT4KIApAQCAt MTQyNiw2ICsxNDMxLDYwIEBAIGFtdHJhbnNsYXRlY21wdHlwZSAoQ29tcGFyZVR5cGUgY21wdHlw ZSwgT2lkIG9wZmFtaWx5LCBPaWQgb3BjaW50eXBlKTsKICAgIG9yIHZpY2UgdmVyc2EsIGlmIGl0 cyBpbnRlcm5hbCBpbXBsZW1lbnRhdGlvbiBpcyB1bnN1aXRlZCB0byBvbmUgQVBJIG9yIHRoZSBv dGhlci4KICAgPC9wYXJhPgogCisgIDxzZWN0MiBpZD0iaW5kZXgtc2Nhbm5pbmctYmF0Y2hlcyI+ CisgICA8dGl0bGU+VGFibGUgQU0gQ29uc2lkZXJhdGlvbnMgZm9yIEJhdGNoIFNjYW5uaW5nPC90 aXRsZT4KKworICAgPHBhcmE+CisgICAgVGhpcyBzZWN0aW9uIGlzIHByaW1hcmlseSByZWxldmFu dCB0byA8bGluayBsaW5rZW5kPSJ0YWJsZWFtIj50YWJsZSBhY2Nlc3MKKyAgICAgbWV0aG9kPC9s aW5rPiBhdXRob3JzLgorICAgPC9wYXJhPgorCisgICA8cGFyYT4KKyAgICBXaGVuIGFuIGluZGV4 IHNjYW4gdXNlcyB0aGUgPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPiBpbnRlcmZhY2Us IHRoZQorICAgIHRhYmxlIEFNIGhhcyBzb2xlIGNvbnRyb2wgb3ZlciB0aGUgPHN0cnVjdG5hbWU+ SW5kZXhTY2FuRGVzYzwvc3RydWN0bmFtZT4ncworICAgIDxzdHJ1Y3RmaWVsZD5iYXRjaHJpbmdi dWY8L3N0cnVjdGZpZWxkPiwgaW5jbHVkaW5nIGNyZWF0aW5nLCByZXNldHRpbmcsCisgICAgYW5k IGVuZGluZyB0aGUgYmF0Y2ggcmluZyBidWZmZXIgd2l0aGluIHRoZSBhcHByb3ByaWF0ZSB0YWJs ZSBBTQorICAgIGNhbGxiYWNrcywgYW5kIG1hbmFnaW5nIHBvc2l0aW9uYWwgc3RhdGUgYW5kIFRJ RCByZWN5Y2xpbmcgaW50ZXJsb2NraW5nCisgICAgKHRoYXQgaXMsIGRldGVybWluaW5nIHdoZW4g dG8gdW5ndWFyZCBlYWNoIGJhdGNoLCB3aGljaCB3aWxsIHR5cGljYWxseQorICAgIHJlbGVhc2Ug YW4gaW5kZXggcGFnZSBidWZmZXIgcGluIGFzc29jaWF0ZWQgd2l0aCB0aGUgYmF0Y2gpLiAgSW5k ZXggYWNjZXNzCisgICAgbWV0aG9kcyBzaG91bGQgbm90IGFjY2VzcyBvciBtYW5pcHVsYXRlIHRo ZXNlIGZpZWxkcy4gIFNlZSB0aGUKKyAgICA8ZmlsZW5hbWU+c3JjL2JhY2tlbmQvYWNjZXNzL2hl YXAvaGVhcGFtX2luZGV4c2Nhbi5jPC9maWxlbmFtZT4KKyAgICBpbXBsZW1lbnRhdGlvbiBmb3Ig YSByZWZlcmVuY2UgZXhhbXBsZS4KKyAgIDwvcGFyYT4KKworICAgPHBhcmE+CisgICAgVGhlIDxz dHJ1Y3RmaWVsZD5zY2FuUG9zPC9zdHJ1Y3RmaWVsZD4gZmllbGQgd2l0aGluCisgICAgPHN0cnVj dGZpZWxkPmJhdGNocmluZ2J1Zjwvc3RydWN0ZmllbGQ+IHRyYWNrcyB3aGljaCBiYXRjaCBhbmQg aXRlbSB3aXRoaW4KKyAgICB0aGF0IGJhdGNoIHdpbGwgYmUgcmV0dXJuZWQgbmV4dCB0byB0aGUg ZXhlY3V0b3IuICBUaGUgdGFibGUgQU0gbXVzdCBhZHZhbmNlCisgICAgPHN0cnVjdGZpZWxkPnNj YW5Qb3M8L3N0cnVjdGZpZWxkPiBhcyB0dXBsZXMgYXJlIHJldHVybmVkIGJ5CisgICAgPGZ1bmN0 aW9uPnRhYmxlX2luZGV4X2dldG5leHRfc2xvdDwvZnVuY3Rpb24+LCBhbmQgbXVzdCBhbHNvIG1v ZGlmeSB0aGlzCisgICAgZmllbGQgd2hlbiByZXN0b3JpbmcgYSBzYXZlZCBtYXJrLgorICAgPC9w YXJhPgorCisgICA8cGFyYT4KKyAgICBUaGUgPHN0cnVjdGZpZWxkPnByZWZldGNoUG9zPC9zdHJ1 Y3RmaWVsZD4gZmllbGQgdHJhY2tzIHRoZSBwb3NpdGlvbiB1c2VkCisgICAgZm9yIEkvTyBwcmVm ZXRjaGluZy4gIEl0IGlzIGdlbmVyYWxseSBhZHZhbmNlZCBieSBpbml0aWFsaXppbmcgaXQgZnJv bQorICAgIDxzdHJ1Y3RmaWVsZD5zY2FuUG9zPC9zdHJ1Y3RmaWVsZD4gd2l0aGluIGEgcmVhZCBz dHJlYW0gY2FsbGJhY2ssIGFsbG93aW5nCisgICAgdGhlIHRhYmxlIEFNIHRvIHByZWZldGNoIHRh YmxlIGJsb2NrcyBwb2ludGVkIHRvIGJ5IGl0ZW1zIHRoYXQgYXJlIHdlbGwKKyAgICBhaGVhZCBv ZiB0aGUgY3VycmVudCBzY2FuIHBvc2l0aW9uLiAgSW5pdGlhbGx5CisgICAgPHN0cnVjdGZpZWxk PnByZWZldGNoUG9zPC9zdHJ1Y3RmaWVsZD4gc3RhcnRzIGF0CisgICAgPHN0cnVjdGZpZWxkPnNj YW5Qb3M8L3N0cnVjdGZpZWxkPiwgYnV0IGFzIHRoZSByZWFkIHN0cmVhbSByYW1wcyB1cCBpdCBj YW4KKyAgICBnZXQgZmFyIGFoZWFkICZtZGFzaDsgc3Bhbm5pbmcgbXVsdGlwbGUgaW5kZXggcGFn ZXMgaWYgbmVjZXNzYXJ5IHRvCisgICAgbWFpbnRhaW4gYW4gb3B0aW1hbCBJL08gcHJlZmV0Y2gg ZGlzdGFuY2UgZm9yIHRhYmxlIGJsb2NrIHJlYWRzLiAgQSBtYWpvcgorICAgIGdvYWwgb2YgdGhl IDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5jdGlvbj4gaW50ZXJmYWNlIGlzIHRvIGFsbG93IHRo ZQorICAgIHRhYmxlIEFNIHRvIHByZWZldGNoIHdpdGhvdXQgYmVpbmcgbGltaXRlZCB0byBpdGVt cyBmcm9tIHRoZSBjdXJyZW50CisgICAgPHN0cnVjdGZpZWxkPnNjYW5Qb3M8L3N0cnVjdGZpZWxk PiBiYXRjaCdzIGluZGV4IGxlYWYgcGFnZS4KKyAgIDwvcGFyYT4KKworICAgPHBhcmE+CisgICAg Rm9yIGRldGFpbHMgb24gdGhlIFRJRCByZWN5Y2xpbmcgaW50ZXJsb2NrIGR1cmluZyBiYXRjaCBz Y2FucywgaW5jbHVkaW5nCisgICAgdGhlIDxzdHJ1Y3RmaWVsZD5iYXRjaEltbWVkaWF0ZVVuZ3Vh cmQ8L3N0cnVjdGZpZWxkPiBwb2xpY3kgYW5kIHRoZQorICAgIDxmdW5jdGlvbj5hbXVuZ3VhcmRi YXRjaDwvZnVuY3Rpb24+IGNhbGxiYWNrLCBzZWUKKyAgICA8eHJlZiBsaW5rZW5kPSJpbmRleC1s b2NraW5nIi8+LgorICAgPC9wYXJhPgorCisgIDwvc2VjdDI+CisKICA8L3NlY3QxPgogCiAgPHNl Y3QxIGlkPSJpbmRleC1sb2NraW5nIj4KQEAgLTE1MjYsNyArMTU4NSwyMiBAQCBhbXRyYW5zbGF0 ZWNtcHR5cGUgKENvbXBhcmVUeXBlIGNtcHR5cGUsIE9pZCBvcGZhbWlseSwgT2lkIG9wY2ludHlw ZSk7CiAgICBpbW1lZGlhdGVseSBhZnRlciBzY2FubmluZyB0aGUgY29ycmVzcG9uZGluZyBpbmRl eCBlbnRyeS4gIFRoaXMgaXMKICAgIGV4cGVuc2l2ZSBmb3IgYSBudW1iZXIgb2YgcmVhc29ucy4g IFRoZQogICAgPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPiBpbnRlcmZhY2UsIGJ5IGNv bnRyYXN0LCB3YXMgZGVzaWduZWQgdG8KLSAgIGFsbG93IHNjYW5zIHRvIGJlIDxxdW90ZT5hc3lu Y2hyb25vdXM8L3F1b3RlPi4KKyAgIGFsbG93IHNjYW5zIHRvIGJlIDxxdW90ZT5hc3luY2hyb25v dXM8L3F1b3RlPjogYnkgY29sbGVjdGluZyBiYXRjaGVzIG9mCisgICBUSURzIGZyb20gbXVsdGlw bGUgaW5kZXggcGFnZXMsIHRoZSB0YWJsZSBBTSBjYW4gcHJlZmV0Y2ggdGhlIGNvcnJlc3BvbmRp bmcKKyAgIHRhYmxlIGJsb2NrcyB3ZWxsIGFoZWFkIG9mIHRoZSBjdXJyZW50IHNjYW4gcG9zaXRp b24gKHVzaW5nIGFzeW5jaHJvbm91cworICAgSS9PIHdoZW4gYXZhaWxhYmxlKSwgYWxsb3dpbmcg YSBtb3JlIGVmZmljaWVudCBoZWFwIGFjY2VzcyBwYXR0ZXJuLiAgTm90CisgICBhbGwgc2NhbnMg ZW5kIHVwIGJlaW5nIGFzeW5jaHJvbm91cyBpbiBwcmFjdGljZSwgYnV0IHRoZSBpbnRlcmZhY2Ug aXMKKyAgIGRlc2lnbmVkIHRvIGFsbG93IGl0LiAgUGVyIHRoZSBhYm92ZSBhbmFseXNpcywgd2Ug bXVzdCB1c2UgdGhlIHN5bmNocm9ub3VzCisgICBhcHByb2FjaCBmb3Igbm9uLU1WQ0MtY29tcGxp YW50IHNuYXBzaG90cywgYnV0IGFuIGFzeW5jaHJvbm91cyBzY2FuIGlzCisgICB3b3JrYWJsZSBm b3IgcGxhaW4gaW5kZXggc2NhbnMgdGhhdCB1c2UgYW4gTVZDQyBzbmFwc2hvdC4KKyAgPC9wYXJh PgorCisgIDxwYXJhPgorICAgQmVjYXVzZSB0aGUgdGFibGUgQU0gcmVhZHMgbXVsdGlwbGUgaW5k ZXggbGVhZiBwYWdlcyBhaGVhZCB2aWEKKyAgIDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5jdGlv bj4gdG8gZmFjaWxpdGF0ZSB0aGlzIHByZWZldGNoaW5nLCBpdCBjYW5ub3QKKyAgIHByYWN0aWNh bGx5IGhvbGQgcGlucyBvbiBhbGwgdGhvc2UgcGFnZXMgc2ltdWx0YW5lb3VzbHkuICBUaGVyZWZv cmUsIEkvTworICAgcHJlZmV0Y2hpbmcgd2l0aCA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rp b24+IGlzIG9ubHkgcG9zc2libGUgd2hlbiBhbgorICAgTVZDQy1jb21wbGlhbnQgc25hcHNob3Qg aXMgaW4gdXNlLgogICA8L3BhcmE+CiAKICAgPHBhcmE+CmRpZmYgLS1naXQgYS9kb2Mvc3JjL3Nn bWwvdGFibGVhbS5zZ21sIGIvZG9jL3NyYy9zZ21sL3RhYmxlYW0uc2dtbAppbmRleCA5Y2NmNWI3 MzkuLjQ1NDJlMDBiNCAxMDA2NDQKLS0tIGEvZG9jL3NyYy9zZ21sL3RhYmxlYW0uc2dtbAorKysg Yi9kb2Mvc3JjL3NnbWwvdGFibGVhbS5zZ21sCkBAIC0xMjksNiArMTI5LDE0IEBAIG15X3RhYmxl YW1faGFuZGxlcihQR19GVU5DVElPTl9BUkdTKQogICBvcHRpb25hbCksIHRoZSBibG9jayBudW1i ZXIgbmVlZHMgdG8gcHJvdmlkZSBsb2NhbGl0eS4KICA8L3BhcmE+CiAKKyA8cGFyYT4KKyAgVGFi bGUgYWNjZXNzIG1ldGhvZHMgbXVzdCBzdXBwb3J0IG9yZGVyZWQgaW5kZXggc2NhbnMgdXNpbmcg dGhlCisgIDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5jdGlvbj4gaW50ZXJmYWNlLiBTZWUgYWxz bworICA8eHJlZiBsaW5rZW5kPSJpbmRleC1zY2FubmluZy1iYXRjaGVzIi8+IGZvciBkZXRhaWxz IG9uIGludGVyZmFjaW5nIHdpdGgKKyAgPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPiBp bmRleCBhY2Nlc3MgbWV0aG9kcywgYW5kIG1hbmFnaW5nIHRoZQorICBzY2FuJ3MgcG9zaXRpb24u CisgPC9wYXJhPgorCiAgPHBhcmE+CiAgIEZvciBjcmFzaCBzYWZldHksIGFuIEFNIGNhbiB1c2Ug cG9zdGdyZXMnIDxsaW5rCiAgIGxpbmtlbmQ9IndhbCI+PGFjcm9ueW0+V0FMPC9hY3JvbnltPjwv bGluaz4sIG9yIGEgY3VzdG9tIGltcGxlbWVudGF0aW9uLgpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3Qv cmVncmVzcy9leHBlY3RlZC9zeXN2aWV3cy5vdXQgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVk L3N5c3ZpZXdzLm91dAppbmRleCAxMzJiNTZhNTguLjMyYmMzZGQzZSAxMDA2NDQKLS0tIGEvc3Jj L3Rlc3QvcmVncmVzcy9leHBlY3RlZC9zeXN2aWV3cy5vdXQKKysrIGIvc3JjL3Rlc3QvcmVncmVz cy9leHBlY3RlZC9zeXN2aWV3cy5vdXQKQEAgLTE2Niw2ICsxNjYsNyBAQCBzZWxlY3QgbmFtZSwg c2V0dGluZyBmcm9tIHBnX3NldHRpbmdzIHdoZXJlIG5hbWUgbGlrZSAnZW5hYmxlJSc7CiAgZW5h YmxlX2luY3JlbWVudGFsX3NvcnQgICAgICAgIHwgb24KICBlbmFibGVfaW5kZXhvbmx5c2NhbiAg ICAgICAgICAgfCBvbgogIGVuYWJsZV9pbmRleHNjYW4gICAgICAgICAgICAgICB8IG9uCisgZW5h YmxlX2luZGV4c2Nhbl9wcmVmZXRjaCAgICAgIHwgb24KICBlbmFibGVfbWF0ZXJpYWwgICAgICAg ICAgICAgICAgfCBvbgogIGVuYWJsZV9tZW1vaXplICAgICAgICAgICAgICAgICB8IG9uCiAgZW5h YmxlX21lcmdlam9pbiAgICAgICAgICAgICAgIHwgb24KQEAgLTE4MCw3ICsxODEsNyBAQCBzZWxl Y3QgbmFtZSwgc2V0dGluZyBmcm9tIHBnX3NldHRpbmdzIHdoZXJlIG5hbWUgbGlrZSAnZW5hYmxl JSc7CiAgZW5hYmxlX3NlcXNjYW4gICAgICAgICAgICAgICAgIHwgb24KICBlbmFibGVfc29ydCAg ICAgICAgICAgICAgICAgICAgfCBvbgogIGVuYWJsZV90aWRzY2FuICAgICAgICAgICAgICAgICB8 IG9uCi0oMjUgcm93cykKKygyNiByb3dzKQogCiAtLSBUaGVyZSBhcmUgYWx3YXlzIHdhaXQgZXZl bnQgZGVzY3JpcHRpb25zIGZvciB2YXJpb3VzIHR5cGVzLiAgSW5qZWN0aW9uUG9pbnQKIC0tIG1h eSBiZSBwcmVzZW50IG9yIGFic2VudCwgZGVwZW5kaW5nIG9uIGhpc3Rvcnkgc2luY2UgbGFzdCBw b3N0bWFzdGVyIHN0YXJ0LgotLSAKMi41My4wCgo= --0000000000002fe31c064eaff221 Content-Type: application/octet-stream; name="v23-0007-aio-Fix-pgaio_io_wait-for-staged-IOs-B.patch" Content-Disposition: attachment; filename="v23-0007-aio-Fix-pgaio_io_wait-for-staged-IOs-B.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mnlbta2y1 RnJvbSA4ZDhhMTI4MDQyZWU0NWI2ZmRhZDczZjNjNjhkZDM4NzE5M2U5YWM1IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbmRyZXMgRnJldW5kIDxhbmRyZXNAYW5hcmF6ZWwuZGU+CkRh dGU6IFN1biwgMjIgTWFyIDIwMjYgMTU6MTI6NDEgLTA0MDAKU3ViamVjdDogW1BBVENIIHYyMyA3 LzhdIGFpbzogRml4IHBnYWlvX2lvX3dhaXQoKSBmb3Igc3RhZ2VkIElPcyAoQikuCgpQcmV2aW91 c2x5LCBwZ2Fpb19pb193YWl0KCkncyBjYXNlcyBmb3IgUEdBSU9fSFNfREVGSU5FRCBhbmQKUEdB SU9fSFNfU1RBR0VEIGZlbGwgdGhyb3VnaCB0byB3YWl0aW5nIGZvciBjb21wbGV0aW9uLiAgVGhl IG93bmVyIG9ubHkKcHJvbWlzZXMgdG8gYWR2YW5jZSBpdCB0byBQR0FJT19IU19TVUJNSVRURUQu ICBUaGUgd2FpdGVyIG5lZWRzIHRvIGJlCnByZXBhcmVkIHRvIGNhbGwgLT53YWl0X29uZSgpIGl0 c2VsZiBvbmNlIHRoZSBJTyBpcyBzdWJtaXR0ZWQgaW4gb3JkZXIKdG8gZ3VhcmFudGVlIHByb2dy ZXNzIGFuZCBhdm9pZCBkZWFkbG9ja3Mgb24gSU8gbWV0aG9kcyB0aGF0IHByb3ZpZGUKLT53YWl0 X29uZSgpLgoKSW50cm9kdWNlIGEgbmV3IHBlci1iYWNrZW5kIGNvbmRpdGlvbiB2YXJpYWJsZSBz dWJtaXRfY3YsIHdva2VuIGJ5IGJ5CnBnYWlvX3N1Ym1pdF9zdGFnZSgpLCBhbmQgdXNlIGl0IHRv IHdhaXQgZm9yIHRoZSBzdGF0ZSB0byBhZHZhbmNlLiAgVGhlCm5ldyBicm9hZGNhc3QgZG9lc24n dCBzZWVtIHRvIGNhdXNlIGFueSBtZWFzdXJhYmxlIHNsb3dkb3duLCBzbyBpZGVhcwpmb3Igb3B0 aW1pemluZyB0aGUgY29tbW9uIG5vLXdhaXRlcnMgY2FzZSB3ZXJlIGFiYW5kb25lZCBmb3Igbm93 LgoKSXQgbWF5IG5vdCBiZSBwb3NzaWJsZSB0byByZWFjaCBhbnkgcmVhbCBkZWFkbG9jayB3aXRo IGV4aXN0aW5nIEFJTwp1c2VycywgYnV0IHRoYXQgc2l0dWF0aW9uIGNvdWxkIGNoYW5nZS4gIFRo ZXJlJ3MgYWxzbyBubyByZWFzb24gdGhlCndhaXRlciBzaG91bGRuJ3QgYmVnaW4gdG8gd2FpdCB2 aWEgdGhlIElPIG1ldGhvZCBhcyBzb29uIGFzIHBvc3NpYmxlCmV2ZW4gd2l0aG91dCBhIGRlYWRs b2NrLgoKUGlja2VkIHVwIGJ5IHRlc3RpbmcgYSBwcm9wb3NlZCBJTyBtZXRob2QgdGhhdCBoYXMg LT53YWl0X29uZSgpLCBsaWtlCmlvX21ldGhvZD1pb191cmluZywgYW5kIGNvZGUgcmV2aWV3LgoK QmFja3BhdGNoLXRocm91Z2g6IDE4ClJldmlld2VkLWJ5OiBBbmRyZXMgRnJldW5kIDxhbmRyZXNA YW5hcmF6ZWwuZGU+CkRpc2N1c3Npb246IGh0dHBzOi8vcG9zdGdyLmVzL20vQ0ElMkJoVUtHJTJC bVpZclNkbmhrLVhyQllPMThIODI5Szc3UzlnTUtVc3lrT2lUSnRxQjQzZyU0MG1haWwuZ21haWwu Y29tCi0tLQogc3JjL2luY2x1ZGUvc3RvcmFnZS9haW9faW50ZXJuYWwuaCAgICAgICAgICAgIHwg IDcgKysrCiBzcmMvYmFja2VuZC9zdG9yYWdlL2Fpby9haW8uYyAgICAgICAgICAgICAgICAgfCA1 MCArKysrKysrKysrKysrKysrLS0tCiBzcmMvYmFja2VuZC9zdG9yYWdlL2Fpby9haW9faW5pdC5j ICAgICAgICAgICAgfCAgMSArCiAuLi4vdXRpbHMvYWN0aXZpdHkvd2FpdF9ldmVudF9uYW1lcy50 eHQgICAgICAgfCAgMSArCiA0IGZpbGVzIGNoYW5nZWQsIDUxIGluc2VydGlvbnMoKyksIDggZGVs ZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9haW9faW50ZXJuYWwu aCBiL3NyYy9pbmNsdWRlL3N0b3JhZ2UvYWlvX2ludGVybmFsLmgKaW5kZXggMzNlMWUyZGMwLi5k ZWVjODNiZDAgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3N0b3JhZ2UvYWlvX2ludGVybmFsLmgK KysrIGIvc3JjL2luY2x1ZGUvc3RvcmFnZS9haW9faW50ZXJuYWwuaApAQCAtMjE0LDYgKzIxNCwx MyBAQCB0eXBlZGVmIHN0cnVjdCBQZ0Fpb0JhY2tlbmQKIAl1aW50MTYJCW51bV9zdGFnZWRfaW9z OwogCVBnQWlvSGFuZGxlICpzdGFnZWRfaW9zW1BHQUlPX1NVQk1JVF9CQVRDSF9TSVpFXTsKIAor CS8qCisJICogT3RoZXIgYmFja2VuZHMgc29tZXRpbWVzIG5lZWQgdG8gd2FpdCBmb3IgdGhlIG93 bmluZyBiYWNrZW5kIHRvIHN1Ym1pdC4KKwkgKiBUaGUgcGVyLUlPIENWIHdvdWxkIHdvcmsgZm9y IHRoYXQgcHVycG9zZSwgYnV0IGEgcGVyLWJhY2tlbmQgQ1YgYWxsb3dzCisJICogZm9yIGp1c3Qg b25lIGJyb2FkY2FzdCBwZXIgc3VibWl0dGVkIGJhdGNoLgorCSAqLworCUNvbmRpdGlvblZhcmlh YmxlIHN1Ym1pdF9jdjsKKwogCS8qCiAJICogTGlzdCBvZiBpbi1mbGlnaHQgSU9zLiBBbHNvIGNv bnRhaW5zIElPcyB0aGF0IGFyZW4ndCBzdHJpY3RseSBzcGVha2luZwogCSAqIGluLWZsaWdodCBh bnltb3JlLCBidXQgaGF2ZSBiZWVuIHdhaXRlZC1mb3IgYW5kIGNvbXBsZXRlZCBieSBhbm90aGVy CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9zdG9yYWdlL2Fpby9haW8uYyBiL3NyYy9iYWNrZW5k L3N0b3JhZ2UvYWlvL2Fpby5jCmluZGV4IDcwMDlmYjdmNi4uY2UyZjczYmZmIDEwMDY0NAotLS0g YS9zcmMvYmFja2VuZC9zdG9yYWdlL2Fpby9haW8uYworKysgYi9zcmMvYmFja2VuZC9zdG9yYWdl L2Fpby9haW8uYwpAQCAtNTkzLDYgKzU5MywxNiBAQCBwZ2Fpb19pb193YXNfcmVjeWNsZWQoUGdB aW9IYW5kbGUgKmlvaCwgdWludDY0IHJlZl9nZW5lcmF0aW9uLCBQZ0Fpb0hhbmRsZVN0YXRlCiAJ cmV0dXJuIGlvaC0+Z2VuZXJhdGlvbiAhPSByZWZfZ2VuZXJhdGlvbjsKIH0KIAorLyoKKyAqIFdo ZXRoZXIgd2UgbmVlZCB0byB3YWl0IHZpYSB0aGUgSU8gbWV0aG9kLiBEb24ndCBjaGVjayB2aWEg dGhlIElPIG1ldGhvZCBpZgorICogdGhlIGlzc3VpbmcgYmFja2VuZCBpcyBleGVjdXRpbmcgdGhl IElPIHN5bmNocm9ub3VzbHkuCisgKi8KK3N0YXRpYyBib29sCitwZ2Fpb19pb19uZWVkc193YWl0 X29uZShQZ0Fpb0hhbmRsZSAqaW9oKQoreworCXJldHVybiBwZ2Fpb19tZXRob2Rfb3BzLT53YWl0 X29uZSAmJiAhKGlvaC0+ZmxhZ3MgJiBQR0FJT19IRl9TWU5DSFJPTk9VUyk7Cit9CisKIC8qCiAg KiBXYWl0IGZvciBJTyB0byBjb21wbGV0ZS4gRXh0ZXJuYWwgY29kZSBzaG91bGQgbmV2ZXIgdXNl IHRoaXMsIG91dHNpZGUgb2YKICAqIHRoZSBBSU8gc3Vic3lzdGVtIHdhaXRzIGFyZSBvbmx5IGFs bG93ZWQgdmlhIHBnYWlvX3dyZWZfd2FpdCgpLgpAQCAtNjMyLDIzICs2NDIsMzggQEAgcGdhaW9f aW9fd2FpdChQZ0Fpb0hhbmRsZSAqaW9oLCB1aW50NjQgcmVmX2dlbmVyYXRpb24pCiAJCQkJZWxv ZyhFUlJPUiwgIklPIGluIHdyb25nIHN0YXRlOiAlZCIsIHN0YXRlKTsKIAkJCQlicmVhazsKIAot CQkJY2FzZSBQR0FJT19IU19TVUJNSVRURUQ6CisJCQljYXNlIFBHQUlPX0hTX0RFRklORUQ6CisJ CQljYXNlIFBHQUlPX0hTX1NUQUdFRDoKIAogCQkJCS8qCi0JCQkJICogSWYgd2UgbmVlZCB0byB3 YWl0IHZpYSB0aGUgSU8gbWV0aG9kLCBkbyBzbyBub3cuIERvbid0Ci0JCQkJICogY2hlY2sgdmlh IHRoZSBJTyBtZXRob2QgaWYgdGhlIGlzc3VpbmcgYmFja2VuZCBpcyBleGVjdXRpbmcKLQkJCQkg KiB0aGUgSU8gc3luY2hyb25vdXNseS4KKwkJCQkgKiBUaGUgb3duZXIgaGFzbid0IHN1Ym1pdHRl ZCB0aGUgSU8geWV0LiBJZiB3ZSBuZWVkIHRvIHdhaXQKKwkJCQkgKiB2aWEgdGhlIElPIG1ldGhv ZCwgd2FpdCBmb3Igc3VibWlzc2lvbiwgZ2l2aW5nIHRoaXMgYmFja2VuZAorCQkJCSAqIHRoZSBj aGFuY2UgdG8gY2FsbCAtPndhaXRfb25lKCkuCiAJCQkJICovCi0JCQkJaWYgKHBnYWlvX21ldGhv ZF9vcHMtPndhaXRfb25lICYmICEoaW9oLT5mbGFncyAmIFBHQUlPX0hGX1NZTkNIUk9OT1VTKSkK KwkJCQlpZiAocGdhaW9faW9fbmVlZHNfd2FpdF9vbmUoaW9oKSkKKwkJCQl7CisJCQkJCVBnQWlv QmFja2VuZCAqYmFja2VuZCA9ICZwZ2Fpb19jdGwtPmJhY2tlbmRfc3RhdGVbaW9oLT5vd25lcl9w cm9jbm9dOworCisJCQkJCUNvbmRpdGlvblZhcmlhYmxlUHJlcGFyZVRvU2xlZXAoJmJhY2tlbmQt PnN1Ym1pdF9jdik7CisJCQkJCXdoaWxlICghcGdhaW9faW9fd2FzX3JlY3ljbGVkKGlvaCwgcmVm X2dlbmVyYXRpb24sICZzdGF0ZSkgJiYKKwkJCQkJCSAgIChzdGF0ZSA9PSBQR0FJT19IU19ERUZJ TkVEIHx8CisJCQkJCQkJc3RhdGUgPT0gUEdBSU9fSFNfU1RBR0VEKSkKKwkJCQkJCUNvbmRpdGlv blZhcmlhYmxlU2xlZXAoJmJhY2tlbmQtPnN1Ym1pdF9jdiwgV0FJVF9FVkVOVF9BSU9fSU9fU1VC TUlUKTsKKwkJCQkJQ29uZGl0aW9uVmFyaWFibGVDYW5jZWxTbGVlcCgpOworCQkJCQljb250aW51 ZTsKKwkJCQl9CisJCQkJcGdfZmFsbHRocm91Z2g7CisKKwkJCWNhc2UgUEdBSU9fSFNfU1VCTUlU VEVEOgorCisJCQkJLyogSWYgd2UgbmVlZCB0byB3YWl0IHZpYSB0aGUgSU8gbWV0aG9kLCBkbyBz byBub3cuICovCisJCQkJaWYgKHBnYWlvX2lvX25lZWRzX3dhaXRfb25lKGlvaCkpCiAJCQkJewog CQkJCQlwZ2Fpb19tZXRob2Rfb3BzLT53YWl0X29uZShpb2gsIHJlZl9nZW5lcmF0aW9uKTsKIAkJ CQkJY29udGludWU7CiAJCQkJfQogCQkJCXBnX2ZhbGx0aHJvdWdoOwogCi0JCQkJLyogd2FpdGlu ZyBmb3Igb3duZXIgdG8gc3VibWl0ICovCi0JCQljYXNlIFBHQUlPX0hTX0RFRklORUQ6Ci0JCQlj YXNlIFBHQUlPX0hTX1NUQUdFRDoKIAkJCQkvKiB3YWl0aW5nIGZvciByZWFwZXIgdG8gY29tcGxl dGUgKi8KIAkJCQkvKiBmYWxsdGhyb3VnaCAqLwogCQkJY2FzZSBQR0FJT19IU19DT01QTEVURURf SU86CkBAIC0xMjI2LDYgKzEyNTEsMTUgQEAgcGdhaW9fc3VibWl0X3N0YWdlZCh2b2lkKQogCiAJ cGdhaW9fbXlfYmFja2VuZC0+bnVtX3N0YWdlZF9pb3MgPSAwOwogCisJLyoKKwkgKiBXYWtlIGFu eSBiYWNrZW5kIHRoYXQgc3RhcnRlZCB3YWl0aW5nIGZvciBhbnkgb2YgdGhlc2UgSU9zIGJlZm9y ZQorCSAqIHN1Ym1pc3Npb24sIGlmIGl0IGlzIG5lY2Vzc2FyeSB0byBjYWxsIC0+d2FpdF9vbmUo KSB0byBndWFyYW50ZWUKKwkgKiBwcm9ncmVzcyB3aXRoIHRoZSBjb25maWd1cmVkIElPIG1ldGhv ZC4gIE9uIGl0cyBzaWRlLCBwZ2Fpb19pb193YWl0KCkKKwkgKiBvbmx5IHdhaXRzIGZvciBzdWJt aXRfY3Ygb24gSU8gbWV0aG9kcyBuZWVkaW5nIHRoYXQuCisJICovCisJaWYgKHBnYWlvX21ldGhv ZF9vcHMtPndhaXRfb25lKQorCQlDb25kaXRpb25WYXJpYWJsZUJyb2FkY2FzdCgmcGdhaW9fbXlf YmFja2VuZC0+c3VibWl0X2N2KTsKKwogCXBnYWlvX2RlYnVnKERFQlVHNCwKIAkJCQkiYWlvOiBz dWJtaXR0ZWQgJWQgSU9zIiwKIAkJCQl0b3RhbF9zdWJtaXR0ZWQpOwpkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvc3RvcmFnZS9haW8vYWlvX2luaXQuYyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYWlv L2Fpb19pbml0LmMKaW5kZXggZDNjNjhkOGIwLi5jMjA5NWVmNzcgMTAwNjQ0Ci0tLSBhL3NyYy9i YWNrZW5kL3N0b3JhZ2UvYWlvL2Fpb19pbml0LmMKKysrIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9h aW8vYWlvX2luaXQuYwpAQCAtMTg0LDYgKzE4NCw3IEBAIEFpb1NobWVtSW5pdCh2b2lkKQogCiAJ CWRjbGlzdF9pbml0KCZicy0+aWRsZV9pb3MpOwogCQltZW1zZXQoYnMtPnN0YWdlZF9pb3MsIDAs IHNpemVvZihQZ0Fpb0hhbmRsZSAqKSAqIFBHQUlPX1NVQk1JVF9CQVRDSF9TSVpFKTsKKwkJQ29u ZGl0aW9uVmFyaWFibGVJbml0KCZicy0+c3VibWl0X2N2KTsKIAkJZGNsaXN0X2luaXQoJmJzLT5p bl9mbGlnaHRfaW9zKTsKIAogCQkvKiBpbml0aWFsaXplIHBlci1iYWNrZW5kIElPcyAqLwpkaWZm IC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvYWN0aXZpdHkvd2FpdF9ldmVudF9uYW1lcy50eHQg Yi9zcmMvYmFja2VuZC91dGlscy9hY3Rpdml0eS93YWl0X2V2ZW50X25hbWVzLnR4dAppbmRleCAw YTZkMTZmODEuLjk1ODMxY2I3NyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvYWN0aXZp dHkvd2FpdF9ldmVudF9uYW1lcy50eHQKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWN0aXZpdHkv d2FpdF9ldmVudF9uYW1lcy50eHQKQEAgLTE5OSw2ICsxOTksNyBAQCBBQklfY29tcGF0aWJpbGl0 eToKIFNlY3Rpb246IENsYXNzTmFtZSAtIFdhaXRFdmVudElPCiAKIEFJT19JT19DT01QTEVUSU9O CSJXYWl0aW5nIGZvciBhbm90aGVyIHByb2Nlc3MgdG8gY29tcGxldGUgSU8uIgorQUlPX0lPX1NV Qk1JVAkiV2FpdGluZyBmb3IgYW5vdGhlciBwcm9jZXNzIHRvIHN1Ym1pdCBJTy4iCiBBSU9fSU9f VVJJTkdfU1VCTUlUCSJXYWl0aW5nIGZvciBJTyBzdWJtaXNzaW9uIHZpYSBpb191cmluZy4iCiBB SU9fSU9fVVJJTkdfRVhFQ1VUSU9OCSJXYWl0aW5nIGZvciBJTyBleGVjdXRpb24gdmlhIGlvX3Vy aW5nLiIKIEJBU0VCQUNLVVBfUkVBRAkiV2FpdGluZyBmb3IgYmFzZSBiYWNrdXAgdG8gcmVhZCBm cm9tIGEgZmlsZS4iCi0tIAoyLjUzLjAKCg== --0000000000002fe31c064eaff221 Content-Type: application/octet-stream; name="v23-0006-Allow-read_stream_reset-to-not-wait-for-IO-compl.patch" Content-Disposition: attachment; filename="v23-0006-Allow-read_stream_reset-to-not-wait-for-IO-compl.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mnlbta332 RnJvbSA3NmFkODgzNWIzYzM0MzA3NzE2MGY5MDUzOWVlMTBlMDVlMzFmYjM0IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbmRyZXMgRnJldW5kIDxhbmRyZXNAYW5hcmF6ZWwuZGU+CkRh dGU6IFN1biwgNSBBcHIgMjAyNiAwMDo0Mzo1NCAtMDQwMApTdWJqZWN0OiBbUEFUQ0ggdjIzIDYv OF0gQWxsb3cgcmVhZF9zdHJlYW1fcmVzZXQoKSB0byBub3Qgd2FpdCBmb3IgSU8KIGNvbXBsZXRp b24KCk5vdCB3YWl0aW5nIGZvciBJTyBkdXJpbmcgcmVhZF9zdHJlYW1fcmVzZXQoKSBjYW4gYmUg aW1wb3J0YW50IGZvciBwZXJmb3JtYW5jZQppbiBjYXNlcyB3aGVyZSByZWFkIHN0cmVhbXMgYXJl IGZyZXF1ZW50bHkgcmVzZXQgYmVmb3JlIHRoZSBlbmQgaXMKcmVhY2hlZC4gQ3VycmVudCB1c2Vy cyBkbyBub3QgY29tbW9ubHkgZG8gdGhhdCwgYnV0IHRoZSB1cGNvbWluZyB3b3JrIHRvIHVzZSBh CnJlYWQgc3RyZWFtIHRvIHByZWZldGNoIHRhYmxlIGJsb2NrcyBhcyBwYXJ0IG9mIGluZGV4IHNj YW5zIGNhbiBkbyBzbwpmcmVxdWVudGx5IGluIHNvbWUgcXVlcnkgcGF0dGVybnMuIEUuZy4gaWYg dGhlcmUgaXMgYW4gaW5kZXggc2NhbiBvbiB0aGUgaW5uZXIKc2lkZSBvZiBhIG5lc3RlZCBsb29w IGFudGlqb2luLgoKVGhpcyB0YWtlcyBhIGJpdCBvZiBjYXJlIHRvIGRvIHJpZ2h0LiBKdXN0IGlu dHJvZHVjaW5nIHN1cHBvcnQgZm9yIGFiYW5kb25pbmcKYSBBSU8gaGFuZGxlIGNvdWxkIGxlYWQg dG8gdGhlIElPJ3MgY29tcGxldGlvbiBub3QgYmVpbmcgcHJvY2Vzc2VkIHVudGlsIHRoZQpiYWNr ZW5kIGV4aXRzLiBUaGF0J3MgYmFkIGJlY2F1c2UgaXQgd291bGQgbGVhZCB0byByZXNvdXJjZXMg aGVsZCBvbnRvIGZvciB0aGUKSU8gKGUuZy4gYnVmZmVyIHBpbnMpIG5vdCBiZWluZyByZWxlYXNl ZCBhbmQgdGhlIGhhbmRsZSBzaG93aW5nIHVwIGluIHBnX2Fpb3MuCgpUbyBhdm9pZCB0aGF0LCB0 aGUgZXhpc3RpbmcgcmVzb3duZXIgY2xlYW51cCBpcyBjaGFuZ2VkIHRvIHdhaXQgZm9yIHRoZSBJ TydzCmNvbXBsZXRpb24sIHdoaWNoIGd1YXJhbnRlZXMgdGhhdCBieSB0aGUgZW5kIG9mIHRoZSBz dGF0ZW1lbnQgdGhlIElPIGhhcwpjb21wbGV0ZWQuIFdlIG1pZ2h0IGV2ZW50dWFsbHkgd2FudCB0 byByZWxheCB0aGF0IGZvciBzb21lIG9wZXJhdGlvbnMgKGUuZy4sCmZvciBiYWNrZ3JvdW5kIFdB TCB3cml0ZXMgb3Igb3Bwb3J0dW5pc3RpYyBwcmVmZXRjaGluZykuCgpEaXNjdXNzaW9uOiBodHRw czovL3Bvc3Rnci5lcy9tL2YzeHhmcmthZmp4cHlxeHl3Y3hyaWN4Z3lpemppcmZjZXljaHl4c2du N2J3anA1ZWRhQGt3YmR1aHk3dGZtdQotLS0KIHNyYy9pbmNsdWRlL3N0b3JhZ2UvYWlvLmggICAg ICAgICAgICAgICAgICAgfCAgIDIgKwogc3JjL2luY2x1ZGUvc3RvcmFnZS9idWZtZ3IuaCAgICAg ICAgICAgICAgICB8ICAgMSArCiBzcmMvYmFja2VuZC9zdG9yYWdlL2Fpby9haW8uYyAgICAgICAg ICAgICAgIHwgMTAyICsrKysrKysrKysrKysrKystLS0KIHNyYy9iYWNrZW5kL3N0b3JhZ2UvYWlv L3JlYWRfc3RyZWFtLmMgICAgICAgfCAgMzEgKysrKy0tCiBzcmMvYmFja2VuZC9zdG9yYWdlL2J1 ZmZlci9idWZtZ3IuYyAgICAgICAgIHwgIDM0ICsrKysrKysKIHNyYy90ZXN0L21vZHVsZXMvdGVz dF9haW8vdC8wMDFfYWlvLnBsICAgICAgfCAxMDcgKysrKysrKysrKysrKysrKysrKysKIHNyYy90 ZXN0L21vZHVsZXMvdGVzdF9haW8vdGVzdF9haW8tLTEuMC5zcWwgfCAgIDIgKy0KIHNyYy90ZXN0 L21vZHVsZXMvdGVzdF9haW8vdGVzdF9haW8uYyAgICAgICAgfCAgMzggKysrKystLQogOCBmaWxl cyBjaGFuZ2VkLCAyODUgaW5zZXJ0aW9ucygrKSwgMzIgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0 IGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9haW8uaCBiL3NyYy9pbmNsdWRlL3N0b3JhZ2UvYWlvLmgK aW5kZXggZWM1NDNiNzg0Li5hYjdmYWQxMzAgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3N0b3Jh Z2UvYWlvLmgKKysrIGIvc3JjL2luY2x1ZGUvc3RvcmFnZS9haW8uaApAQCAtMzI4LDYgKzMyOCw4 IEBAIGV4dGVybiBpbnQJcGdhaW9fd3JlZl9nZXRfaWQoUGdBaW9XYWl0UmVmICppb3cpOwogZXh0 ZXJuIHZvaWQgcGdhaW9fd3JlZl93YWl0KFBnQWlvV2FpdFJlZiAqaW93KTsKIGV4dGVybiBib29s IHBnYWlvX3dyZWZfY2hlY2tfZG9uZShQZ0Fpb1dhaXRSZWYgKmlvdyk7CiAKK2V4dGVybiB2b2lk IHBnYWlvX3dyZWZfYWJhbmRvbihQZ0Fpb1dhaXRSZWYgKmlvdyk7CisKIAogCiAvKiAtLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9idWZtZ3Iu aCBiL3NyYy9pbmNsdWRlL3N0b3JhZ2UvYnVmbWdyLmgKaW5kZXggYWE2MWEzOWQ5Li4wMDVkMDk5 MDUgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3N0b3JhZ2UvYnVmbWdyLmgKKysrIGIvc3JjL2lu Y2x1ZGUvc3RvcmFnZS9idWZtZ3IuaApAQCAtMjUyLDYgKzI1Miw3IEBAIGV4dGVybiBib29sIFN0 YXJ0UmVhZEJ1ZmZlcnMoUmVhZEJ1ZmZlcnNPcGVyYXRpb24gKm9wZXJhdGlvbiwKIAkJCQkJCQkg aW50ICpuYmxvY2tzLAogCQkJCQkJCSBpbnQgZmxhZ3MpOwogZXh0ZXJuIGJvb2wgV2FpdFJlYWRC dWZmZXJzKFJlYWRCdWZmZXJzT3BlcmF0aW9uICpvcGVyYXRpb24pOworZXh0ZXJuIHZvaWQgQWJh bmRvblJlYWRCdWZmZXJzKFJlYWRCdWZmZXJzT3BlcmF0aW9uICpvcGVyYXRpb24pOwogCiBleHRl cm4gdm9pZCBSZWxlYXNlQnVmZmVyKEJ1ZmZlciBidWZmZXIpOwogZXh0ZXJuIHZvaWQgVW5sb2Nr UmVsZWFzZUJ1ZmZlcihCdWZmZXIgYnVmZmVyKTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3N0 b3JhZ2UvYWlvL2Fpby5jIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9haW8vYWlvLmMKaW5kZXggOGY3 ZTI2NjA3Li43MDA5ZmI3ZjYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYWlvL2Fp by5jCisrKyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYWlvL2Fpby5jCkBAIC0xNTIsMTEgKzE1Miwx NSBAQCBjb25zdCBJb01ldGhvZE9wcyAqcGdhaW9fbWV0aG9kX29wczsKICAqIG9wZXJhdGlvbiBz dWNjZWVkZWQgYW5kIGRldGFpbHMgYWJvdXQgdGhlIGZpcnN0IGZhaWx1cmUsIGlmIGFueS4gVGhl IGVycm9yCiAgKiBjYW4gYmUgcmFpc2VkIC8gbG9nZ2VkIHdpdGggcGdhaW9fcmVzdWx0X3JlcG9y dCgpLgogICoKLSAqIFRoZSBsaWZldGltZSBvZiB0aGUgbWVtb3J5IHBvaW50ZWQgdG8gYmUgKnJl dCBuZWVkcyB0byBiZSBhdCBsZWFzdCBhcyBsb25nCi0gKiBhcyB0aGUgcGFzc2VkIGluIHJlc293 bmVyLiBJZiB0aGUgcmVzb3duZXIgcmVsZWFzZXMgcmVzb3VyY2VzIGJlZm9yZSB0aGUgSU8KLSAq IGNvbXBsZXRlcyAodHlwaWNhbGx5IGR1ZSB0byBhbiBlcnJvciksIHRoZSByZWZlcmVuY2UgdG8g KnJldCB3aWxsIGJlCi0gKiBjbGVhcmVkLiBJbiBjYXNlIG9mIHJlc293bmVyIGNsZWFudXAgKnJl dCB3aWxsIG5vdCBiZSB1cGRhdGVkIHdpdGggdGhlCi0gKiByZXN1bHRzIG9mIHRoZSBJTyBvcGVy YXRpb24uCisgKiBUaGUgbGlmZXRpbWUgb2YgdGhlIG1lbW9yeSBwb2ludGVkIHRvIGJ5ICpyZXQg bmVlZHMgdG8gYmUgYXQgbGVhc3QgYXMgbG9uZworICogYXMgdGhlIHBhc3NlZCBpbiByZXNvd25l ci4KKyAqCisgKiBJZiB0aGUgcmVzb3duZXIgcmVsZWFzZXMgcmVzb3VyY2VzIGJlZm9yZSB0aGUg SU8gY29tcGxldGVzICh0eXBpY2FsbHkgZHVlCisgKiB0byBhbiBlcnJvciksIHRoZSByZWZlcmVu Y2UgdG8gKnJldCB3aWxsIGJlIGNsZWFyZWQuIEluIGNhc2Ugb2YgcmVzb3duZXIKKyAqIGNsZWFu dXAgKnJldCB3aWxsIG5vdCBiZSB1cGRhdGVkIHdpdGggdGhlIHJlc3VsdHMgb2YgdGhlIElPIG9w ZXJhdGlvbi4KKyAqCisgKiBJZiB0aGUgY2FsbGVyIGxvc2VzIGludGVyZXN0IGluIHRoZSBJTyBi ZWZvcmUgY29tcGxldGlvbgorICogcGdhaW9fd3JlZl9hYmFuZG9uKCkgY2FuIGJlIHVzZWQuCiAg Ki8KIFBnQWlvSGFuZGxlICoKIHBnYWlvX2lvX2FjcXVpcmUoc3RydWN0IFJlc291cmNlT3duZXJE YXRhICpyZXNvd25lciwgUGdBaW9SZXR1cm4gKnJldCkKQEAgLTI3OCw2ICsyODIsMTQgQEAgcGdh aW9faW9fcmVsZWFzZV9yZXNvd25lcihkbGlzdF9ub2RlICppb2hfbm9kZSwgYm9vbCBvbl9lcnJv cikKIAlSZXNvdXJjZU93bmVyRm9yZ2V0QWlvSGFuZGxlKGlvaC0+cmVzb3duZXIsICZpb2gtPnJl c293bmVyX25vZGUpOwogCWlvaC0+cmVzb3duZXIgPSBOVUxMOwogCisJLyoKKwkgKiBOZWVkIHRv IHVucmVnaXN0ZXIgdGhlIHJlcG9ydGluZyBvZiB0aGUgSU8ncyByZXN1bHQsIHRoZSBtZW1vcnkg aXQncworCSAqIHJlZmVyZW5jaW5nIGxpa2VseSBoYXMgZ29uZSBhd2F5LiBEbyBzbyBiZWZvcmUg cG90ZW50aWFsbHkgd2FpdGluZworCSAqIGJlbG93LCBhcyB0aGF0IGNvdWxkIGNhdXNlIHRoZSB1 bmRlc2lyZWQgd3JpdGVzLgorCSAqLworCWlmIChpb2gtPnJlcG9ydF9yZXR1cm4pCisJCWlvaC0+ cmVwb3J0X3JldHVybiA9IE5VTEw7CisKIAlzd2l0Y2ggKChQZ0Fpb0hhbmRsZVN0YXRlKSBpb2gt PnN0YXRlKQogCXsKIAkJY2FzZSBQR0FJT19IU19JRExFOgpAQCAtMzAwLDIyICszMTIsMzIgQEAg cGdhaW9faW9fcmVsZWFzZV9yZXNvd25lcihkbGlzdF9ub2RlICppb2hfbm9kZSwgYm9vbCBvbl9l cnJvcikKIAkJCWlmICghb25fZXJyb3IpCiAJCQkJZWxvZyhXQVJOSU5HLCAiQUlPIGhhbmRsZSB3 YXMgbm90IHN1Ym1pdHRlZCIpOwogCQkJcGdhaW9fc3VibWl0X3N0YWdlZCgpOwotCQkJYnJlYWs7 CisKKwkJCS8qIG5vdyB0aGF0IHRoZSBJTyBpcyBzdWJtaXR0ZWQsIG5lZWQgdG8gd2FpdCAqLwor CQkJcGdfZmFsbHRocm91Z2g7CiAJCWNhc2UgUEdBSU9fSFNfU1VCTUlUVEVEOgogCQljYXNlIFBH QUlPX0hTX0NPTVBMRVRFRF9JTzoKIAkJY2FzZSBQR0FJT19IU19DT01QTEVURURfU0hBUkVEOgog CQljYXNlIFBHQUlPX0hTX0NPTVBMRVRFRF9MT0NBTDoKLQkJCS8qIHRoaXMgaXMgZXhwZWN0ZWQg dG8gaGFwcGVuICovCisKKwkJCS8qCisJCQkgKiBUaGlzIGlzIGV4cGVjdGVkIHRvIGhhcHBlbiwg ZS5nLiBhZnRlciBhbiBlcnJvciBvciBhZnRlcgorCQkJICogcGdhaW9fd3JlZl9hYmFuZG9uKCkg d2FzIGNhbGxlZC4KKwkJCSAqCisJCQkgKiBGb3Igbm93IGFsd2F5cyB3YWl0IGZvciB0aGUgSU8n cyBjb21wbGV0aW9uIGR1cmluZyByZXNvd25lcgorCQkJICogY2xlYW51cC4gVGhpcyBwcm92aWRl cyBhIGJvdW5kIG9uIGhvdyBsb25nIGFmdGVyIGFuIGVycm9yIG9yCisJCQkgKiBwZ2Fpb193cmVm X2FiYW5kb24oKSBhbiBJTyBoYW5kbGUgd2lsbCBzaG93IHVwIGFzIHVzZWQgYW5kIGhvdworCQkJ ICogbG9uZyBhbiB1bmNvbXBsZXRlZCBJTyBjYW4gY2F1c2UgcmVzb3VyY2VzIHRvIGJlIHJldGFp bmVkLgorCQkJICoKKwkJCSAqIEl0IGlzIHF1aXRlIHBvc3NpYmxlIHRoYXQgd2UgZXZlbnR1YWxs eSB3YW50IHRvIHN1cHBvcnQgSU8KKwkJCSAqIG9wZXJhdGlvbnMgdGhhdCBsYXN0IGxvbmdlciwg ZS5nLiBmb3IgV0FMIHdyaXRlcyBpbiB0aGUKKwkJCSAqIGJhY2tncm91bmQuIElmIHNvIHdlIHdp bGwgZWl0aGVyIG5lZWQgdG8gdXNlIGEgbG9uZ2VyIGxpdmVkCisJCQkgKiByZXNvd25lciBvciBh ZGQgYSBmbGFnIGNvbnRyb2xsaW5nIHdoZW4gdGhpcyBjbGVhbnVwIGhhcHBlbnMuCisJCQkgKi8K KwkJCXBnYWlvX2lvX3dhaXQoaW9oLCBpb2gtPmdlbmVyYXRpb24pOwogCQkJYnJlYWs7CiAJfQog Ci0JLyoKLQkgKiBOZWVkIHRvIHVucmVnaXN0ZXIgdGhlIHJlcG9ydGluZyBvZiB0aGUgSU8ncyBy ZXN1bHQsIHRoZSBtZW1vcnkgaXQncwotCSAqIHJlZmVyZW5jaW5nIGxpa2VseSBoYXMgZ29uZSBh d2F5LgotCSAqLwotCWlmIChpb2gtPnJlcG9ydF9yZXR1cm4pCi0JCWlvaC0+cmVwb3J0X3JldHVy biA9IE5VTEw7Ci0KIAlSRVNVTUVfSU5URVJSVVBUUygpOwogfQogCkBAIC0xMDUwLDYgKzEwNzIs NTggQEAgcGdhaW9fd3JlZl9jaGVja19kb25lKFBnQWlvV2FpdFJlZiAqaW93KQogCXJldHVybiBm YWxzZTsKIH0KIAorLyoKKyAqIERlY2xhcmUgdGhhdCBhIHdhaXQgcmVmZXJlbmNlIHRvIGFuIElP LCBzdGFydGVkIGJ5IHRoaXMgYmFja2VuZCwgaXMgbm90IG9mCisgKiBpbnRlcmVzdCB0byB0aGlz IGJhY2tlbmQgYW55bW9yZS4gT25jZSBjYWxsZWQsIHRoZSBQZ0Fpb1JldHVybiAqcmV0IHBhc3Nl ZAorICogdG8gcGdhaW9faW9fYWNxdWlyZVtfbmJdKCkgd2lsbCBub3QgYmUgdXBkYXRlZCBhbnlt b3JlIGFuZCB0aHVzIGNhbiBiZQorICogZnJlZWQuCisgKi8KK3ZvaWQKK3BnYWlvX3dyZWZfYWJh bmRvbihQZ0Fpb1dhaXRSZWYgKmlvdykKK3sKKwl1aW50NjQJCXJlZl9nZW5lcmF0aW9uOworCWJv b2wJCWFtX293bmVyOworCVBnQWlvSGFuZGxlICppb2g7CisJUGdBaW9IYW5kbGVTdGF0ZSBzdGF0 ZTsKKworCWlvaCA9IHBnYWlvX2lvX2Zyb21fd3JlZihpb3csICZyZWZfZ2VuZXJhdGlvbik7CisK KwlhbV9vd25lciA9IGlvaC0+b3duZXJfcHJvY25vID09IE15UHJvY051bWJlcjsKKworCS8qCisJ ICogSXQgaXMgc2FmZSB0byBwZXJmb3JtIHRoaXMgY2hlY2sgYmVmb3JlIGNoZWNraW5nIGlmIHRo ZSBJTyB3YXMgcmVjeWNsZWQKKwkgKiAoYW5kIGJlZm9yZSB3ZSBob2xkIGludGVycnVwdHMpIGFz IHRoZSBvd25lciBvZiBhbiBJTyBjYW5ub3QgY2hhbmdlLgorCSAqLworCWlmICghYW1fb3duZXIp CisJCWVsb2coRVJST1IsICJvbmx5IElPcyBvd25lZCBieSBjdXJyZW50IGJhY2tlbmQgY2FuIGJl IGFiYW5kb25lZCIpOworCisJLyoKKwkgKiBUbyBlbnN1cmUgdGhhdCB0aGUgSU8gd29uJ3QgYmUg cmVjeWNsZWQgd2hpbGUgd2UgY2hlY2sgKGUuZy4gZHVyaW5nIHRoZQorCSAqIGVtaXNzaW9uIG9m IGEgZGVidWcgbWVzc2FnZSkuCisJICovCisJSE9MRF9JTlRFUlJVUFRTKCk7CisKKwlpZiAoIXBn YWlvX2lvX3dhc19yZWN5Y2xlZChpb2gsIHJlZl9nZW5lcmF0aW9uLCAmc3RhdGUpKQorCXsKKwkJ cGdhaW9fZGVidWdfaW8oREVCVUczLCBpb2gsCisJCQkJCSAgICJkaXNjYXJkaW5nIHJlc3VsdCAl cCwgcmVzb3duZXI6ICVwIiwKKwkJCQkJICAgaW9oLT5yZXBvcnRfcmV0dXJuLCBpb2gtPnJlc293 bmVyKTsKKworCQlpZiAoc3RhdGUgPCBQR0FJT19IU19TVUJNSVRURUQpCisJCQllbG9nKEVSUk9S LCAiYWJhbmRvbmluZyBJTyBpbiB3cm9uZyBzdGF0ZTogJWQiLCBzdGF0ZSk7CisKKwkJLyoKKwkJ ICogQWxsIHdlIG5lZWQgdG8gZG8gdG8gYWJhbmRvbiB0aGUgSU8gaXMgdG8gY2xlYXIgaXRzIHJl cG9ydF9yZXR1cm4KKwkJICogZmllbGQuIFdpdGhvdXQgdGhhdCB3ZSBjb3VsZCBlbmQgdXAgd3Jp dGluZyB0byBmcmVlZC9yZXVzZWQgbWVtb3J5CisJCSAqIHdoZW4gdGhlIElPIGNvbXBsZXRlcy4K KwkJICovCisJCWlmIChpb2gtPnJlcG9ydF9yZXR1cm4pCisJCQlpb2gtPnJlcG9ydF9yZXR1cm4g PSBOVUxMOworCX0KKworCVJFU1VNRV9JTlRFUlJVUFRTKCk7Cit9CisKIAogCiAvKiAtLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9haW8vcmVh ZF9zdHJlYW0uYyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYWlvL3JlYWRfc3RyZWFtLmMKaW5kZXgg MGI2Y2RmN2M4Li45YWIzMmM3N2YgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYWlv L3JlYWRfc3RyZWFtLmMKKysrIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9haW8vcmVhZF9zdHJlYW0u YwpAQCAtMTA5LDcgKzEwOSw4IEBAIHN0cnVjdCBSZWFkU3RyZWFtCiAJICogZm9yIElPIGNvbWJp bmluZyBldmVuIGluIGNhc2VzIHdoZXJlIHRoZSBJL08gc3Vic3lzdGVtIGNhbiBrZWVwIHVwIGF0 IGEKIAkgKiBsb3cgcmVhZC1haGVhZCBkaXN0YW5jZSwgYXMgZG9pbmcgbGFyZ2VyIElPcyBpcyBt b3JlIGVmZmljaWVudC4KIAkgKgotCSAqIFNldCB0byAwIHdoZW4gdGhlIGVuZCBvZiB0aGUgc3Ry ZWFtIGlzIHJlYWNoZWQuCisJICogU2V0IHRvIDAgd2hlbiB0aGUgZW5kIG9mIHRoZSBzdHJlYW0g aXMgcmVhY2hlZCBhbmQgdG8gLTEgd2hlbiB0aGUKKwkgKiBzdHJlYW0gaXMgcmVzZXQuCiAJICov CiAJaW50MTYJCWNvbWJpbmVfZGlzdGFuY2U7CiAJaW50MTYJCXJlYWRhaGVhZF9kaXN0YW5jZTsK QEAgLTQ3OSw4ICs0ODAsOCBAQCByZWFkX3N0cmVhbV9zdGFydF9wZW5kaW5nX3JlYWQoUmVhZFN0 cmVhbSAqc3RyZWFtKQogc3RhdGljIGlubGluZSBib29sCiByZWFkX3N0cmVhbV9zaG91bGRfbG9v a19haGVhZChSZWFkU3RyZWFtICpzdHJlYW0pCiB7Ci0JLyogSWYgdGhlIGNhbGxiYWNrIGhhcyBz aWduYWxlZCBlbmQtb2Ytc3RyZWFtLCB3ZSdyZSBkb25lICovCi0JaWYgKHN0cmVhbS0+cmVhZGFo ZWFkX2Rpc3RhbmNlID09IDApCisJLyogSWYgd2UgcmVhY2hlZCBlbmQtb2Ytc3RyZWFtIG9yIGEg cmVzZXQsIHdlJ3JlIGRvbmUgKi8KKwlpZiAoc3RyZWFtLT5yZWFkYWhlYWRfZGlzdGFuY2UgPD0g MCkKIAkJcmV0dXJuIGZhbHNlOwogCiAJLyogbmV2ZXIgc3RhcnQgbW9yZSBJT3MgdGhhbiBvdXIg Y2FwICovCkBAIC01NTgsNyArNTU5LDcgQEAgcmVhZF9zdHJlYW1fc2hvdWxkX2lzc3VlX25vdyhS ZWFkU3RyZWFtICpzdHJlYW0pCiAJICogSWYgdGhlIGNhbGxiYWNrIGhhcyBzaWduYWxlZCBlbmQt b2Ytc3RyZWFtLCBzdGFydCB0aGUgcGVuZGluZyByZWFkCiAJICogaW1tZWRpYXRlbHkuIFRoZXJl IGlzIG5vIGZ1cnRoZXIgcG90ZW50aWFsIGZvciBJTyBjb21iaW5pbmcuCiAJICovCi0JaWYgKHN0 cmVhbS0+cmVhZGFoZWFkX2Rpc3RhbmNlID09IDApCisJaWYgKHN0cmVhbS0+cmVhZGFoZWFkX2Rp c3RhbmNlIDw9IDApCiAJCXJldHVybiB0cnVlOwogCiAJLyoKQEAgLTY2Niw3ICs2NjcsNyBAQCBy ZWFkX3N0cmVhbV9sb29rX2FoZWFkKFJlYWRTdHJlYW0gKnN0cmVhbSkKIAkgKiBzdHJlYW0uICBJ biB0aGUgd29yc3QgY2FzZSB3ZSBjYW4gYWx3YXlzIG1ha2UgcHJvZ3Jlc3Mgb25lIGJ1ZmZlciBh dCBhCiAJICogdGltZS4KIAkgKi8KLQlBc3NlcnQoc3RyZWFtLT5waW5uZWRfYnVmZmVycyA+IDAg fHwgc3RyZWFtLT5yZWFkYWhlYWRfZGlzdGFuY2UgPT0gMCk7CisJQXNzZXJ0KHN0cmVhbS0+cGlu bmVkX2J1ZmZlcnMgPiAwIHx8IHN0cmVhbS0+cmVhZGFoZWFkX2Rpc3RhbmNlIDw9IDApOwogCiAJ aWYgKHN0cmVhbS0+YmF0Y2hfbW9kZSkKIAkJcGdhaW9fZXhpdF9iYXRjaG1vZGUoKTsKQEAgLTEw NTYsOCArMTA1Nyw4IEBAIHJlYWRfc3RyZWFtX25leHRfYnVmZmVyKFJlYWRTdHJlYW0gKnN0cmVh bSwgdm9pZCAqKnBlcl9idWZmZXJfZGF0YSkKIAl7CiAJCUFzc2VydChzdHJlYW0tPm9sZGVzdF9i dWZmZXJfaW5kZXggPT0gc3RyZWFtLT5uZXh0X2J1ZmZlcl9pbmRleCk7CiAKLQkJLyogRW5kIG9m IHN0cmVhbSByZWFjaGVkPyAgKi8KLQkJaWYgKHN0cmVhbS0+cmVhZGFoZWFkX2Rpc3RhbmNlID09 IDApCisJCS8qIEVuZCBvZiBzdHJlYW0gLyByZXNldCByZWFjaGVkPyAgKi8KKwkJaWYgKHN0cmVh bS0+cmVhZGFoZWFkX2Rpc3RhbmNlIDw9IDApCiAJCQlyZXR1cm4gSW52YWxpZEJ1ZmZlcjsKIAog CQkvKgpAQCAtMTA5OCw3ICsxMDk5LDE3IEBAIHJlYWRfc3RyZWFtX25leHRfYnVmZmVyKFJlYWRT dHJlYW0gKnN0cmVhbSwgdm9pZCAqKnBlcl9idWZmZXJfZGF0YSkKIAkJQXNzZXJ0KHN0cmVhbS0+ aW9zW2lvX2luZGV4XS5vcC5idWZmZXJzID09CiAJCQkgICAmc3RyZWFtLT5idWZmZXJzW29sZGVz dF9idWZmZXJfaW5kZXhdKTsKIAotCQluZWVkZWRfd2FpdCA9IFdhaXRSZWFkQnVmZmVycygmc3Ry ZWFtLT5pb3NbaW9faW5kZXhdLm9wKTsKKwkJLyoKKwkJICogSWYgdGhlIHN0cmVhbSBoYXMgYmVl biByZXNldCwgZG9uJ3QgZXZlbiB3YWl0IGZvciB0aGUgSU8sIGp1c3QKKwkJICogYWJhbmRvbiBp dC4KKwkJICovCisJCWlmIChzdHJlYW0tPnJlYWRhaGVhZF9kaXN0YW5jZSA8IDApCisJCXsKKwkJ CUFiYW5kb25SZWFkQnVmZmVycygmc3RyZWFtLT5pb3NbaW9faW5kZXhdLm9wKTsKKwkJCW5lZWRl ZF93YWl0ID0gZmFsc2U7CisJCX0KKwkJZWxzZQorCQkJbmVlZGVkX3dhaXQgPSBXYWl0UmVhZEJ1 ZmZlcnMoJnN0cmVhbS0+aW9zW2lvX2luZGV4XS5vcCk7CiAKIAkJQXNzZXJ0KHN0cmVhbS0+aW9z X2luX3Byb2dyZXNzID4gMCk7CiAJCXN0cmVhbS0+aW9zX2luX3Byb2dyZXNzLS07CkBAIC0xMzI0 LDggKzEzMzUsOCBAQCByZWFkX3N0cmVhbV9yZXNldChSZWFkU3RyZWFtICpzdHJlYW0pCiAJQnVm ZmVyCQlidWZmZXI7CiAKIAkvKiBTdG9wIGxvb2tpbmcgYWhlYWQuICovCi0Jc3RyZWFtLT5yZWFk YWhlYWRfZGlzdGFuY2UgPSAwOwotCXN0cmVhbS0+Y29tYmluZV9kaXN0YW5jZSA9IDA7CisJc3Ry ZWFtLT5yZWFkYWhlYWRfZGlzdGFuY2UgPSAtMTsKKwlzdHJlYW0tPmNvbWJpbmVfZGlzdGFuY2Ug PSAtMTsKIAogCS8qIEZvcmdldCBidWZmZXJlZCBibG9jayBudW1iZXIgYW5kIGZhc3QgcGF0aCBz dGF0ZS4gKi8KIAlzdHJlYW0tPmJ1ZmZlcmVkX2Jsb2NrbnVtID0gSW52YWxpZEJsb2NrTnVtYmVy OwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9idWZmZXIvYnVmbWdyLmMgYi9zcmMv YmFja2VuZC9zdG9yYWdlL2J1ZmZlci9idWZtZ3IuYwppbmRleCAzY2MwYjBiZGQuLjMzNTBmNzhk MCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9idWZmZXIvYnVmbWdyLmMKKysrIGIv c3JjL2JhY2tlbmQvc3RvcmFnZS9idWZmZXIvYnVmbWdyLmMKQEAgLTE2MDQsNiArMTYwNCwxMCBA QCBTdGFydFJlYWRCdWZmZXJzSW1wbChSZWFkQnVmZmVyc09wZXJhdGlvbiAqb3BlcmF0aW9uLAog ICogYnVmZmVycyBtdXN0IHJlbWFpbiB2YWxpZCB1bnRpbCBXYWl0UmVhZEJ1ZmZlcnMoKSBpcyBj YWxsZWQsIGFuZCBhbnkKICAqIGZvcndhcmRlZCBidWZmZXJzIG11c3QgYWxzbyBiZSBwcmVzZXJ2 ZWQgZm9yIGEgY29udGludWluZyBjYWxsIHVubGVzcwogICogdGhleSBhcmUgZXhwbGljaXRseSBy ZWxlYXNlZC4KKyAqCisgKiBJZiB0cnVlIHdhcyByZXR1cm5lZCwgdGhlIG1lbW9yeSB1bmRlcmx5 aW5nIHRoZSBSZWFkQnVmZmVyc09wZXJhdGlvbiBuZWVkcworICogdG8gc3RheSBhcm91bmQgdW50 aWwgZWl0aGVyIFdhaXRSZWFkQnVmZmVycygpIG9yIEFiYW5kb25SZWFkQnVmZmVycygpIGlzCisg KiBjYWxsZWQgKG9yIGFuIGVycm9yIGlzIHRocm93bikuCiAgKi8KIGJvb2wKIFN0YXJ0UmVhZEJ1 ZmZlcnMoUmVhZEJ1ZmZlcnNPcGVyYXRpb24gKm9wZXJhdGlvbiwKQEAgLTIxNjUsNiArMjE2OSwz NiBAQCBBc3luY1JlYWRCdWZmZXJzKFJlYWRCdWZmZXJzT3BlcmF0aW9uICpvcGVyYXRpb24sIGlu dCAqbmJsb2Nrc19wcm9ncmVzcykKIAlyZXR1cm4gdHJ1ZTsKIH0KIAorLyoKKyAqIERlY2xhcmUg dGhhdCB0aGlzIGJhY2tlbmQgaXMgbm90IGludGVyZXN0ZWQgaW4gdGhlIG9wZXJhdGlvbiBhbnlt b3JlLiBUaGlzCisgKiBuZWVkcyB0byBiZSBjYWxsZWQgaWYgU3RhcnRSZWFkQnVmZmVycygpIHJl dHVybmVkIHRydWUgYW5kIHRoZQorICogUmVhZEJ1ZmZlcnNPcGVyYXRpb24gaXMgdG8gYmUgZnJl ZWQgd2l0aG91dCBjYWxsaW5nIFdhaXRSZWFkQnVmZmVycygpCisgKiAobGVhdmluZyBlcnJvcnMg YXNpZGUpLgorICoKKyAqIEl0IGlzIHRoZSBjYWxsZXIncyByZXNwb25zaWJpbGl0eSB0byByZWxl YXNlIGJ1ZmZlciBwaW5zIChzZWVtcyBzaW1wbGVyCisgKiB0aGF0IHdheSwgYXMgdGhhdCBhbHJl YWR5IGlzIHJlcXVpcmVkIGlmIG5vIElPIGhhZCBiZWVuIG5lY2Vzc2FyeSkuCisgKi8KK3ZvaWQK K0FiYW5kb25SZWFkQnVmZmVycyhSZWFkQnVmZmVyc09wZXJhdGlvbiAqb3BlcmF0aW9uKQorewor CVBnQWlvV2FpdFJlZiBpb193cmVmID0gb3BlcmF0aW9uLT5pb193cmVmOworCisJLyogc2VlIGVx dWl2YWxlbnQgV2FpdFJlYWRCdWZmZXJzKCkgY2hlY2sgKi8KKwlpZiAoIXBnYWlvX3dyZWZfdmFs aWQoJmlvX3dyZWYpICYmIGlvX21ldGhvZCAhPSBJT01FVEhPRF9TWU5DKQorCQllbG9nKEVSUk9S LCAiYWJhbmRvbmluZyByZWFkIG9wZXJhdGlvbiB0aGF0IGRpZG4ndCByZWFkIik7CisKKwlpZiAo IXBnYWlvX3dyZWZfdmFsaWQoJmlvX3dyZWYpKQorCQlyZXR1cm47CisKKwlwZ2Fpb193cmVmX2Ns ZWFyKCZvcGVyYXRpb24tPmlvX3dyZWYpOworCisJLyogY2FuJ3QgYWJhbmRvbiBmb3JlaWduIElP cyAobm9yIGRvIHdlIG5lZWQgdG8pICovCisJaWYgKG9wZXJhdGlvbi0+Zm9yZWlnbl9pbykKKwkJ b3BlcmF0aW9uLT5mb3JlaWduX2lvID0gZmFsc2U7CisJZWxzZQorCQlwZ2Fpb193cmVmX2FiYW5k b24oJmlvX3dyZWYpOworfQorCiAvKgogICogQnVmZmVyQWxsb2MgLS0gc3Vicm91dGluZSBmb3Ig UGluQnVmZmVyRm9yQmxvY2suICBIYW5kbGVzIGxvb2t1cCBvZiBhIHNoYXJlZAogICoJCWJ1ZmZl ci4gIElmIG5vIGJ1ZmZlciBleGlzdHMgYWxyZWFkeSwgc2VsZWN0cyBhIHJlcGxhY2VtZW50IHZp Y3RpbSBhbmQKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9haW8vdC8wMDFfYWlv LnBsIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2Fpby90LzAwMV9haW8ucGwKaW5kZXggNjNjYWRk NjRjLi4xZmJjYTJiNTkgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9haW8vdC8w MDFfYWlvLnBsCisrKyBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9haW8vdC8wMDFfYWlvLnBsCkBA IC0xNSw2ICsxNSwxMCBAQCB1c2UgVGVzdEFpbzsKIG15IEBtZXRob2RzID0gVGVzdEFpbzo6c3Vw cG9ydGVkX2lvX21ldGhvZHMoKTsKIG15ICVub2RlczsKIAorIyBQdXR0aW5nIGl0IGlubGluZSBt YWtlcyBwZXJsdGlkeSBkbyB1Z2x5IHRoaW5ncworbXkgJGNvdW50X215X2Fpb3NfcXVlcnkgPQor ICAnU0VMRUNUIGNvdW50KCopIEZST00gcGdfYWlvcyBXSEVSRSBwaWQgPSBwZ19iYWNrZW5kX3Bp ZCgpJzsKKwogCiAjIyMKICMgQ3JlYXRlIGFuZCBjb25maWd1cmUgb25lIGluc3RhbmNlIGZvciBl YWNoIGlvX21ldGhvZApAQCAtMTYxNiw2ICsxNjIwLDYxIEBAIElOU0VSVCBJTlRPIHRtcF9vayBT RUxFQ1QgZ2VuZXJhdGVfc2VyaWVzKDEsIDUwMDApOwogCQkJcXF8U0VMRUNUIGJsb2Nrb2ZmLCBi bG9ja251bSwgaW9fcmVxZCBhbmQgbm90IGZvcmVpZ25faW8sIG5ibG9ja3MgRlJPTSByZWFkX2J1 ZmZlcnMoJyR0YWJsZScsIDEsIDMpfCwKIAkJCXFyL14wXHwxXHx0XHwyXG4yXHwzXHxmXHwxJC8s CiAJCQlxci9eJC8pOworCisKKwkJIyMjCisJCSMgVGVzdCB0aGF0IGFiYW5kb25pbmcgSU8gd29y a3MgYW5kIHRoYXQgaXQgZG9lcyBub3QgY2F1c2UgaXNzdWVzLgorCQkjIyMKKworCQkjIFRlc3Qg dGhhdCBldmVuIGFmdGVyIGFiYW5kb25pbmcgSU8gd2UgZG8gd2FpdCBmb3IgdGhlIElPcyBhdCB0 aGUgZW5kCisJCSMgb2YgdGhlIHN0YXRlbWVudC4KKwkJJHBzcWxfYS0+cXVlcnlfc2FmZShxcXxT RVQgaW9fY29tYmluZV9saW1pdD0yfCk7CisJCSRwc3FsX2EtPnF1ZXJ5X3NhZmUocXF8U0VMRUNU IGV2aWN0X3JlbCgnJHRhYmxlJyl8KTsKKwkJcHNxbF9saWtlKAorCQkJJGlvX21ldGhvZCwKKwkJ CSRwc3FsX2EsCisJCQkiJHBlcnNpc3RlbmN5OiByZWFkIGJ1ZmZlcnMgJiBhYmFuZG9uIGl0IiwK KwkJCXFxfFNFTEVDVCBhYmFuZG9uZWQsIGNvdW50KCopIEZST00gcmVhZF9idWZmZXJzKCckdGFi bGUnLCAwLCA2LCBhYmFuZG9uX2FmdGVyID0+IDIpIEdST1VQIEJZIDEgT1JERVIgQlkgMXwsCisJ CQlxci9eZlx8MVxudFx8MiQvLAorCQkJcXIvXiQvKTsKKwkJIyBEdWUgdG8gdGhlIGVuZC1vZi1z dGF0ZW1lbnQgd2FpdCB0aGVyZSBzaG91bGQgYmUgbm8gSU9zIGFueW1vcmUKKwkJaXMoJHBzcWxf YS0+cXVlcnlfc2FmZSgkY291bnRfbXlfYWlvc19xdWVyeSksIDAsCisJCQkiJGlvX21ldGhvZDog JHBlcnNpc3RlbmN5OiBhYmFuZG9uZWQgSU8gY29tcGxldGVkIGJ5IGVuZCBvZiBzdGF0ZW1lbnQi CisJCSk7CisKKwkJIyBUZXN0IHRoYXQgYWZ0ZXIgYWJhbmRvbmluZyBJTyBidWZmZXIgYWNjZXNz IHN0aWxsIHdvcmtzLgorCQkjCisJCSMgRmlyc3QgdGVzdCB0aGF0IGJ5IGp1c3QgaXNzdWluZyBh bm90aGVyIHJlYWRfYnVmZmVycygpIGluIHRoZSBzYW1lCisJCSMgc3RhdGVtZW50IChzbyB0aGF0 IHRoZSBhYmFuZG9uZWQgSU9zIGFyZW4ndCB3YWl0ZWQtZm9yIGR1cmluZworCQkjIGVuZC1vZi1z dGF0ZW1lbnQgcmVzb3duZXIgaGFuZGxpbmcpLgorCQkkcHNxbF9hLT5xdWVyeV9zYWZlKHFxfFNF TEVDVCBldmljdF9yZWwoJyR0YWJsZScpfCk7CisJCXBzcWxfbGlrZSgKKwkJCSRpb19tZXRob2Qs CisJCQkkcHNxbF9hLAorCQkJIiRwZXJzaXN0ZW5jeTogcmVhZCBidWZmZXJzICYgYWJhbmRvbiBp dCAmIHJlYWQgYWdhaW4iLAorCQkJcXF8CisJCQkgICBTRUxFQ1QgU1VNKG5ibG9ja3MpIEZST00g cmVhZF9idWZmZXJzKCckdGFibGUnLCAwLCA0LCBhYmFuZG9uX2FmdGVyID0+IDIpCisJCQkgICBV TklPTiBBTEwKKwkJCSAgIFNFTEVDVCBTVU0obmJsb2NrcykgRlJPTSByZWFkX2J1ZmZlcnMoJyR0 YWJsZScsIDAsIDQpCisJCQkgICB8LAorCQkJcXIvXjRcbjQkLywKKwkJCXFyL14kLyk7CisKKwkJ IyBOb3cgdGVzdCB0aGF0IGEgcGxhaW4gU0VMRUNUIG5lZWRpbmcgYnVmZmVycyBhZmZlY3RlZCBi eSBhYmFuZG9uZWQKKwkJIyBJTyB3b3JrCisJCSRwc3FsX2EtPnF1ZXJ5X3NhZmUocXF8U0VMRUNU IGV2aWN0X3JlbCgnJHRhYmxlJyl8KTsKKwkJcHNxbF9saWtlKAorCQkJJGlvX21ldGhvZCwKKwkJ CSRwc3FsX2EsCisJCQkiJHBlcnNpc3RlbmN5OiByZWFkIGJ1ZmZlcnMgJiBhYmFuZG9uIGl0ICYg cmVhZCBhZ2FpbiB2aWEgU0VMRUNUIiwKKwkJCXFxfAorCQkJICAgU0VMRUNUIFNVTShuYmxvY2tz KSBGUk9NIHJlYWRfYnVmZmVycygnJHRhYmxlJywgMCwgNCwgYWJhbmRvbl9hZnRlciA9PiAyKQor CQkJICAgVU5JT04gQUxMCisJCQkgICBTRUxFQ1QgU1VNKGRhdGEpIEZST00gJHRhYmxlIFdIRVJF IGRhdGEgPCAxMDAwCisJCQkgICB8LAorCQkJcXIvXjRcbjQ5OTUwMCQvLAorCQkJcXIvXiQvKTsK KwkJJHBzcWxfYS0+cXVlcnlfc2FmZShxcXxSRVNFVCBpb19jb21iaW5lX2xpbWl0fCk7CiAJfQog CiAJIyBUaGUgcmVtYWluaW5nIHRlc3RzIGRvbid0IG1ha2Ugc2Vuc2UgZm9yIHRlbXAgdGFibGVz LCBhcyB0aGV5IGFyZQpAQCAtMTgzNyw2ICsxODk2LDU0IEBAIHJlYWRfYnVmZmVycygnJHRhYmxl JywgMCwgNCl8LAogCSRwc3FsX2EtPntzdGRvdXR9ID0gJyc7CiAKIAorCSMjIworCSMgVGVzdCB0 aGF0IGFiYW5kb25pbmcgSU8gYWN0dWFsbHkgYXZvaWRzIHdhaXRpbmcgZm9yIElPLgorCSMjIwor CisJIyBUZXN0aW5nIG5vdCB3YWl0aW5nIG9ubHkgd29ya3MgaWYgdGhlIElPIG1ldGhvZCBkb2Vz bid0IGV4ZWN1dGUgSU8KKwkjIHN5bmNocm9ub3VzbHksIHdoaWNoIGlzIHdoeSB3ZSBmdW5kYW1l bnRhbGx5IGNhbid0IHRlc3Qgd2l0aAorCSMgaW9fbWV0aG9kPXN5bmMuIEZ1cnRoZXJtb3JlIHdl IG5lZWQgdG8gd29yayBhcm91bmQgaW9fbWV0aG9kPWlvX3VyaW5nCisJIyBwb3RlbnRpYWxseSBl eGVjdXRpbmcgdGhlIElPIHN5bmNocm9ub3VzbHkgLSB3ZSBjYW4gZG8gc28gYnkgbWFraW5nIHRo ZQorCSMgSU9zIGJpZyBlbm91Z2ggKGMuZi4gcGdhaW9fdXJpbmdfc2hvdWxkX3VzZV9hc3luYygp KS4KKwkjCisJIyBUbyBtYWtlIHRoZSB0ZXN0IHJlbGlhYmxlIHdlIGhhdmUgdG8gYWJhbmRvbiBh bGwgSU9zLCBhcyB3YWl0aW5nIGZvcgorCSMgc29tZSBJT3MgY291bGQgbGVhZCB0byBhbHNvIGNv bnN1bWluZyB0aGUgY29tcGxldGlvbiBvZiB0aGUgSU8gdGhhdCB3aWxsCisJIyB0cmlnZ2VyIGEg d2FpdCBpbiB0aGUgY29tcGxldGlvbi4KKwlpZiAoJGlvX21ldGhvZCBuZSAnc3luYycpCisJewor CQkkcHNxbF9hLT5xdWVyeV9zYWZlKHFxfFNFTEVDVCBldmljdF9yZWwoJyR0YWJsZScpfCk7CisJ CSRwc3FsX2EtPnF1ZXJ5X3NhZmUocXF8U0VUIGlvX2NvbWJpbmVfbGltaXQ9NXwpOworCQkkcHNx bF9iLT5xdWVyeV9zYWZlKAorCQkJcXEvU0VMRUNUIGlual9pb19jb21wbGV0aW9uX3dhaXQoCisJ CSAgIHJlbGZpbGVub2RlPT5wZ19yZWxhdGlvbl9maWxlbm9kZSgnJHRhYmxlJyksCisJCSAgIGJs b2Nrbm89PjQpOy8pOworCQlvaygxLAorCQkJIiRpb19tZXRob2Q6ICRwZXJzaXN0ZW5jeTogY29u ZmlndXJlIHdhaXQgaW4gY29tcGxldGlvbiBvZiBibG9jayA0IgorCQkpOworCisJCSMgTmVlZCB0 byBlbmQgdGhlIHdhaXQgaW4gdGhlIGNvbXBsZXRpb24gYmVmb3JlIHRoZSBzdGF0ZW1lbnQgaXMg b3ZlciwKKwkJIyBvdGhlcndpc2Ugd2UnbGwgd2FpdCBkdXJpbmcgcmVzb3duZXIgY2xlYW51cCBh dCB0aGUgZW5kIG9mIHRoZQorCQkjIHN0YXRlbWVudC4KKwkJcHNxbF9saWtlKAorCQkJJGlvX21l dGhvZCwKKwkJCSRwc3FsX2EsCisJCQkiJHBlcnNpc3RlbmN5OiByZWFkIGJ1ZmZlcnMgYWJhbmRv bmluZyBibG9ja2VkIElPIGF2b2lkcyB3YWl0IiwKKwkJCXFxfAorCQkJICAgU0VMRUNUIGNvdW50 KCopID4gMCBGUk9NIHJlYWRfYnVmZmVycygnJHRhYmxlJywgMCwgMTAsIGFiYW5kb25fYWZ0ZXIg PT4gMCkgV0hFUkUgYWJhbmRvbmVkCisJCQkgICBVTklPTiBBTEwKKwkJCSAgIFNFTEVDVCBjb3Vu dCgqKSA+IDAgRlJPTSBwZ19haW9zIFdIRVJFIHBpZCA9IHBnX2JhY2tlbmRfcGlkKCkKKwkJCSAg IFVOSU9OIEFMTAorCQkJICAgU0VMRUNUIGlual9pb19jb21wbGV0aW9uX2NvbnRpbnVlKCkgSVMg Tk9UIE5VTEwKKwkJCXwsCisJCQlxci9edFxudFxudCQvLAorCQkJcXIvXiQvKTsKKwkJaXMoJHBz cWxfYS0+cXVlcnlfc2FmZSgkY291bnRfbXlfYWlvc19xdWVyeSksIDAsCisJCQkiJGlvX21ldGhv ZDogJHBlcnNpc3RlbmN5OiBhYmFuZG9uZWQgSU8gaXMgY29tcGxldGVkIGF0IGVuZCBvZiBzdGF0 ZW1lbnQiCisJCSk7CisKKwkJJHBzcWxfYS0+cXVlcnlfc2FmZShxcXxSRVNFVCBpb19jb21iaW5l X2xpbWl0fCk7CisJfQorCiAJJHBzcWxfYS0+cXVpdCgpOwogCSRwc3FsX2ItPnF1aXQoKTsKIAkk cHNxbF9jLT5xdWl0KCk7CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfYWlvL3Rl c3RfYWlvLS0xLjAuc3FsIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2Fpby90ZXN0X2Fpby0tMS4w LnNxbAppbmRleCA3NjJhYzI5NTEuLmZmM2IyMDBjZiAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvbW9k dWxlcy90ZXN0X2Fpby90ZXN0X2Fpby0tMS4wLnNxbAorKysgYi9zcmMvdGVzdC9tb2R1bGVzL3Rl c3RfYWlvL3Rlc3RfYWlvLS0xLjAuc3FsCkBAIC01Myw3ICs1Myw3IEBAIENSRUFURSBGVU5DVElP TiBidWZmZXJfY2FsbF90ZXJtaW5hdGVfaW8oYnVmZmVyIGludCwgZm9yX2lucHV0IGJvb2wsIHN1 Y2NlZWQgYm9vCiBSRVRVUk5TIHBnX2NhdGFsb2cudm9pZCBTVFJJQ1QKIEFTICdNT0RVTEVfUEFU SE5BTUUnIExBTkdVQUdFIEM7CiAKLUNSRUFURSBGVU5DVElPTiByZWFkX2J1ZmZlcnMocmVsIHJl Z2NsYXNzLCBzdGFydGJsb2NrIGludDQsIG5ibG9ja3MgaW50NCwgT1VUIGJsb2Nrb2ZmIGludDQs IE9VVCBibG9ja251bSBpbnQ0LCBPVVQgaW9fcmVxZCBib29sLCBPVVQgZm9yZWlnbl9pbyBib29s LCBPVVQgbmJsb2NrcyBpbnQ0LCBPVVQgYnVmIGludDRbXSkKK0NSRUFURSBGVU5DVElPTiByZWFk X2J1ZmZlcnMocmVsIHJlZ2NsYXNzLCBzdGFydGJsb2NrIGludDQsIG5ibG9ja3MgaW50NCwgYWJh bmRvbl9hZnRlciBpbnQ0IERFRkFVTFQgLTEsIE9VVCBibG9ja29mZiBpbnQ0LCBPVVQgYmxvY2tu dW0gaW50NCwgT1VUIGlvX3JlcWQgYm9vbCwgT1VUIGZvcmVpZ25faW8gYm9vbCwgT1VUIGFiYW5k b25lZCBib29sLCBPVVQgbmJsb2NrcyBpbnQ0LCBPVVQgYnVmIGludDRbXSkKIFJFVFVSTlMgU0VU T0YgcmVjb3JkIFNUUklDVAogQVMgJ01PRFVMRV9QQVRITkFNRScgTEFOR1VBR0UgQzsKIApkaWZm IC0tZ2l0IGEvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2Fpby90ZXN0X2Fpby5jIGIvc3JjL3Rlc3Qv bW9kdWxlcy90ZXN0X2Fpby90ZXN0X2Fpby5jCmluZGV4IGQ3NTMwNjgxMS4uYzlhOGIyMWI5IDEw MDY0NAotLS0gYS9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfYWlvL3Rlc3RfYWlvLmMKKysrIGIvc3Jj L3Rlc3QvbW9kdWxlcy90ZXN0X2Fpby90ZXN0X2Fpby5jCkBAIC03MDksMTEgKzcwOSwxMyBAQCBy ZWFkX2J1ZmZlcnMoUEdfRlVOQ1RJT05fQVJHUykKIAlPaWQJCQlyZWxpZCA9IFBHX0dFVEFSR19P SUQoMCk7CiAJQmxvY2tOdW1iZXIgc3RhcnRibG9jayA9IFBHX0dFVEFSR19VSU5UMzIoMSk7CiAJ aW50MzIJCW5ibG9ja3MgPSBQR19HRVRBUkdfSU5UMzIoMik7CisJaW50MzIJCWFiYW5kb25fYWZ0 ZXIgPSBQR19HRVRBUkdfSU5UMzIoMyk7CiAJUmV0dXJuU2V0SW5mbyAqcnNpbmZvID0gKFJldHVy blNldEluZm8gKikgZmNpbmZvLT5yZXN1bHRpbmZvOwogCVJlbGF0aW9uCXJlbDsKIAlTTWdyUmVs YXRpb24gc21ncjsKIAlpbnQJCQluYmxvY2tzX2RvbmUgPSAwOwogCWludAkJCW5ibG9ja3NfZGlz cCA9IDA7CisJaW50CQkJbmJsb2Nrc193YWl0ID0gMDsKIAlpbnQJCQluaW9zID0gMDsKIAlSZWFk QnVmZmVyc09wZXJhdGlvbiAqb3BlcmF0aW9uczsKIAlCdWZmZXIJICAgKmJ1ZmZlcnM7CkBAIC03 MzUsNiArNzM3LDkgQEAgcmVhZF9idWZmZXJzKFBHX0ZVTkNUSU9OX0FSR1MpCiAJcmVsID0gcmVs YXRpb25fb3BlbihyZWxpZCwgQWNjZXNzU2hhcmVMb2NrKTsKIAlzbWdyID0gUmVsYXRpb25HZXRT bWdyKHJlbCk7CiAKKwlpZiAoYWJhbmRvbl9hZnRlciA8IDApCisJCWFiYW5kb25fYWZ0ZXIgPSBu YmxvY2tzOworCiAJLyoKIAkgKiBEbyBTdGFydFJlYWRCdWZmZXJzKCkgdW50aWwgSU8gZm9yIGFs bCB0aGUgcmVxdWlyZWQgYmxvY2tzIGhhcyBiZWVuCiAJICogc3RhcnRlZCAoaWYgcmVxdWlyZWQp LgpAQCAtNzY5LDkgKzc3NCwxNyBAQCByZWFkX2J1ZmZlcnMoUEdfRlVOQ1RJT05fQVJHUykKIAlm b3IgKGludCBuaW8gPSAwOyBuaW8gPCBuaW9zOyBuaW8rKykKIAl7CiAJCVJlYWRCdWZmZXJzT3Bl cmF0aW9uICpvcGVyYXRpb24gPSAmb3BlcmF0aW9uc1tuaW9dOworCQlpbnQJCQluYmxvY2tzX3Ro aXNfaW8gPSBuYmxvY2tzX3Blcl9pb1tuaW9dOwogCiAJCWlmIChpb19yZXFkc1tuaW9dKQotCQkJ V2FpdFJlYWRCdWZmZXJzKG9wZXJhdGlvbik7CisJCXsKKwkJCWlmIChuYmxvY2tzX3dhaXQgPCBh YmFuZG9uX2FmdGVyKQorCQkJCVdhaXRSZWFkQnVmZmVycyhvcGVyYXRpb24pOworCQkJZWxzZQor CQkJCUFiYW5kb25SZWFkQnVmZmVycyhvcGVyYXRpb24pOworCQl9CisKKwkJbmJsb2Nrc193YWl0 ICs9IG5ibG9ja3NfdGhpc19pbzsKIAl9CiAKIAkvKgpAQCAtNzgxLDggKzc5NCw4IEBAIHJlYWRf YnVmZmVycyhQR19GVU5DVElPTl9BUkdTKQogCXsKIAkJUmVhZEJ1ZmZlcnNPcGVyYXRpb24gKm9w ZXJhdGlvbiA9ICZvcGVyYXRpb25zW25pb107CiAJCWludAkJCW5ibG9ja3NfdGhpc19pbyA9IG5i bG9ja3NfcGVyX2lvW25pb107Ci0JCURhdHVtCQl2YWx1ZXNbNl0gPSB7MH07Ci0JCWJvb2wJCW51 bGxzWzZdID0gezB9OworCQlEYXR1bQkJdmFsdWVzWzddID0gezB9OworCQlib29sCQludWxsc1s3 XSA9IHswfTsKIAkJQXJyYXlUeXBlICAqYnVmZmVyc19hcnI7CiAKIAkJLyogY29udmVydCBidWZm ZXIgYXJyYXkgdG8gZGF0dW0gYXJyYXkgKi8KQEAgLTgxNSwxNCArODI4LDE4IEBAIHJlYWRfYnVm ZmVycyhQR19GVU5DVElPTl9BUkdTKQogCQl2YWx1ZXNbM10gPSBCb29sR2V0RGF0dW0oaW9fcmVx ZHNbbmlvXSA/IG9wZXJhdGlvbi0+Zm9yZWlnbl9pbyA6IGZhbHNlKTsKIAkJbnVsbHNbM10gPSBm YWxzZTsKIAotCQkvKiBuYmxvY2tzICovCi0JCXZhbHVlc1s0XSA9IEludDMyR2V0RGF0dW0obmJs b2Nrc190aGlzX2lvKTsKKwkJLyogYWJhbmRvbmVkICovCisJCXZhbHVlc1s0XSA9IEJvb2xHZXRE YXR1bShuYmxvY2tzX2Rpc3AgPj0gYWJhbmRvbl9hZnRlcik7CiAJCW51bGxzWzRdID0gZmFsc2U7 CiAKLQkJLyogYXJyYXkgb2YgYnVmZmVycyAqLwotCQl2YWx1ZXNbNV0gPSBQb2ludGVyR2V0RGF0 dW0oYnVmZmVyc19hcnIpOworCQkvKiBuYmxvY2tzICovCisJCXZhbHVlc1s1XSA9IEludDMyR2V0 RGF0dW0obmJsb2Nrc190aGlzX2lvKTsKIAkJbnVsbHNbNV0gPSBmYWxzZTsKIAorCQkvKiBhcnJh eSBvZiBidWZmZXJzICovCisJCXZhbHVlc1s2XSA9IFBvaW50ZXJHZXREYXR1bShidWZmZXJzX2Fy cik7CisJCW51bGxzWzZdID0gZmFsc2U7CisKIAkJdHVwbGVzdG9yZV9wdXR2YWx1ZXMocnNpbmZv LT5zZXRSZXN1bHQsIHJzaW5mby0+c2V0RGVzYywgdmFsdWVzLCBudWxscyk7CiAKIAkJbmJsb2Nr c19kaXNwICs9IG5ibG9ja3NfdGhpc19pbzsKQEAgLTEwNzUsNiArMTA5MiwxMyBAQCBpbmpfaW9f Y29tcGxldGlvbl93YWl0X21hdGNoZXMoUGdBaW9IYW5kbGUgKmlvaCkKIAkJIShpbmpfYmxvY2tu byA+PSBpb19ibG9ja25vICYmIGlual9ibG9ja25vIDwgKGlvX2Jsb2Nrbm8gKyB0ZC0+c21nci5u YmxvY2tzKSkpCiAJCXJldHVybiBmYWxzZTsKIAorCWVyZXBvcnQoTE9HLAorCQkJZXJybXNnKCJ3 YWl0IGluamVjdGlvbiBwb2ludCBtYXRjaGVzIGZvciBJTyAlZCwgaW5qIGJsb2Nrbm8gJWQsIGlv IGJsb2Nrbm8gJWQsIGlvIG5ibG9ja3MgJWQiLAorCQkJCSAgIHBnYWlvX2lvX2dldF9pZChpb2gp LAorCQkJCSAgIGlual9ibG9ja25vLCBpb19ibG9ja25vLCB0ZC0+c21nci5uYmxvY2tzCisJCQkJ ICAgKSwKKwkJCWVycmhpZGVzdG10KHRydWUpLCBlcnJoaWRlY29udGV4dCh0cnVlKSk7CisKIAly ZXR1cm4gdHJ1ZTsKIH0KIAotLSAKMi41My4wCgo= --0000000000002fe31c064eaff221 Content-Type: application/octet-stream; name="v23-0001-Add-slot-based-table-AM-index-scan-interface.patch" Content-Disposition: attachment; filename="v23-0001-Add-slot-based-table-AM-index-scan-interface.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mnlbta2r0 RnJvbSA2NmZlODZlZWFkZDk5ODBkZmZmNWFlMDc2ZjQ4MzA3ZjM5ZmYzYWE1IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBHZW9naGVnYW4gPHBnQGJvd3QuaWU+CkRhdGU6IFN1 biwgMjIgTWFyIDIwMjYgMDI6MzY6NTcgLTA0MDAKU3ViamVjdDogW1BBVENIIHYyMyAxLzhdIEFk ZCBzbG90LWJhc2VkIHRhYmxlIEFNIGluZGV4IHNjYW4gaW50ZXJmYWNlLgoKQWRkIHRhYmxlX2lu ZGV4X2dldG5leHRfc2xvdCwgYSBuZXcgdGFibGUgQU0gY2FsbGJhY2sgdGhhdCB3cmFwcyBib3Ro CnBsYWluIGFuZCBpbmRleC1vbmx5IGluZGV4IHNjYW5zIHRoYXQgdXNlIGFtZ2V0dHVwbGUuICBU d28gbmV3ClRhYmxlQW1Sb3V0aW5lIGNhbGxiYWNrcyBhcmUgaW50cm9kdWNlZCAtLSBvbmUgZm9y IHBsYWluIHNjYW5zIGFuZCBvbmUKZm9yIGluZGV4LW9ubHkgc2NhbnMgLS0gd2hpY2ggYW4gdXBj b21pbmcgY29tbWl0IHRoYXQgYWRkcyB0aGUKYW1nZXRiYXRjaCBpbnRlcmZhY2Ugd2lsbCBleHBh bmQgdG8gZm91ci4gIFRoZSBhcHByb3ByaWF0ZSBjYWxsYmFjayBpcwpyZXNvbHZlZCBvbmNlIGlu IGluZGV4X2JlZ2luc2NhbiwgYW5kIGNhbGxlZCB0aHJvdWdoIGEgZnVuY3Rpb24gcG9pbnRlcgoo eHNfZ2V0bmV4dF9zbG90KSBvbiB0aGUgSW5kZXhTY2FuRGVzYyB3aGVuIHRoZSB0YWJsZV9pbmRl eF9nZXRuZXh0X3Nsb3QKc2hpbSBmdW5jdGlvbiBpcyBjYWxsZWQgZnJvbSBleGVjdXRvciBub2Rl cy4KClRoaXMgbW92ZXMgVk0gY2hlY2tzIGZvciBpbmRleC1vbmx5IHNjYW5zIG91dCBvZiB0aGUg ZXhlY3V0b3IgYW5kIGludG8KaGVhcGFtLCBlbmFibGluZyBiYXRjaGluZyBvZiB2aXNpYmlsaXR5 IG1hcCBsb29rdXBzICh0aG91Z2ggZm9yIG5vdyB3ZQpjb250aW51ZSB0byBqdXN0IHBlcmZvcm0g cmV0YWlsIGxvb2t1cHMpLiAgVXNpbmcgdGhlIG5ldyBoaWdoZXIgbGV2ZWwKc2xvdC1iYXNlZCBp bnRlcmZhY2UgZ3JlYXRseSBzaW1wbGlmaWVzIG5vZGVJbmRleG9ubHlzY2FuLmMsIHdoaWNoIG5v CmxvbmdlciBoYXMgdG8gZGVhbCB3aXRoIHRoZSB2aXNpYmlsaXR5IG1hcCBkaXJlY3RseS4gIE1v cmUgaW1wb3J0YW50bHksCnRoaXMgaXMgYSBzaWduaWZpY2FudCBhcmNoaXRlY3R1cmFsIGltcHJv dmVtZW50OiB0YWJsZSBBTXMgY2FuIG5vdwppbXBsZW1lbnQgaW5kZXgtb25seSBzY2FucyB0aGF0 IGFyZSBub3QgdGllZCB0byBoZWFwYW0ncyB2aXNpYmlsaXR5IG1hcC4KCkEgc21hbGwgbWlub3Jp dHkgb2YgY2FsbGVycyAoMiBjYWxsZXJzIGluIHRvdGFsKSBmdW5kYW1lbnRhbGx5IG5lZWQgdG8K cGFzcyBhIFRJRCB0byB0aGUgdGFibGUgQU0gKGJvdGggcGVyZm9ybSBjb25zdHJhaW50IGVuZm9y Y2VtZW50KS4gIFRoZXNlCmNhbGxlcnMgZG9uJ3QgYWN0dWFsbHkgcGVyZm9ybSBpbmRleCBzY2Fu cyAoZXZlbiBpZiB0aGVpciBUSURzIGFyZSB0YWtlbgpmcm9tIGFuIGluZGV4KSwgYW5kIGhhdmUg bm8gbmVlZCBmb3IgbW9zdCBvZiB0aGUgaW5kZXggc2NhbiBtYWNoaW5lcnkuClN3aXRjaCB0aGVz ZSBjYWxsZXJzIG92ZXIgdG8gdGhlIG5ldyBmZXRjaF90aWQgaW50ZXJmYWNlICh3aGljaCByZXBs YWNlcwp0aGUgcHJldmlvdXMgVElELWJhc2VkIGluZGV4X2ZldGNoX3R1cGxlIGludGVyZmFjZSku ICBBbGwgaW5kZXggc2NhbgpjYWxsZXJzIG5vdyB1c2UgdGhlIG5ldyBzbG90LWJhc2VkIGludGVy ZmFjZSAodGFibGVfaW5kZXhfZ2V0bmV4dF9zbG90KS4KCkluZGV4LW9ubHkgc2NhbiBjYWxsZXJz IHBhc3MgdGFibGVfaW5kZXhfZ2V0bmV4dF9zbG90IGEgVHVwbGVUYWJsZVNsb3QKKHdoaWNoIHRo ZSB0YWJsZSBBTSB1c2VzIGludGVybmFsbHkgZm9yIGhlYXAgZmV0Y2hlcyksIGJ1dCBjb250aW51 ZSB0bwpyZWFkIHRoZWlyIHJlc3VsdHMgZnJvbSBJbmRleFNjYW5EZXNjRGF0YSBmaWVsZHMgc3Vj aCBhcyB4c19pdHVwIChyYXRoZXIKdGhhbiBmcm9tIHRoZSBzbG90IGl0c2VsZikuICBBbGwgY2Fs bGVycyBjYW4gY29udGludWUgdG8gcmVseSBvbiB0aGUKc2NhbiBkZXNjcmlwdG9yJ3MgeHNfaGVh cHRpZCBmaWVsZCBiZWluZyBzZXQgb24gZWFjaCBjYWxsLgoKVGhlIFZJU0lURURfUEFHRVNfTElN SVQgbWVjaGFuaXNtIHVzZWQgYnkgZ2V0X2FjdHVhbF92YXJpYWJsZV9yYW5nZSB0bwpjYXAgc2Nh biBvdmVyaGVhZCBkdXJpbmcgcGxhbm5pbmcgaXMgcmV3b3JrZWQgdG8gZ28gdGhyb3VnaCBhIG5l dyBzY2FuCmRlc2NyaXB0b3IgaW50ZXJmYWNlICh4c192aXNpdGVkX3BhZ2VzX2xpbWl0KSwgcmF0 aGVyIHRoYW4gdHJhY2tpbmcgdGhlCmNvc3RzIGRpcmVjdGx5IGFuZCB0ZXJtaW5hdGluZyB0aGUg c2NhbiBpdHNlbGYsIGluIGFuIGFkLWhvYyB3YXkuICBUaGlzCmlzIG5lY2Vzc2FyeSBiZWNhdXNl IGNhbGxlcnMgdGhhdCB1c2UgdGhlIG5ldyBzbG90LWJhc2VkIGludGVyZmFjZSBubwpsb25nZXIg aGF2ZSBkaXJlY3QgYWNjZXNzIHRvIHdoaWNoIGhlYXAgYmxvY2tzIHdlcmUgZmV0Y2hlZC4gIFNp bWlsYXJseSwKbm9kZUluZGV4b25seXNjYW4uYyBjYW4gbm8gbG9uZ2VyIHVzZSBJbnN0ckNvdW50 VHVwbGVzMiB0byBjb3VudCBoZWFwCmZldGNoZXMgZHVyaW5nIGFuIEVYUExBSU4gQU5BTFlaRS4g IEVYUExBSU4gQU5BTFlaRSBub3cgb2J0YWlucyB0aGlzCmluZm9ybWF0aW9uIGZyb20gYSBuZXcg SW5kZXhTY2FuSW5zdHJ1bWVudGF0aW9uIGZpZWxkLCB3aGljaCB0YWJsZSBBTXMKYXJlIHJlcXVp cmVkIHRvIG1haW50YWluLgoKVGhvdWdoIGluZGVwZW5kZW50bHkgdXNlZnVsLCB0aGlzIGNvbW1p dCBpcyBwcmVwYXJhdG9yeSB3b3JrIGZvciBhbgp1cGNvbWluZyBjb21taXQgdGhhdCB3aWxsIGFk ZCBhbiBhbWdldGJhdGNoIGluZGV4IEFNIGludGVyZmFjZSwgd2hlcmUKdGhlIHRhYmxlIEFNIHRh a2VzIGZ1bGwgcmVzcG9uc2liaWxpdHkgZm9yIG1hbmFnaW5nIHRoZSBwcm9ncmVzcyBvZgppbmRl eCBzY2Fucy4gIFRoYXQgd2lsbCBtb3ZlIG1vc3Qgb2YgdGhlIGltcGxlbWVudGF0aW9uIG9mIHNj cm9sbGFibGUKY3Vyc29ycyBvdXQgb2YgaW5kZXggQU1zIGFuZCBpbnRvIHRhYmxlIEFNcywgbWFr aW5nIGl0IGVzc2VudGlhbCB0aGF0CmV4ZWN1dG9yIG5vZGVzIHBhc3MgdGhlIGN1cnJlbnQgc2Nh biBkaXJlY3Rpb24gZG93biB0byB0aGUgdGFibGUgQU0uCgpUaGUgaGVhcGFtIGltcGxlbWVudGF0 aW9ucyBtYWtlIGFnZ3Jlc3NpdmUgdXNlIG9mIGZvcmNlZCBpbmxpbmluZyB0bwplbnN1cmUgdGhh dCBwbGFpbiBhbmQgaW5kZXgtb25seSBjb2RlIHBhdGhzIGFyZSBmdWxseSBzcGVjaWFsaXplZCBh dApjb21waWxlIHRpbWUgZGVzcGl0ZSBzaGFyaW5nIGEgY29tbW9uIGltcGxlbWVudGF0aW9uLiAg VGVzdGluZyBoYXMgc2hvd24KdGhpcyBpcyBuZWNlc3NhcnkgdG8ga2VlcCBpY2FjaGUgbWlzc2Vz IHRvIGEgbWluaW11bSwgYXQgbGVhc3Qgd2l0aCB0aGUKdHdvIHVwY29taW5nIGFtZ2V0YmF0Y2gg dmFyaWFudHMuCgpBdXRob3I6IFBldGVyIEdlb2doZWdhbiA8cGdAYm93dC5pZT4KUmV2aWV3ZWQt Qnk6IEFuZHJlcyBGcmV1bmQgPGFuZHJlc0BhbmFyYXplbC5kZT4KUmV2aWV3ZWQtQnk6IFRvbWFz IFZvbmRyYSA8dG9tYXNAdm9uZHJhLm1lPgpEaXNjdXNzaW9uOiBodHRwczovL3Bvc3Rnci5lcy9t L0NBSDItV3ptWXFoYWNCSDE2MXBlQVdiNWVGPUphN0NGQVErMGpTRU1xPXFuZkxWVE9PZ0BtYWls LmdtYWlsLmNvbQotLS0KIHNyYy9pbmNsdWRlL2FjY2Vzcy9nZW5hbS5oICAgICAgICAgICAgICAg ICB8ICAgNSArLQogc3JjL2luY2x1ZGUvYWNjZXNzL2hlYXBhbS5oICAgICAgICAgICAgICAgIHwg IDE3ICstCiBzcmMvaW5jbHVkZS9hY2Nlc3MvcmVsc2Nhbi5oICAgICAgICAgICAgICAgfCAgMzQg KystCiBzcmMvaW5jbHVkZS9hY2Nlc3MvdGFibGVhbS5oICAgICAgICAgICAgICAgfCAyMDggKysr KysrKystLS0tLS0tCiBzcmMvaW5jbHVkZS9leGVjdXRvci9pbnN0cnVtZW50X25vZGUuaCAgICAg fCAgIDMgKwogc3JjL2luY2x1ZGUvbm9kZXMvZXhlY25vZGVzLmggICAgICAgICAgICAgIHwgICAy IC0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9oYW5kbGVyLmMgICB8ICAgOSArLQog c3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtX2luZGV4c2Nhbi5jIHwgMjc1ICsrKysrKysr KysrKysrKysrKystCiBzcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC92aXNpYmlsaXR5bWFwLmMgICAg fCAgMjcgKy0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9nZW5hbS5jICAgICAgICAgICB8ICAx MSArLQogc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L2luZGV4YW0uYyAgICAgICAgIHwgMjg0ICsr KysrKystLS0tLS0tLS0tLS0tLQogc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRpbnNlcnQu YyAgICAgIHwgIDEwICstCiBzcmMvYmFja2VuZC9hY2Nlc3MvdGFibGUvdGFibGVhbS5jICAgICAg ICAgfCAgMjYgKy0KIHNyYy9iYWNrZW5kL2FjY2Vzcy90YWJsZS90YWJsZWFtYXBpLmMgICAgICB8 ICAgMiArLQogc3JjL2JhY2tlbmQvY29tbWFuZHMvY29uc3RyYWludC5jICAgICAgICAgIHwgIDI4 ICstCiBzcmMvYmFja2VuZC9jb21tYW5kcy9leHBsYWluLmMgICAgICAgICAgICAgfCAgMjMgKy0K IHNyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNJbmRleGluZy5jICAgICAgICB8ICAgNSArLQogc3Jj L2JhY2tlbmQvZXhlY3V0b3IvZXhlY1JlcGxpY2F0aW9uLmMgICAgIHwgICA4ICstCiBzcmMvYmFj a2VuZC9leGVjdXRvci9ub2RlQml0bWFwSW5kZXhzY2FuLmMgfCAgIDEgKwogc3JjL2JhY2tlbmQv ZXhlY3V0b3Ivbm9kZUluZGV4b25seXNjYW4uYyAgIHwgMTA2ICstLS0tLS0tCiBzcmMvYmFja2Vu ZC9leGVjdXRvci9ub2RlSW5kZXhzY2FuLmMgICAgICAgfCAgIDkgKy0KIHNyYy9iYWNrZW5kL3V0 aWxzL2FkdC9yaV90cmlnZ2Vycy5jICAgICAgICB8ICAgOCArLQogc3JjL2JhY2tlbmQvdXRpbHMv YWR0L3NlbGZ1bmNzLmMgICAgICAgICAgIHwgIDYxICstLS0tCiAyMyBmaWxlcyBjaGFuZ2VkLCA2 MjQgaW5zZXJ0aW9ucygrKSwgNTM4IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy9pbmNs dWRlL2FjY2Vzcy9nZW5hbS5oIGIvc3JjL2luY2x1ZGUvYWNjZXNzL2dlbmFtLmgKaW5kZXggYjY5 MzIwYTdmLi5kYjYyZTBjYTEgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9nZW5hbS5o CisrKyBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9nZW5hbS5oCkBAIC0xNTYsNiArMTU2LDcgQEAgZXh0 ZXJuIHZvaWQgaW5kZXhfaW5zZXJ0X2NsZWFudXAoUmVsYXRpb24gaW5kZXhSZWxhdGlvbiwKIAog ZXh0ZXJuIEluZGV4U2NhbkRlc2MgaW5kZXhfYmVnaW5zY2FuKFJlbGF0aW9uIGhlYXBSZWxhdGlv biwKIAkJCQkJCQkJCSBSZWxhdGlvbiBpbmRleFJlbGF0aW9uLAorCQkJCQkJCQkJIGJvb2wgaW5k ZXhfb25seV9zY2FuLAogCQkJCQkJCQkJIFNuYXBzaG90IHNuYXBzaG90LAogCQkJCQkJCQkJIElu ZGV4U2Nhbkluc3RydW1lbnRhdGlvbiAqaW5zdHJ1bWVudCwKIAkJCQkJCQkJCSBpbnQgbmtleXMs IGludCBub3JkZXJieXMsCkBAIC0xODMsMTUgKzE4NCwxMyBAQCBleHRlcm4gdm9pZCBpbmRleF9w YXJhbGxlbHNjYW5faW5pdGlhbGl6ZShSZWxhdGlvbiBoZWFwUmVsYXRpb24sCiBleHRlcm4gdm9p ZCBpbmRleF9wYXJhbGxlbHJlc2NhbihJbmRleFNjYW5EZXNjIHNjYW4pOwogZXh0ZXJuIEluZGV4 U2NhbkRlc2MgaW5kZXhfYmVnaW5zY2FuX3BhcmFsbGVsKFJlbGF0aW9uIGhlYXByZWwsCiAJCQkJ CQkJCQkJCSAgUmVsYXRpb24gaW5kZXhyZWwsCisJCQkJCQkJCQkJCSAgYm9vbCBpbmRleF9vbmx5 X3NjYW4sCiAJCQkJCQkJCQkJCSAgSW5kZXhTY2FuSW5zdHJ1bWVudGF0aW9uICppbnN0cnVtZW50 LAogCQkJCQkJCQkJCQkgIGludCBua2V5cywgaW50IG5vcmRlcmJ5cywKIAkJCQkJCQkJCQkJICBQ YXJhbGxlbEluZGV4U2NhbkRlc2MgcHNjYW4sCiAJCQkJCQkJCQkJCSAgdWludDMyIGZsYWdzKTsK IGV4dGVybiBJdGVtUG9pbnRlciBpbmRleF9nZXRuZXh0X3RpZChJbmRleFNjYW5EZXNjIHNjYW4s CiAJCQkJCQkJCQkgU2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24pOwotZXh0ZXJuIGJvb2wgaW5kZXhf ZmV0Y2hfaGVhcChJbmRleFNjYW5EZXNjIHNjYW4sIFR1cGxlVGFibGVTbG90ICpzbG90KTsKLWV4 dGVybiBib29sIGluZGV4X2dldG5leHRfc2xvdChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJl Y3Rpb24gZGlyZWN0aW9uLAotCQkJCQkJCSAgIFR1cGxlVGFibGVTbG90ICpzbG90KTsKIGV4dGVy biBpbnQ2NCBpbmRleF9nZXRiaXRtYXAoSW5kZXhTY2FuRGVzYyBzY2FuLCBUSURCaXRtYXAgKmJp dG1hcCk7CiAKIGV4dGVybiBJbmRleEJ1bGtEZWxldGVSZXN1bHQgKmluZGV4X2J1bGtfZGVsZXRl KEluZGV4VmFjdXVtSW5mbyAqaW5mbywKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9o ZWFwYW0uaCBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9oZWFwYW0uaAppbmRleCA1MTc2NDc4YzIuLjNj YTQyZWI5MyAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvYWNjZXNzL2hlYXBhbS5oCisrKyBiL3Ny Yy9pbmNsdWRlL2FjY2Vzcy9oZWFwYW0uaApAQCAtMTI4LDggKzEyOCw4IEBAIHR5cGVkZWYgc3Ry dWN0IEluZGV4RmV0Y2hIZWFwRGF0YQogCUJ1ZmZlcgkJeHNfY2J1ZjsKIAlCbG9ja051bWJlciB4 c19ibGs7CiAKLQkvKiBDdXJyZW50IGhlYXAgYmxvY2sncyBjb3JyZXNwb25kaW5nIHBhZ2UgaW4g dGhlIHZpc2liaWxpdHkgbWFwICovCi0JQnVmZmVyCQl4c192bWJ1ZmZlcjsKKwkvKiBGb3Igdmlz aWJpbGl0eSBtYXAgY2hlY2tzIChpbmRleC1vbmx5IHNjYW5zIGFuZCBvbi1hY2Nlc3MgcHJ1bmlu ZykgKi8KKwlCdWZmZXIJCXhzX3ZtYnVmZmVyOwkvKiB2aXNpYmlsaXR5IG1hcCBidWZmZXIgKi8K IH0gSW5kZXhGZXRjaEhlYXBEYXRhOwogCiAvKiBSZXN1bHQgY29kZXMgZm9yIEhlYXBUdXBsZVNh dGlzZmllc1ZhY3V1bSAqLwpAQCAtNDMwLDE2ICs0MzAsMTUgQEAgZXh0ZXJuIFRyYW5zYWN0aW9u SWQgaGVhcF9pbmRleF9kZWxldGVfdHVwbGVzKFJlbGF0aW9uIHJlbCwKIAkJCQkJCQkJCQkJICBU TV9JbmRleERlbGV0ZU9wICpkZWxzdGF0ZSk7CiAKIC8qIGluIGhlYXAvaGVhcGFtX2luZGV4c2Nh bi5jICovCi1leHRlcm4gSW5kZXhGZXRjaFRhYmxlRGF0YSAqaGVhcGFtX2luZGV4X2ZldGNoX2Jl Z2luKFJlbGF0aW9uIHJlbCwgdWludDMyIGZsYWdzKTsKLWV4dGVybiB2b2lkIGhlYXBhbV9pbmRl eF9mZXRjaF9yZXNldChJbmRleEZldGNoVGFibGVEYXRhICpzY2FuKTsKLWV4dGVybiB2b2lkIGhl YXBhbV9pbmRleF9mZXRjaF9lbmQoSW5kZXhGZXRjaFRhYmxlRGF0YSAqc2Nhbik7CitleHRlcm4g Ym9vbCBoZWFwYW1fZmV0Y2hfdGlkKFJlbGF0aW9uIHJlbCwgSXRlbVBvaW50ZXIgdGlkLCBTbmFw c2hvdCBzbmFwc2hvdCwKKwkJCQkJCQkgVHVwbGVUYWJsZVNsb3QgKnNsb3QsIGJvb2wgKmFsbF9k ZWFkKTsKK2V4dGVybiBJbmRleEZldGNoVGFibGVEYXRhICpoZWFwYW1faW5kZXhfZmV0Y2hfYmVn aW4oSW5kZXhTY2FuRGVzYyBzY2FuLAorCQkJCQkJCQkJCQkJCSB1aW50MzIgZmxhZ3MpOworZXh0 ZXJuIHZvaWQgaGVhcGFtX2luZGV4X2ZldGNoX3Jlc2V0KEluZGV4U2NhbkRlc2Mgc2Nhbik7Citl eHRlcm4gdm9pZCBoZWFwYW1faW5kZXhfZmV0Y2hfZW5kKEluZGV4U2NhbkRlc2Mgc2Nhbik7CiBl eHRlcm4gYm9vbCBoZWFwX2hvdF9zZWFyY2hfYnVmZmVyKEl0ZW1Qb2ludGVyIHRpZCwgUmVsYXRp b24gcmVsYXRpb24sCiAJCQkJCQkJCSAgIEJ1ZmZlciBidWZmZXIsIFNuYXBzaG90IHNuYXBzaG90 LCBIZWFwVHVwbGUgaGVhcFR1cGxlLAogCQkJCQkJCQkgICBib29sICphbGxfZGVhZCwgYm9vbCBm aXJzdF9jYWxsKTsKLWV4dGVybiBib29sIGhlYXBhbV9pbmRleF9mZXRjaF90dXBsZShzdHJ1Y3Qg SW5kZXhGZXRjaFRhYmxlRGF0YSAqc2NhbiwKLQkJCQkJCQkJCSBJdGVtUG9pbnRlciB0aWQsIFNu YXBzaG90IHNuYXBzaG90LAotCQkJCQkJCQkJIFR1cGxlVGFibGVTbG90ICpzbG90LCBib29sICpo ZWFwX2NvbnRpbnVlLAotCQkJCQkJCQkJIGJvb2wgKmFsbF9kZWFkKTsKIAogLyogaW4gaGVhcC9w cnVuZWhlYXAuYyAqLwogZXh0ZXJuIHZvaWQgaGVhcF9wYWdlX3BydW5lX29wdChSZWxhdGlvbiBy ZWxhdGlvbiwgQnVmZmVyIGJ1ZmZlciwKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9y ZWxzY2FuLmggYi9zcmMvaW5jbHVkZS9hY2Nlc3MvcmVsc2Nhbi5oCmluZGV4IDk2MGFiZjZjMi4u OTg2YjRmNWYzIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9hY2Nlc3MvcmVsc2Nhbi5oCisrKyBi L3NyYy9pbmNsdWRlL2FjY2Vzcy9yZWxzY2FuLmgKQEAgLTE2LDYgKzE2LDcgQEAKIAogI2luY2x1 ZGUgImFjY2Vzcy9odHVwX2RldGFpbHMuaCIKICNpbmNsdWRlICJhY2Nlc3MvaXR1cC5oIgorI2lu Y2x1ZGUgImFjY2Vzcy9zZGlyLmgiCiAjaW5jbHVkZSAibm9kZXMvdGlkYml0bWFwLmgiCiAjaW5j bHVkZSAicG9ydC9hdG9taWNzLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9yZWxmaWxlbG9jYXRvci5o IgpAQCAtMjQsNiArMjUsNyBAQAogCiAKIHN0cnVjdCBQYXJhbGxlbFRhYmxlU2NhbkRlc2NEYXRh Oworc3RydWN0IFR1cGxlVGFibGVTbG90OwogCiAvKgogICogR2VuZXJpYyBkZXNjcmlwdG9yIGZv ciB0YWJsZSBzY2Fucy4gVGhpcyBpcyB0aGUgYmFzZS1jbGFzcyBmb3IgdGFibGUgc2NhbnMsCkBA IC0xMTcsMTIgKzExOSwxMyBAQCB0eXBlZGVmIHN0cnVjdCBQYXJhbGxlbEJsb2NrVGFibGVTY2Fu V29ya2VyRGF0YSAqUGFyYWxsZWxCbG9ja1RhYmxlU2NhbldvcmtlcjsKIC8qCiAgKiBCYXNlIGNs YXNzIGZvciBmZXRjaGVzIGZyb20gYSB0YWJsZSB2aWEgYW4gaW5kZXguIFRoaXMgaXMgdGhlIGJh c2UtY2xhc3MKICAqIGZvciBzdWNoIHNjYW5zLCB3aGljaCBuZWVkcyB0byBiZSBlbWJlZGRlZCBp biB0aGUgcmVzcGVjdGl2ZSBzdHJ1Y3QgZm9yCi0gKiBpbmRpdmlkdWFsIEFNcy4KKyAqIGluZGl2 aWR1YWwgdGFibGUgQU1zLgorICoKKyAqIFRoaXMgaXMgZXNzZW50aWFsbHkgdGhlIHRhYmxlIEFN IHNwZWNpZmljIHBvcnRpb24gb2YgSW5kZXhTY2FuRGVzY0RhdGEsCisgKiBhY2Nlc3NlZCB0aHJv dWdoIGl0cyB4c19oZWFwZmV0Y2ggZmllbGQuCiAgKi8KIHR5cGVkZWYgc3RydWN0IEluZGV4RmV0 Y2hUYWJsZURhdGEKIHsKLQlSZWxhdGlvbglyZWw7Ci0KIAkvKgogCSAqIEJpdG1hc2sgb2YgU2Nh bk9wdGlvbnMgYWZmZWN0aW5nIHRoZSByZWxhdGlvbi4gTm8gU09fSU5URVJOQUxfRkxBR1MgYXJl CiAJICogcGVybWl0dGVkLgpAQCAtMTY2LDEwICsxNjksMTAgQEAgdHlwZWRlZiBzdHJ1Y3QgSW5k ZXhTY2FuRGVzY0RhdGEKIAlzdHJ1Y3QgSW5kZXhTY2FuSW5zdHJ1bWVudGF0aW9uICppbnN0cnVt ZW50OwogCiAJLyoKLQkgKiBJbiBhbiBpbmRleC1vbmx5IHNjYW4sIGEgc3VjY2Vzc2Z1bCBhbWdl dHR1cGxlIGNhbGwgbXVzdCBmaWxsIGVpdGhlcgotCSAqIHhzX2l0dXAgKGFuZCB4c19pdHVwZGVz Yykgb3IgeHNfaGl0dXAgKGFuZCB4c19oaXR1cGRlc2MpIHRvIHByb3ZpZGUgdGhlCi0JICogZGF0 YSByZXR1cm5lZCBieSB0aGUgc2Nhbi4gIEl0IGNhbiBmaWxsIGJvdGgsIGluIHdoaWNoIGNhc2Ug dGhlIGhlYXAKLQkgKiBmb3JtYXQgd2lsbCBiZSB1c2VkLgorCSAqIEluIGFuIGluZGV4LW9ubHkg c2NhbiwgYSBzdWNjZXNzZnVsIHRhYmxlX2luZGV4X2dldG5leHRfc2xvdCBjYWxsIG11c3QKKwkg KiBmaWxsIGVpdGhlciB4c19pdHVwIChhbmQgeHNfaXR1cGRlc2MpIG9yIHhzX2hpdHVwIChhbmQg eHNfaGl0dXBkZXNjKSB0bworCSAqIHByb3ZpZGUgdGhlIGRhdGEgcmV0dXJuZWQgYnkgdGhlIHNj YW4uICBJdCBjYW4gZmlsbCBib3RoLCBpbiB3aGljaCBjYXNlCisJICogdGhlIGhlYXAgZm9ybWF0 IHdpbGwgYmUgdXNlZC4KIAkgKi8KIAlJbmRleFR1cGxlCXhzX2l0dXA7CQkvKiBpbmRleCB0dXBs ZSByZXR1cm5lZCBieSBBTSAqLwogCXN0cnVjdCBUdXBsZURlc2NEYXRhICp4c19pdHVwZGVzYzsJ Lyogcm93dHlwZSBkZXNjcmlwdG9yIG9mIHhzX2l0dXAgKi8KQEAgLTE4MSw2ICsxODQsMTQgQEAg dHlwZWRlZiBzdHJ1Y3QgSW5kZXhTY2FuRGVzY0RhdGEKIAkJCQkJCQkJCSAqIGZ1cnRoZXIgcmVz dWx0cyAqLwogCUluZGV4RmV0Y2hUYWJsZURhdGEgKnhzX2hlYXBmZXRjaDsKIAorCS8qCisJICog UmVzb2x2ZWQgdGFibGVfaW5kZXhfZ2V0bmV4dF9zbG90IGNhbGxiYWNrLCB3aGljaCBpcyBzZXQg YnkKKwkgKiB0YWJsZV9pbmRleF9mZXRjaF9iZWdpbiBhdCB0aGUgc3RhcnQgb2YgYW1nZXR0dXBs ZSBzY2FucworCSAqLworCWJvb2wJCSgqeHNfZ2V0bmV4dF9zbG90KSAoc3RydWN0IEluZGV4U2Nh bkRlc2NEYXRhICpzY2FuLAorCQkJCQkJCQkJU2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24sCisJCQkJ CQkJCQlzdHJ1Y3QgVHVwbGVUYWJsZVNsb3QgKnNsb3QpOworCiAJYm9vbAkJeHNfcmVjaGVjazsJ CS8qIFQgbWVhbnMgc2NhbiBrZXlzIG11c3QgYmUgcmVjaGVja2VkICovCiAKIAkvKgpAQCAtMTk0 LDYgKzIwNSwxMyBAQCB0eXBlZGVmIHN0cnVjdCBJbmRleFNjYW5EZXNjRGF0YQogCWJvb2wJICAg KnhzX29yZGVyYnludWxsczsKIAlib29sCQl4c19yZWNoZWNrb3JkZXJieTsKIAorCS8qCisJICog QW4gYXBwcm94aW1hdGUgbGltaXQgb24gdGhlIGFtb3VudCBvZiB3b3JrLCBtZWFzdXJlZCBpbiBw YWdlcyB0b3VjaGVkLAorCSAqIGltcG9zZWQgb24gdGhlIGluZGV4IHNjYW4uICBUaGUgZGVmYXVs dCwgMCwgbWVhbnMgbm8gbGltaXQuICBVc2VkIGJ5CisJICogc2VsZnVuY3MuYyB0byBib3VuZCB0 aGUgY29zdCBvZiBnZXRfYWN0dWFsX3ZhcmlhYmxlX2VuZHBvaW50KCkuCisJICovCisJdWludDgJ CXhzX3Zpc2l0ZWRfcGFnZXNfbGltaXQ7CisKIAkvKiBwYXJhbGxlbCBpbmRleCBzY2FuIGluZm9y bWF0aW9uLCBpbiBzaGFyZWQgbWVtb3J5ICovCiAJc3RydWN0IFBhcmFsbGVsSW5kZXhTY2FuRGVz Y0RhdGEgKnBhcmFsbGVsX3NjYW47CiB9IEluZGV4U2NhbkRlc2NEYXRhOwpAQCAtMjA4LDggKzIy Niw2IEBAIHR5cGVkZWYgc3RydWN0IFBhcmFsbGVsSW5kZXhTY2FuRGVzY0RhdGEKIAljaGFyCQlw c19zbmFwc2hvdF9kYXRhW0ZMRVhJQkxFX0FSUkFZX01FTUJFUl07CiB9CQkJUGFyYWxsZWxJbmRl eFNjYW5EZXNjRGF0YTsKIAotc3RydWN0IFR1cGxlVGFibGVTbG90OwotCiAvKiBTdHJ1Y3QgZm9y IHN0b3JhZ2Utb3ItaW5kZXggc2NhbnMgb2Ygc3lzdGVtIHRhYmxlcyAqLwogdHlwZWRlZiBzdHJ1 Y3QgU3lzU2NhbkRlc2NEYXRhCiB7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9hY2Nlc3MvdGFi bGVhbS5oIGIvc3JjL2luY2x1ZGUvYWNjZXNzL3RhYmxlYW0uaAppbmRleCA0NjQ3Nzg1ZmQuLjYy MDE2ZmQwYiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvYWNjZXNzL3RhYmxlYW0uaAorKysgYi9z cmMvaW5jbHVkZS9hY2Nlc3MvdGFibGVhbS5oCkBAIC0zOCw2ICszOCw3IEBAIHR5cGVkZWYgc3Ry dWN0IEJ1bGtJbnNlcnRTdGF0ZURhdGEgQnVsa0luc2VydFN0YXRlRGF0YTsKIHR5cGVkZWYgc3Ry dWN0IEluZGV4SW5mbyBJbmRleEluZm87CiB0eXBlZGVmIHN0cnVjdCBTYW1wbGVTY2FuU3RhdGUg U2FtcGxlU2NhblN0YXRlOwogdHlwZWRlZiBzdHJ1Y3QgU2NhbktleURhdGEgU2NhbktleURhdGE7 Cit0eXBlZGVmIHN0cnVjdCBJbmRleFNjYW5EZXNjRGF0YSAqSW5kZXhTY2FuRGVzYzsKIHR5cGVk ZWYgc3RydWN0IFZhbGlkYXRlSW5kZXhTdGF0ZSBWYWxpZGF0ZUluZGV4U3RhdGU7CiB0eXBlZGVm IHN0cnVjdCBWYWN1dW1QYXJhbXMgVmFjdXVtUGFyYW1zOwogCkBAIC00NDIsNjAgKzQ0Myw2NiBA QCB0eXBlZGVmIHN0cnVjdCBUYWJsZUFtUm91dGluZQogCSAqLwogCiAJLyoKLQkgKiBQcmVwYXJl IHRvIGZldGNoIHR1cGxlcyBmcm9tIHRoZSByZWxhdGlvbiwgYXMgbmVlZGVkIHdoZW4gZmV0Y2hp bmcKLQkgKiB0dXBsZXMgZm9yIGFuIGluZGV4IHNjYW4uICBUaGUgY2FsbGJhY2sgaGFzIHRvIHJl dHVybiBhbgotCSAqIEluZGV4RmV0Y2hUYWJsZURhdGEsIHdoaWNoIHRoZSBBTSB3aWxsIHR5cGlj YWxseSBlbWJlZCBpbiBhIGxhcmdlcgotCSAqIHN0cnVjdHVyZSB3aXRoIGFkZGl0aW9uYWwgaW5m b3JtYXRpb24uCisJICogUHJlcGFyZSB0byBmZXRjaCB0dXBsZXMsIGFzIG5lZWRlZCB3aGVuIGZl dGNoaW5nIHR1cGxlcyBmb3IgYW4gaW5kZXgKKwkgKiBzY2FuLiAgVGhlIGNhbGxiYWNrIGhhcyB0 byByZXR1cm4gYW4gSW5kZXhGZXRjaFRhYmxlRGF0YSwgd2hpY2ggdGhlIEFNCisJICogd2lsbCB0 eXBpY2FsbHkgZW1iZWQgaW4gYSBsYXJnZXIgc3RydWN0dXJlIHdpdGggYWRkaXRpb25hbCBpbmZv cm1hdGlvbi4KKwkgKiBBIHBvaW50ZXIgdG8gdGhpcyBzdHJ1Y3R1cmUgd2lsbCBiZSBzdG9yZWQg aW4gcGFzc2VkIGluZGV4IHNjYW4KKwkgKiBkZXNjcmlwdG9yJ3MgeHNfaGVhcGZldGNoIGZpZWxk IGJ5IHRoZSBjYWxsZXIgKGNvcmUgZXhlY3V0b3IgY29kZSkuCiAJICoKIAkgKiBmbGFncyBpcyBh IGJpdG1hc2sgb2YgU2Nhbk9wdGlvbnMgYWZmZWN0aW5nIHVuZGVybHlpbmcgdGFibGUgc2Nhbgog CSAqIGJlaGF2aW9yLiBTZWUgc2Nhbl9iZWdpbigpIGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHBh c3NpbmcgdGhlc2UuCiAJICoKLQkgKiBUdXBsZXMgZm9yIGFuIGluZGV4IHNjYW4gY2FuIHRoZW4g YmUgZmV0Y2hlZCB2aWEgaW5kZXhfZmV0Y2hfdHVwbGUuCisJICogQ2FsbGJhY2sgaXMgcmVzcG9u c2libGUgZm9yIHNldHRpbmcgSW5kZXhTY2FuRGVzYy54c19nZXRuZXh0X3Nsb3QgdG8KKwkgKiB0 aGUgYXBwcm9wcmlhdGUgc2xvdC1iYXNlZCBjYWxsYmFjay4gIFR1cGxlcyBjYW4gdGhlbiBiZSBm ZXRjaGVkIHZpYQorCSAqIHRhYmxlX2luZGV4X2dldG5leHRfc2xvdCgpLiAgTm8gc2VwYXJhdGUg c2xvdC1iYXNlZCBjYWxsYmFjayBleGlzdHMgaW4KKwkgKiB0aGlzIHN0cnVjdCEKKwkgKgorCSAq IEluIHByaW5jaXBsZSBhIHNpbmdsZSBnZW5lcmFsLXB1cnBvc2UgY2FsbGJhY2sgKHN0b3JlZCBo ZXJlKSB3b3VsZAorCSAqIHN1ZmZpY2UsIGJ1dCB1c2luZyBzcGVjaWFsaXplZCB2YXJpYW50cyBh bGxvd3MgdGhlIHRhYmxlIEFNIHRvIHByb3ZpZGUKKwkgKiBtaW5pbWFsIGNvZGUgYmFzZWQgb24g Y29uZGl0aW9ucyB0aGF0IGFyZSBmaXhlZCBmb3IgdGhlIHdob2xlIHNjYW4gYXMKKwkgKiBhbiBv cHRpbWl6YXRpb24gKGUuZy4sIHZhcmlhbnRzIGZvciBwbGFpbiBpbmRleCBzY2FucyBhbmQgaW5k ZXgtb25seQorCSAqIHNjYW5zLCBlYWNoIHdpdGggZmV3ZXIgYnJhbmNoZXMpLgorCSAqCisJICog Tm90ZSB0aGF0IEFNcyB0aGF0IGRvIG5vdCBuZWNlc3NhcmlseSB1cGRhdGUgaW5kZXhlcyB3aGVu IGluZGV4ZWQKKwkgKiBjb2x1bW5zIGRvIG5vdCBjaGFuZ2UsIG5lZWQgdG8gcmV0dXJuIHRoZSBj dXJyZW50L2NvcnJlY3QgdmVyc2lvbiBvZgorCSAqIHRoZSB0dXBsZSB0aGF0IGlzIHZpc2libGUg dG8gdGhlIHNuYXBzaG90LCBldmVuIGlmIHRoZSB0aWQgcG9pbnRzIHRvIGFuCisJICogb2xkZXIg dmVyc2lvbiBvZiB0aGUgdHVwbGUuCiAJICovCi0Jc3RydWN0IEluZGV4RmV0Y2hUYWJsZURhdGEg KigqaW5kZXhfZmV0Y2hfYmVnaW4pIChSZWxhdGlvbiByZWwsIHVpbnQzMiBmbGFncyk7CisJc3Ry dWN0IEluZGV4RmV0Y2hUYWJsZURhdGEgKigqaW5kZXhfZmV0Y2hfYmVnaW4pIChJbmRleFNjYW5E ZXNjIHNjYW4sCisJCQkJCQkJCQkJCQkJICB1aW50MzIgZmxhZ3MpOwogCiAJLyoKLQkgKiBSZXNl dCBpbmRleCBmZXRjaC4gVHlwaWNhbGx5IHRoaXMgd2lsbCByZWxlYXNlIGNyb3NzIGluZGV4IGZl dGNoCi0JICogcmVzb3VyY2VzIGhlbGQgaW4gSW5kZXhGZXRjaFRhYmxlRGF0YS4KKwkgKiBSZXNl dCBpbmRleCBzY2FuIGZvciBhIHJlc2Nhbi4gIFJlc2V0cyB0YWJsZS1vd25lZCByZXNvdXJjZXMu CiAJICovCi0Jdm9pZAkJKCppbmRleF9mZXRjaF9yZXNldCkgKHN0cnVjdCBJbmRleEZldGNoVGFi bGVEYXRhICpkYXRhKTsKKwl2b2lkCQkoKmluZGV4X2ZldGNoX3Jlc2V0KSAoSW5kZXhTY2FuRGVz YyBzY2FuKTsKIAogCS8qCi0JICogUmVsZWFzZSByZXNvdXJjZXMgYW5kIGRlYWxsb2NhdGUgaW5k ZXggZmV0Y2guCisJICogUmVsZWFzZSByZXNvdXJjZXMgYW5kIGRlYWxsb2NhdGUgaW5kZXggc2Nh biBzdGF0ZS4KKwkgKi8KKwl2b2lkCQkoKmluZGV4X2ZldGNoX2VuZCkgKEluZGV4U2NhbkRlc2Mg c2Nhbik7CisKKwkvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkgKiBDYWxsYmFja3MgZm9yIG5vbi1tb2Rp Znlpbmcgb3BlcmF0aW9ucyBvbiBpbmRpdmlkdWFsIHR1cGxlcworCSAqIC0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQogCSAqLwotCXZvaWQJCSgqaW5kZXhfZmV0Y2hfZW5kKSAoc3RydWN0IEluZGV4RmV0Y2hUYWJs ZURhdGEgKmRhdGEpOwogCiAJLyoKIAkgKiBGZXRjaCB0dXBsZSBhdCBgdGlkYCBpbnRvIGBzbG90 YCwgYWZ0ZXIgZG9pbmcgYSB2aXNpYmlsaXR5IHRlc3QKIAkgKiBhY2NvcmRpbmcgdG8gYHNuYXBz aG90YC4gSWYgYSB0dXBsZSB3YXMgZm91bmQgYW5kIHBhc3NlZCB0aGUgdmlzaWJpbGl0eQogCSAq IHRlc3QsIHJldHVybiB0cnVlLCBmYWxzZSBvdGhlcndpc2UuCiAJICoKLQkgKiBOb3RlIHRoYXQg QU1zIHRoYXQgZG8gbm90IG5lY2Vzc2FyaWx5IHVwZGF0ZSBpbmRleGVzIHdoZW4gaW5kZXhlZAot CSAqIGNvbHVtbnMgZG8gbm90IGNoYW5nZSwgbmVlZCB0byByZXR1cm4gdGhlIGN1cnJlbnQvY29y cmVjdCB2ZXJzaW9uIG9mCi0JICogdGhlIHR1cGxlIHRoYXQgaXMgdmlzaWJsZSB0byB0aGUgc25h cHNob3QsIGV2ZW4gaWYgdGhlIHRpZCBwb2ludHMgdG8gYW4KLQkgKiBvbGRlciB2ZXJzaW9uIG9m IHRoZSB0dXBsZS4KKwkgKiBUaGlzIGlzIGEgbG93ZXItbGV2ZWwgY2FsbGJhY2sgZm9yIHNpbmds ZS1zaG90IFRJRCBsb29rdXBzIHVzZWQgYnkKKwkgKiBjb25zdHJhaW50IGVuZm9yY2VtZW50IGNv ZGUgKHVuaXF1ZSBjaGVja3MgYW5kIHNpbWlsYXIpLgogCSAqCi0JICogKmNhbGxfYWdhaW4gaXMg ZmFsc2Ugb24gdGhlIGZpcnN0IGNhbGwgdG8gaW5kZXhfZmV0Y2hfdHVwbGUgZm9yIGEgdGlkLgot CSAqIElmIHRoZXJlIHBvdGVudGlhbGx5IGlzIGFub3RoZXIgdHVwbGUgbWF0Y2hpbmcgdGhlIHRp ZCwgKmNhbGxfYWdhaW4KLQkgKiBuZWVkcyB0byBiZSBzZXQgdG8gdHJ1ZSBieSBpbmRleF9mZXRj aF90dXBsZSwgc2lnbmFsaW5nIHRvIHRoZSBjYWxsZXIKLQkgKiB0aGF0IGluZGV4X2ZldGNoX3R1 cGxlIHNob3VsZCBiZSBjYWxsZWQgYWdhaW4gZm9yIHRoZSBzYW1lIHRpZC4KLQkgKgotCSAqICph bGxfZGVhZCwgaWYgYWxsX2RlYWQgaXMgbm90IE5VTEwsIHNob3VsZCBiZSBzZXQgdG8gdHJ1ZSBi eQotCSAqIGluZGV4X2ZldGNoX3R1cGxlIGlmZiBpdCBpcyBndWFyYW50ZWVkIHRoYXQgbm8gYmFj a2VuZCBuZWVkcyB0byBzZWUKLQkgKiB0aGF0IHR1cGxlLiBJbmRleCBBTXMgY2FuIHVzZSB0aGF0 IHRvIGF2b2lkIHJldHVybmluZyB0aGF0IHRpZCBpbgotCSAqIGZ1dHVyZSBzZWFyY2hlcy4KLQkg Ki8KLQlib29sCQkoKmluZGV4X2ZldGNoX3R1cGxlKSAoc3RydWN0IEluZGV4RmV0Y2hUYWJsZURh dGEgKnNjYW4sCi0JCQkJCQkJCQkgIEl0ZW1Qb2ludGVyIHRpZCwKLQkJCQkJCQkJCSAgU25hcHNo b3Qgc25hcHNob3QsCi0JCQkJCQkJCQkgIFR1cGxlVGFibGVTbG90ICpzbG90LAotCQkJCQkJCQkJ ICBib29sICpjYWxsX2FnYWluLCBib29sICphbGxfZGVhZCk7Ci0KLQotCS8qIC0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQotCSAqIENhbGxiYWNrcyBmb3Igbm9uLW1vZGlmeWluZyBvcGVyYXRpb25zIG9uIGluZGl2 aWR1YWwgdHVwbGVzCi0JICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJICogKmFsbF9kZWFkLCBpZiBhbGxf ZGVhZCBpcyBub3QgTlVMTCwgc2hvdWxkIGJlIHNldCB0byB0cnVlIGJ5IGZldGNoX3RpZAorCSAq IGlmZiBpdCBpcyBndWFyYW50ZWVkIHRoYXQgbm8gYmFja2VuZCBuZWVkcyB0byBzZWUgdGhhdCB0 dXBsZS4gSW5kZXggQU1zCisJICogY2FuIHVzZSB0aGF0IHRvIGF2b2lkIHJldHVybmluZyB0aGF0 IHRpZCBpbiBmdXR1cmUgc2VhcmNoZXMuCiAJICovCisJYm9vbAkJKCpmZXRjaF90aWQpIChSZWxh dGlvbiByZWwsCisJCQkJCQkJICBJdGVtUG9pbnRlciB0aWQsCisJCQkJCQkJICBTbmFwc2hvdCBz bmFwc2hvdCwKKwkJCQkJCQkgIFR1cGxlVGFibGVTbG90ICpzbG90LAorCQkJCQkJCSAgYm9vbCAq YWxsX2RlYWQpOwogCiAJLyoKIAkgKiBGZXRjaCB0dXBsZSBhdCBgdGlkYCBpbnRvIGBzbG90YCwg YWZ0ZXIgZG9pbmcgYSB2aXNpYmlsaXR5IHRlc3QKQEAgLTEyMzAsMTYgKzEyMzcsMTggQEAgdGFi bGVfcGFyYWxsZWxzY2FuX3JlaW5pdGlhbGl6ZShSZWxhdGlvbiByZWwsIFBhcmFsbGVsVGFibGVT Y2FuRGVzYyBwc2NhbikKICAqLwogCiAvKgotICogUHJlcGFyZSB0byBmZXRjaCB0dXBsZXMgZnJv bSB0aGUgcmVsYXRpb24sIGFzIG5lZWRlZCB3aGVuIGZldGNoaW5nIHR1cGxlcwotICogZm9yIGFu IGluZGV4IHNjYW4uCisgKiBQcmVwYXJlIHRvIGZldGNoIHR1cGxlcyBmcm9tIHRoZSByZWxhdGlv biBhcyBwYXJ0IG9mIGFuIGluZGV4IHNjYW4uCisgKiBDYWxsZXIgcHV0cyB0aGlzIGluIHRoZSBw YXNzZWQgaW5kZXggc2NhbiBkZXNjcmlwdG9yJ3MgeHNfaGVhcGZldGNoIGZpZWxkLgorICoKKyAq IFR1cGxlcyBmb3IgYW4gaW5kZXggc2NhbiBjYW4gdGhlbiBiZSBmZXRjaGVkIHZpYSB0YWJsZV9p bmRleF9nZXRuZXh0X3Nsb3QoKS4KICAqCiAgKiBmbGFncyBpcyBhIGJpdG1hc2sgb2YgU2Nhbk9w dGlvbnMuIE5vIFNPX0lOVEVSTkFMX0ZMQUdTIGFyZSBwZXJtaXR0ZWQuCi0gKgotICogVHVwbGVz IGZvciBhbiBpbmRleCBzY2FuIGNhbiB0aGVuIGJlIGZldGNoZWQgdmlhIHRhYmxlX2luZGV4X2Zl dGNoX3R1cGxlKCkuCiAgKi8KIHN0YXRpYyBpbmxpbmUgSW5kZXhGZXRjaFRhYmxlRGF0YSAqCi10 YWJsZV9pbmRleF9mZXRjaF9iZWdpbihSZWxhdGlvbiByZWwsIHVpbnQzMiBmbGFncykKK3RhYmxl X2luZGV4X2ZldGNoX2JlZ2luKEluZGV4U2NhbkRlc2Mgc2NhbiwgdWludDMyIGZsYWdzKQogewor CVJlbGF0aW9uCXJlbCA9IHNjYW4tPmhlYXBSZWxhdGlvbjsKKwogCUFzc2VydCgoZmxhZ3MgJiBT T19JTlRFUk5BTF9GTEFHUykgPT0gMCk7CiAKIAkvKgpAQCAtMTI1MCw3NCArMTI1OSwxMDIgQEAg dGFibGVfaW5kZXhfZmV0Y2hfYmVnaW4oUmVsYXRpb24gcmVsLCB1aW50MzIgZmxhZ3MpCiAJaWYg KHVubGlrZWx5KFRyYW5zYWN0aW9uSWRJc1ZhbGlkKENoZWNrWGlkQWxpdmUpICYmICFic3lzc2Nh bikpCiAJCWVsb2coRVJST1IsICJzY2FuIHN0YXJ0ZWQgZHVyaW5nIGxvZ2ljYWwgZGVjb2Rpbmci KTsKIAotCXJldHVybiByZWwtPnJkX3RhYmxlYW0tPmluZGV4X2ZldGNoX2JlZ2luKHJlbCwgZmxh Z3MpOworCXJldHVybiByZWwtPnJkX3RhYmxlYW0tPmluZGV4X2ZldGNoX2JlZ2luKHNjYW4sIGZs YWdzKTsKIH0KIAogLyoKLSAqIFJlc2V0IGluZGV4IGZldGNoLiBUeXBpY2FsbHkgdGhpcyB3aWxs IHJlbGVhc2UgY3Jvc3MgaW5kZXggZmV0Y2ggcmVzb3VyY2VzCi0gKiBoZWxkIGluIEluZGV4RmV0 Y2hUYWJsZURhdGEuCisgKiBSZXNldCBpbmRleCBzY2FuLCBmb3IgYSByZXNjYW4uIFJlc2V0cyB0 YWJsZS1vd25lZCByZXNvdXJjZXMuCiAgKi8KIHN0YXRpYyBpbmxpbmUgdm9pZAotdGFibGVfaW5k ZXhfZmV0Y2hfcmVzZXQoc3RydWN0IEluZGV4RmV0Y2hUYWJsZURhdGEgKnNjYW4pCit0YWJsZV9p bmRleF9mZXRjaF9yZXNldChJbmRleFNjYW5EZXNjIHNjYW4pCiB7Ci0Jc2Nhbi0+cmVsLT5yZF90 YWJsZWFtLT5pbmRleF9mZXRjaF9yZXNldChzY2FuKTsKKwlBc3NlcnQoc2Nhbi0+eHNfaGVhcGZl dGNoKTsKKworCXNjYW4tPmhlYXBSZWxhdGlvbi0+cmRfdGFibGVhbS0+aW5kZXhfZmV0Y2hfcmVz ZXQoc2Nhbik7CiB9CiAKIC8qCi0gKiBSZWxlYXNlIHJlc291cmNlcyBhbmQgZGVhbGxvY2F0ZSBp bmRleCBmZXRjaC4KKyAqIFJlbGVhc2UgcmVzb3VyY2VzIGFuZCBkZWFsbG9jYXRlIHRoZSBJbmRl eEZldGNoVGFibGVEYXRhIGluIHRoZSBzY2FuLgogICovCiBzdGF0aWMgaW5saW5lIHZvaWQKLXRh YmxlX2luZGV4X2ZldGNoX2VuZChzdHJ1Y3QgSW5kZXhGZXRjaFRhYmxlRGF0YSAqc2NhbikKK3Rh YmxlX2luZGV4X2ZldGNoX2VuZChJbmRleFNjYW5EZXNjIHNjYW4pCiB7Ci0Jc2Nhbi0+cmVsLT5y ZF90YWJsZWFtLT5pbmRleF9mZXRjaF9lbmQoc2Nhbik7CisJQXNzZXJ0KHNjYW4tPnhzX2hlYXBm ZXRjaCk7CisKKwlzY2FuLT5oZWFwUmVsYXRpb24tPnJkX3RhYmxlYW0tPmluZGV4X2ZldGNoX2Vu ZChzY2FuKTsKIH0KIAogLyoKLSAqIEZldGNoZXMsIGFzIHBhcnQgb2YgYW4gaW5kZXggc2Nhbiwg dHVwbGUgYXQgYHRpZGAgaW50byBgc2xvdGAsIGFmdGVyIGRvaW5nCi0gKiBhIHZpc2liaWxpdHkg dGVzdCBhY2NvcmRpbmcgdG8gYHNuYXBzaG90YC4gSWYgYSB0dXBsZSB3YXMgZm91bmQgYW5kIHBh c3NlZAotICogdGhlIHZpc2liaWxpdHkgdGVzdCwgcmV0dXJucyB0cnVlLCBmYWxzZSBvdGhlcndp c2UuIE5vdGUgdGhhdCAqdGlkIG1heSBiZQotICogbW9kaWZpZWQgd2hlbiB3ZSByZXR1cm4gdHJ1 ZSAoc2VlIGxhdGVyIHJlbWFya3Mgb24gbXVsdGlwbGUgcm93IHZlcnNpb25zCi0gKiByZWFjaGFi bGUgdmlhIGEgc2luZ2xlIGluZGV4IGVudHJ5KS4KKyAqIEZldGNoIHRoZSBuZXh0IHR1cGxlIGZy b20gYW4gaW5kZXggc2NhbiBpbnRvIGBzbG90YCwgc2Nhbm5pbmcgaW4gdGhlCisgKiBzcGVjaWZp ZWQgZGlyZWN0aW9uLiAgUmV0dXJucyB0cnVlIGlmIGEgdHVwbGUgc2F0aXNmeWluZyB0aGUgc2Nh biBrZXlzIGFuZAorICogdGhlIHNuYXBzaG90IHdhcyBmb3VuZCwgZmFsc2Ugb3RoZXJ3aXNlLiAg VGhlIHR1cGxlIGlzIHN0b3JlZCBpbiB0aGUKKyAqIHNwZWNpZmllZCBzbG90LgogICoKLSAqICpj YWxsX2FnYWluIG5lZWRzIHRvIGJlIGZhbHNlIG9uIHRoZSBmaXJzdCBjYWxsIHRvIHRhYmxlX2lu ZGV4X2ZldGNoX3R1cGxlKCkgZm9yCi0gKiBhIHRpZC4gSWYgdGhlcmUgcG90ZW50aWFsbHkgaXMg YW5vdGhlciB0dXBsZSBtYXRjaGluZyB0aGUgdGlkLCAqY2FsbF9hZ2FpbgotICogd2lsbCBiZSBz ZXQgdG8gdHJ1ZSwgc2lnbmFsaW5nIHRoYXQgdGFibGVfaW5kZXhfZmV0Y2hfdHVwbGUoKSBzaG91 bGQgYmUgY2FsbGVkCi0gKiBhZ2FpbiBmb3IgdGhlIHNhbWUgdGlkLgorICogRGlzcGF0Y2hlcyB0 aHJvdWdoIHNjYW4tPnhzX2dldG5leHRfc2xvdCwgd2hpY2ggaXMgcmVzb2x2ZWQgb25jZSBieQor ICogdGhlIHRhYmxlIEFNJ3MgaW5kZXhfZmV0Y2hfYmVnaW4gY2FsbGJhY2suCiAgKgotICogKmFs bF9kZWFkLCBpZiBhbGxfZGVhZCBpcyBub3QgTlVMTCwgd2lsbCBiZSBzZXQgdG8gdHJ1ZSBieQot ICogdGFibGVfaW5kZXhfZmV0Y2hfdHVwbGUoKSBpZmYgaXQgaXMgZ3VhcmFudGVlZCB0aGF0IG5v IGJhY2tlbmQgbmVlZHMgdG8gc2VlCi0gKiB0aGF0IHR1cGxlLiBJbmRleCBBTXMgY2FuIHVzZSB0 aGF0IHRvIGF2b2lkIHJldHVybmluZyB0aGF0IHRpZCBpbiBmdXR1cmUKLSAqIHNlYXJjaGVzLgor ICogT24gc3VjY2VzcywgcmVzb3VyY2VzIChsaWtlIGJ1ZmZlciBwaW5zKSBhcmUgbGlrZWx5IHRv IGJlIGhlbGQsIGFuZCB3aWxsIGJlCisgKiByZWxlYXNlZCBieSBhIGZ1dHVyZSB0YWJsZV9pbmRl eF9nZXRuZXh0X3Nsb3Qgb3IgaW5kZXhfZW5kc2NhbiBjYWxsLgogICoKLSAqIFRoZSBkaWZmZXJl bmNlIGJldHdlZW4gdGhpcyBmdW5jdGlvbiBhbmQgdGFibGVfdHVwbGVfZmV0Y2hfcm93X3ZlcnNp b24oKQotICogaXMgdGhhdCB0aGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIGN1cnJlbnRseSB2aXNp YmxlIHZlcnNpb24gb2YgYSByb3cgaWYKLSAqIHRoZSBBTSBzdXBwb3J0cyBzdG9yaW5nIG11bHRp cGxlIHJvdyB2ZXJzaW9ucyByZWFjaGFibGUgdmlhIGEgc2luZ2xlIGluZGV4Ci0gKiBlbnRyeSAo bGlrZSBoZWFwJ3MgSE9UKS4gV2hlcmVhcyB0YWJsZV90dXBsZV9mZXRjaF9yb3dfdmVyc2lvbigp IG9ubHkKLSAqIGV2YWx1YXRlcyB0aGUgdHVwbGUgZXhhY3RseSBhdCBgdGlkYC4gT3V0c2lkZSBv ZiBpbmRleCBlbnRyeSAtPnRhYmxlIHR1cGxlCi0gKiBsb29rdXBzLCB0YWJsZV90dXBsZV9mZXRj aF9yb3dfdmVyc2lvbigpIGlzIHdoYXQncyB1c3VhbGx5IG5lZWRlZC4KKyAqIE5vdGU6IGNhbGxl ciBtdXN0IGNoZWNrIHNjYW4tPnhzX3JlY2hlY2ssIGFuZCBwZXJmb3JtIHJlY2hlY2tpbmcgb2Yg dGhlCisgKiBzY2FuIGtleXMgaWYgcmVxdWlyZWQuICBXZSBkbyBub3QgZG8gdGhhdCBoZXJlIGJl Y2F1c2Ugd2UgZG9uJ3QgaGF2ZQorICogZW5vdWdoIGluZm9ybWF0aW9uIHRvIGRvIGl0IGVmZmlj aWVudGx5IGluIHRoZSBnZW5lcmFsIGNhc2UuCisgKgorICogRm9yIGluZGV4LW9ubHkgc2NhbnMs IHRoZSBjYWxsYmFjayBhbHNvIGZpbGxzIHhzX2l0dXAveHNfaXR1cGRlc2Mgb3IKKyAqIHhzX2hp dHVwL3hzX2hpdHVwZGVzYyAob3IgYm90aCkgc28gdGhhdCBpbmRleCBkYXRhIGNhbiBiZSByZXR1 cm5lZCB3aXRob3V0CisgKiBhIGhlYXAgZmV0Y2guCiAgKi8KIHN0YXRpYyBpbmxpbmUgYm9vbAot dGFibGVfaW5kZXhfZmV0Y2hfdHVwbGUoc3RydWN0IEluZGV4RmV0Y2hUYWJsZURhdGEgKnNjYW4s Ci0JCQkJCQlJdGVtUG9pbnRlciB0aWQsCi0JCQkJCQlTbmFwc2hvdCBzbmFwc2hvdCwKLQkJCQkJ CVR1cGxlVGFibGVTbG90ICpzbG90LAotCQkJCQkJYm9vbCAqY2FsbF9hZ2FpbiwgYm9vbCAqYWxs X2RlYWQpCit0YWJsZV9pbmRleF9nZXRuZXh0X3Nsb3QoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2Fu RGlyZWN0aW9uIGRpcmVjdGlvbiwKKwkJCQkJCSBUdXBsZVRhYmxlU2xvdCAqc2xvdCkKIHsKLQly ZXR1cm4gc2Nhbi0+cmVsLT5yZF90YWJsZWFtLT5pbmRleF9mZXRjaF90dXBsZShzY2FuLCB0aWQs IHNuYXBzaG90LAotCQkJCQkJCQkJCQkJCXNsb3QsIGNhbGxfYWdhaW4sCi0JCQkJCQkJCQkJCQkJ YWxsX2RlYWQpOworCUFzc2VydChzY2FuLT54c19oZWFwZmV0Y2gpOworCisJcmV0dXJuIHNjYW4t PnhzX2dldG5leHRfc2xvdChzY2FuLCBkaXJlY3Rpb24sIHNsb3QpOwogfQogCiAvKgotICogVGhp cyBpcyBhIGNvbnZlbmllbmNlIHdyYXBwZXIgYXJvdW5kIHRhYmxlX2luZGV4X2ZldGNoX3R1cGxl KCkgd2hpY2gKLSAqIHJldHVybnMgd2hldGhlciB0aGVyZSBhcmUgdGFibGUgdHVwbGUgaXRlbXMg Y29ycmVzcG9uZGluZyB0byBhbiBpbmRleAotICogZW50cnkuICBUaGlzIGxpa2VseSBpcyBvbmx5 IHVzZWZ1bCB0byB2ZXJpZnkgaWYgdGhlcmUncyBhIGNvbmZsaWN0IGluIGEKLSAqIHVuaXF1ZSBp bmRleC4KKyAqIEZldGNoIHR1cGxlIGF0IGB0aWRgIGludG8gYHNsb3RgLCBhZnRlciBkb2luZyBh IHZpc2liaWxpdHkgdGVzdCBhY2NvcmRpbmcKKyAqIHRvIGBzbmFwc2hvdGAuIElmIGEgdHVwbGUg d2FzIGZvdW5kIGFuZCBwYXNzZWQgdGhlIHZpc2liaWxpdHkgdGVzdCwgcmV0dXJucworICogdHJ1 ZSwgZmFsc2Ugb3RoZXJ3aXNlLiAgVGhpcyBpcyBhIGxvdy1sZXZlbCBpbnRlcmZhY2UgZGVzaWdu ZWQgZm9yIHVzZSBieQorICogY29uc3RyYWludCBlbmZvcmNlbWVudCBjb2RlLCB3aGVyZSBwYXNz aW5nIGEgVElEIGNhbid0IGJlIGF2b2lkZWQuCisgKgorICogTm90ZSB0aGF0ICp0aWQgbWF5IGJl IG1vZGlmaWVkIHdoZW4gd2UgcmV0dXJuIHRydWUgKGUuZy4gZHVlIHRvIGZvbGxvd2luZyBhCisg KiBIT1QgY2hhaW4gaW4gYSBoZWFwYW0gdGFibGUpLiAgQ2FsbGVyIHNob3VsZCBjb25zaWRlciBw YXNzaW5nIGEgcG9pbnRlciB0bworICogYSBtdXRhYmxlIGNvcHkgb2YgdGhlaXIgb3JpZ2luYWwg VElEIHRvIGF2b2lkIHVud2FudGVkIHNpZGUtZWZmZWN0cy4KKyAqCisgKiBJZiBhbGxfZGVhZCBp cyBub3QgTlVMTCwgKmFsbF9kZWFkIHdpbGwgYmUgc2V0IHRvIHRydWUgaGVyZSBpZmYgaXQgaXMK KyAqIGd1YXJhbnRlZWQgdGhhdCBubyBiYWNrZW5kIG5lZWRzIHRvIHNlZSBhbnkgdHVwbGUgcmVh Y2hhYmxlIHRocm91Z2gKKyAqIGNhbGxlcidzIFRJRC4gIFRoaXMgbWVhbnMgdGhhdCBpdCBpcyBz YWZlIHRvIG1hcmsgYW4gaW5kZXggdHVwbGUgY29udGFpbmluZworICogdGhpcyBUSUQgYXMgTFBf REVBRC4KKyAqCisgKiBUaGUgbWFpbiBkaWZmZXJlbmNlIGJldHdlZW4gdGFibGVfdHVwbGVfZmV0 Y2hfcm93X3ZlcnNpb24oKSBhbmQgdGhpcworICogZnVuY3Rpb24gaXMgdGhhdCB3ZSByZXR1cm4g dGhlIGN1cnJlbnRseSB2aXNpYmxlIHZlcnNpb24gb2YgYSByb3csIHdoaWNoCisgKiBtYXR0ZXJz IHdpdGggQU1zIHRoYXQgc3VwcG9ydCBzdG9yaW5nIG11bHRpcGxlIHJvdyB2ZXJzaW9ucyByZWFj aGFibGUgdmlhIGEKKyAqIHNpbmdsZSBUSUQgKGUuZy4sIGR1ZSB0byBoZWFwYW0ncyBIT1QgY2hh aW5zKS4gIFRvIHJlbGlhYmx5IGV2YWx1YXRlCisgKiBleGFjdGx5IHRoZSB0dXBsZSBhdCBgdGlk YCwgY2FsbCB0YWJsZV90dXBsZV9mZXRjaF9yb3dfdmVyc2lvbigpIGluc3RlYWQuCiAgKi8KLWV4 dGVybiBib29sIHRhYmxlX2luZGV4X2ZldGNoX3R1cGxlX2NoZWNrKFJlbGF0aW9uIHJlbCwKLQkJ CQkJCQkJCQkgIEl0ZW1Qb2ludGVyIHRpZCwKLQkJCQkJCQkJCQkgIFNuYXBzaG90IHNuYXBzaG90 LAotCQkJCQkJCQkJCSAgYm9vbCAqYWxsX2RlYWQpOworc3RhdGljIGlubGluZSBib29sCit0YWJs ZV9mZXRjaF90aWQoUmVsYXRpb24gcmVsLAorCQkJCUl0ZW1Qb2ludGVyIHRpZCwKKwkJCQlTbmFw c2hvdCBzbmFwc2hvdCwKKwkJCQlUdXBsZVRhYmxlU2xvdCAqc2xvdCwKKwkJCQlib29sICphbGxf ZGVhZCkKK3sKKwlyZXR1cm4gcmVsLT5yZF90YWJsZWFtLT5mZXRjaF90aWQocmVsLCB0aWQsIHNu YXBzaG90LCBzbG90LCBhbGxfZGVhZCk7Cit9CisKKy8qCisgKiBDb252ZW5pZW5jZSB3cmFwcGVy IGFyb3VuZCB0YWJsZV9mZXRjaF90aWQoKSBmb3IgY2FsbGVycyB0aGF0IGp1c3QgbmVlZCB0bwor ICogY2hlY2sgaWYgYSB0dXBsZSBpcyB2aXNpYmxlLgorICoKKyAqIENhbGxlciBzaG91bGQgbm90 ZSB0aGUgdGFibGVfZmV0Y2hfdGlkIHdhcm5pbmcgYWJvdXQgKnRpZCBiZWluZyBtb2RpZmllZAor ICogd2hlbiB3ZSByZXR1cm4gdHJ1ZSBpbiBzb21lIGNhc2VzLgorICovCitleHRlcm4gYm9vbCB0 YWJsZV9mZXRjaF90aWRfY2hlY2soUmVsYXRpb24gcmVsLAorCQkJCQkJCQkgIEl0ZW1Qb2ludGVy IHRpZCwKKwkJCQkJCQkJICBTbmFwc2hvdCBzbmFwc2hvdCwKKwkJCQkJCQkJICBib29sICphbGxf ZGVhZCk7CiAKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0xMzMxLDkgKzEzNjgsOCBAQCBleHRl cm4gYm9vbCB0YWJsZV9pbmRleF9mZXRjaF90dXBsZV9jaGVjayhSZWxhdGlvbiByZWwsCiAgKiBg c25hcHNob3RgLiBJZiBhIHR1cGxlIHdhcyBmb3VuZCBhbmQgcGFzc2VkIHRoZSB2aXNpYmlsaXR5 IHRlc3QsIHJldHVybnMKICAqIHRydWUsIGZhbHNlIG90aGVyd2lzZS4KICAqCi0gKiBTZWUgdGFi bGVfaW5kZXhfZmV0Y2hfdHVwbGUncyBjb21tZW50IGFib3V0IHdoYXQgdGhlIGRpZmZlcmVuY2Ug YmV0d2VlbgotICogdGhlc2UgZnVuY3Rpb25zIGlzLiBJdCBpcyBjb3JyZWN0IHRvIHVzZSB0aGlz IGZ1bmN0aW9uIG91dHNpZGUgb2YgaW5kZXgKLSAqIGVudHJ5LT50YWJsZSB0dXBsZSBsb29rdXBz LgorICogU2VlIHRhYmxlX2ZldGNoX3RpZCdzIGNvbW1lbnQgYWJvdXQgd2hhdCB0aGUgZGlmZmVy ZW5jZSBiZXR3ZWVuIHRoZXNlCisgKiBmdW5jdGlvbnMgaXMuCiAgKi8KIHN0YXRpYyBpbmxpbmUg Ym9vbAogdGFibGVfdHVwbGVfZmV0Y2hfcm93X3ZlcnNpb24oUmVsYXRpb24gcmVsLApkaWZmIC0t Z2l0IGEvc3JjL2luY2x1ZGUvZXhlY3V0b3IvaW5zdHJ1bWVudF9ub2RlLmggYi9zcmMvaW5jbHVk ZS9leGVjdXRvci9pbnN0cnVtZW50X25vZGUuaAppbmRleCAyYTBmZjM3N2EuLjc4ZjgxMGFhYiAx MDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvZXhlY3V0b3IvaW5zdHJ1bWVudF9ub2RlLmgKKysrIGIv c3JjL2luY2x1ZGUvZXhlY3V0b3IvaW5zdHJ1bWVudF9ub2RlLmgKQEAgLTQ4LDYgKzQ4LDkgQEAg dHlwZWRlZiBzdHJ1Y3QgSW5kZXhTY2FuSW5zdHJ1bWVudGF0aW9uCiB7CiAJLyogSW5kZXggc2Vh cmNoIGNvdW50IChpbmNyZW1lbnRlZCB3aXRoIHBnc3RhdF9jb3VudF9pbmRleF9zY2FuIGNhbGwp ICovCiAJdWludDY0CQluc2VhcmNoZXM7CisKKwkvKiBUYWJsZSB0dXBsZXMgZmV0Y2hlZCBjb3Vu dCAoaW5jcmVtZW50ZWQgZHVyaW5nIGluZGV4LW9ubHkgc2NhbnMpICovCisJdWludDY0CQludGFi bGV0dXBsZWZldGNoZXM7CiB9IEluZGV4U2Nhbkluc3RydW1lbnRhdGlvbjsKIAogLyoKZGlmZiAt LWdpdCBhL3NyYy9pbmNsdWRlL25vZGVzL2V4ZWNub2Rlcy5oIGIvc3JjL2luY2x1ZGUvbm9kZXMv ZXhlY25vZGVzLmgKaW5kZXggMDkwY2ZjY2Y2Li4wYjE4ZTc0Y2EgMTAwNjQ0Ci0tLSBhL3NyYy9p bmNsdWRlL25vZGVzL2V4ZWNub2Rlcy5oCisrKyBiL3NyYy9pbmNsdWRlL25vZGVzL2V4ZWNub2Rl cy5oCkBAIC0xNzg1LDcgKzE3ODUsNiBAQCB0eXBlZGVmIHN0cnVjdCBJbmRleFNjYW5TdGF0ZQog ICoJCUluc3RydW1lbnQJCSAgIGxvY2FsIGluZGV4IHNjYW4gaW5zdHJ1bWVudGF0aW9uCiAgKgkJ U2hhcmVkSW5mbwkJICAgcGFyYWxsZWwgd29ya2VyIGluc3RydW1lbnRhdGlvbiAobm8gbGVhZGVy IGVudHJ5KQogICoJCVRhYmxlU2xvdAkJICAgc2xvdCBmb3IgaG9sZGluZyB0dXBsZXMgZmV0Y2hl ZCBmcm9tIHRoZSB0YWJsZQotICoJCVZNQnVmZmVyCQkgICBidWZmZXIgaW4gdXNlIGZvciB2aXNp YmlsaXR5IG1hcCB0ZXN0aW5nLCBpZiBhbnkKICAqCQlQc2NhbkxlbgkJICAgc2l6ZSBvZiBwYXJh bGxlbCBpbmRleC1vbmx5IHNjYW4gZGVzY3JpcHRvcgogICoJCU5hbWVDU3RyaW5nQXR0TnVtcyBh dHRudW1zIG9mIG5hbWUgdHlwZWQgY29sdW1ucyB0byBwYWQgdG8gTkFNRURBVEFMRU4KICAqCQlO YW1lQ1N0cmluZ0NvdW50ICAgbnVtYmVyIG9mIGVsZW1lbnRzIGluIHRoZSBOYW1lQ1N0cmluZ0F0 dE51bXMgYXJyYXkKQEAgLTE4MDgsNyArMTgwNyw2IEBAIHR5cGVkZWYgc3RydWN0IEluZGV4T25s eVNjYW5TdGF0ZQogCUluZGV4U2Nhbkluc3RydW1lbnRhdGlvbiAqaW9zc19JbnN0cnVtZW50Owog CVNoYXJlZEluZGV4U2Nhbkluc3RydW1lbnRhdGlvbiAqaW9zc19TaGFyZWRJbmZvOwogCVR1cGxl VGFibGVTbG90ICppb3NzX1RhYmxlU2xvdDsKLQlCdWZmZXIJCWlvc3NfVk1CdWZmZXI7CiAJU2l6 ZQkJaW9zc19Qc2NhbkxlbjsKIAlBdHRyTnVtYmVyICppb3NzX05hbWVDU3RyaW5nQXR0TnVtczsK IAlpbnQJCQlpb3NzX05hbWVDU3RyaW5nQ291bnQ7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9h Y2Nlc3MvaGVhcC9oZWFwYW1faGFuZGxlci5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVh cGFtX2hhbmRsZXIuYwppbmRleCAwN2YwNzE4OGQuLjY1N2FlNDQxNCAxMDA2NDQKLS0tIGEvc3Jj L2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtX2hhbmRsZXIuYworKysgYi9zcmMvYmFja2VuZC9h Y2Nlc3MvaGVhcC9oZWFwYW1faGFuZGxlci5jCkBAIC02NTcsOCArNjU3LDggQEAgaGVhcGFtX3Jl bGF0aW9uX2NvcHlfZm9yX2NsdXN0ZXIoUmVsYXRpb24gT2xkSGVhcCwgUmVsYXRpb24gTmV3SGVh cCwKIAogCQl0YWJsZVNjYW4gPSBOVUxMOwogCQloZWFwU2NhbiA9IE5VTEw7Ci0JCWluZGV4U2Nh biA9IGluZGV4X2JlZ2luc2NhbihPbGRIZWFwLCBPbGRJbmRleCwgU25hcHNob3RBbnksIE5VTEws IDAsIDAsCi0JCQkJCQkJCQlTT19OT05FKTsKKwkJaW5kZXhTY2FuID0gaW5kZXhfYmVnaW5zY2Fu KE9sZEhlYXAsIE9sZEluZGV4LCBmYWxzZSwKKwkJCQkJCQkJCVNuYXBzaG90QW55LCBOVUxMLCAw LCAwLCBTT19OT05FKTsKIAkJaW5kZXhfcmVzY2FuKGluZGV4U2NhbiwgTlVMTCwgMCwgTlVMTCwg MCk7CiAJfQogCWVsc2UKQEAgLTY5Niw3ICs2OTYsOCBAQCBoZWFwYW1fcmVsYXRpb25fY29weV9m b3JfY2x1c3RlcihSZWxhdGlvbiBPbGRIZWFwLCBSZWxhdGlvbiBOZXdIZWFwLAogCiAJCWlmIChp bmRleFNjYW4gIT0gTlVMTCkKIAkJewotCQkJaWYgKCFpbmRleF9nZXRuZXh0X3Nsb3QoaW5kZXhT Y2FuLCBGb3J3YXJkU2NhbkRpcmVjdGlvbiwgc2xvdCkpCisJCQlpZiAoIXRhYmxlX2luZGV4X2dl dG5leHRfc2xvdChpbmRleFNjYW4sIEZvcndhcmRTY2FuRGlyZWN0aW9uLAorCQkJCQkJCQkJCSAg c2xvdCkpCiAJCQkJYnJlYWs7CiAKIAkJCS8qIFNpbmNlIHdlIHVzZWQgbm8gc2NhbiBrZXlzLCBz aG91bGQgbmV2ZXIgbmVlZCB0byByZWNoZWNrICovCkBAIC0yNTU2LDcgKzI1NTcsNiBAQCBzdGF0 aWMgY29uc3QgVGFibGVBbVJvdXRpbmUgaGVhcGFtX21ldGhvZHMgPSB7CiAJLmluZGV4X2ZldGNo X2JlZ2luID0gaGVhcGFtX2luZGV4X2ZldGNoX2JlZ2luLAogCS5pbmRleF9mZXRjaF9yZXNldCA9 IGhlYXBhbV9pbmRleF9mZXRjaF9yZXNldCwKIAkuaW5kZXhfZmV0Y2hfZW5kID0gaGVhcGFtX2lu ZGV4X2ZldGNoX2VuZCwKLQkuaW5kZXhfZmV0Y2hfdHVwbGUgPSBoZWFwYW1faW5kZXhfZmV0Y2hf dHVwbGUsCiAKIAkudHVwbGVfaW5zZXJ0ID0gaGVhcGFtX3R1cGxlX2luc2VydCwKIAkudHVwbGVf aW5zZXJ0X3NwZWN1bGF0aXZlID0gaGVhcGFtX3R1cGxlX2luc2VydF9zcGVjdWxhdGl2ZSwKQEAg LTI1NjYsNiArMjU2Niw3IEBAIHN0YXRpYyBjb25zdCBUYWJsZUFtUm91dGluZSBoZWFwYW1fbWV0 aG9kcyA9IHsKIAkudHVwbGVfdXBkYXRlID0gaGVhcGFtX3R1cGxlX3VwZGF0ZSwKIAkudHVwbGVf bG9jayA9IGhlYXBhbV90dXBsZV9sb2NrLAogCisJLmZldGNoX3RpZCA9IGhlYXBhbV9mZXRjaF90 aWQsCiAJLnR1cGxlX2ZldGNoX3Jvd192ZXJzaW9uID0gaGVhcGFtX2ZldGNoX3Jvd192ZXJzaW9u LAogCS50dXBsZV9nZXRfbGF0ZXN0X3RpZCA9IGhlYXBfZ2V0X2xhdGVzdF90aWQsCiAJLnR1cGxl X3RpZF92YWxpZCA9IGhlYXBhbV90dXBsZV90aWRfdmFsaWQsCmRpZmYgLS1naXQgYS9zcmMvYmFj a2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1faW5kZXhzY2FuLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3Mv aGVhcC9oZWFwYW1faW5kZXhzY2FuLmMKaW5kZXggMzNkMTRmMWRlLi5lMWJhMTlkOGEgMTAwNjQ0 Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9pbmRleHNjYW4uYworKysgYi9z cmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1faW5kZXhzY2FuLmMKQEAgLTE0LDMyICsxNCw4 NSBAQAogICovCiAjaW5jbHVkZSAicG9zdGdyZXMuaCIKIAorI2luY2x1ZGUgImFjY2Vzcy9hbWFw aS5oIgogI2luY2x1ZGUgImFjY2Vzcy9oZWFwYW0uaCIKICNpbmNsdWRlICJhY2Nlc3MvcmVsc2Nh bi5oIgorI2luY2x1ZGUgImFjY2Vzcy92aXNpYmlsaXR5bWFwLmgiCiAjaW5jbHVkZSAic3RvcmFn ZS9wcmVkaWNhdGUuaCIKKyNpbmNsdWRlICJ1dGlscy9wZ3N0YXRfaW50ZXJuYWwuaCIKIAogCitz dGF0aWMgYm9vbCBoZWFwYW1faW5kZXhfcGxhaW5fdHVwbGVfZ2V0bmV4dF9zbG90KEluZGV4U2Nh bkRlc2Mgc2NhbiwKKwkJCQkJCQkJCQkJCSAgU2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24sCisJCQkJ CQkJCQkJCQkgIFR1cGxlVGFibGVTbG90ICpzbG90KTsKK3N0YXRpYyBib29sIGhlYXBhbV9pbmRl eF9vbmx5X3R1cGxlX2dldG5leHRfc2xvdChJbmRleFNjYW5EZXNjIHNjYW4sCisJCQkJCQkJCQkJ CQkgU2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24sCisJCQkJCQkJCQkJCQkgVHVwbGVUYWJsZVNsb3Qg KnNsb3QpOworCisvKgorICogU2ltcGxlLCBzaW5nbGUtc2hvdCBUSUQgbG9va3VwIGZvciBjb25z dHJhaW50IGVuZm9yY2VtZW50IGNvZGUgKHVuaXF1ZQorICogY2hlY2tzIGFuZCBzaW1pbGFyKS4g IFRoaXMgaXMgZXNzZW50aWFsbHkganVzdCBhIGhlYXBfaG90X3NlYXJjaF9idWZmZXIKKyAqIHdy YXBwZXIuCisgKgorICogVGhpcyBpc24ndCBhY3R1YWxseSByZWxhdGVkIHRvIGluZGV4IHNjYW5z LCBidXQga2VlcGluZyBpdCBuZWFyCisgKiBoZWFwX2hvdF9zZWFyY2hfYnVmZmVyIGNhbiBoZWxw IHRoZSBjb21waWxlciBnZW5lcmF0ZSBiZXR0ZXIgY29kZS4KKyAqLworYm9vbAoraGVhcGFtX2Zl dGNoX3RpZChSZWxhdGlvbiByZWwsIEl0ZW1Qb2ludGVyIHRpZCwgU25hcHNob3Qgc25hcHNob3Qs CisJCQkJIFR1cGxlVGFibGVTbG90ICpzbG90LCBib29sICphbGxfZGVhZCkKK3sKKwlCdWZmZXJI ZWFwVHVwbGVUYWJsZVNsb3QgKmJzbG90ID0gKEJ1ZmZlckhlYXBUdXBsZVRhYmxlU2xvdCAqKSBz bG90OworCUJ1ZmZlcgkJYnVmOworCWJvb2wJCWZvdW5kOworCisJQXNzZXJ0KFRUU19JU19CVUZG RVJUVVBMRShzbG90KSk7CisKKwlidWYgPSBSZWFkQnVmZmVyKHJlbCwgSXRlbVBvaW50ZXJHZXRC bG9ja051bWJlcih0aWQpKTsKKworCUxvY2tCdWZmZXIoYnVmLCBCVUZGRVJfTE9DS19TSEFSRSk7 CisJZm91bmQgPSBoZWFwX2hvdF9zZWFyY2hfYnVmZmVyKHRpZCwgcmVsLCBidWYsIHNuYXBzaG90 LAorCQkJCQkJCQkgICAmYnNsb3QtPmJhc2UudHVwZGF0YSwgYWxsX2RlYWQsIHRydWUpOworCWJz bG90LT5iYXNlLnR1cGRhdGEudF9zZWxmID0gKnRpZDsKKwlMb2NrQnVmZmVyKGJ1ZiwgQlVGRkVS X0xPQ0tfVU5MT0NLKTsKKworCWlmIChmb3VuZCkKKwl7CisJCXNsb3QtPnR0c190YWJsZU9pZCA9 IFJlbGF0aW9uR2V0UmVsaWQocmVsKTsKKwkJRXhlY1N0b3JlUGlubmVkQnVmZmVySGVhcFR1cGxl KCZic2xvdC0+YmFzZS50dXBkYXRhLCBzbG90LAorCQkJCQkJCQkJICAgYnVmKTsKKwl9CisJZWxz ZQorCQlSZWxlYXNlQnVmZmVyKGJ1Zik7CisKKwlyZXR1cm4gZm91bmQ7Cit9CisKIC8qIC0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQogICogSW5kZXggU2NhbiBDYWxsYmFja3MgZm9yIGhlYXAgQU0KICAqIC0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQogICovCiAKIEluZGV4RmV0Y2hUYWJsZURhdGEgKgotaGVhcGFtX2luZGV4X2Zl dGNoX2JlZ2luKFJlbGF0aW9uIHJlbCwgdWludDMyIGZsYWdzKQoraGVhcGFtX2luZGV4X2ZldGNo X2JlZ2luKEluZGV4U2NhbkRlc2Mgc2NhbiwgdWludDMyIGZsYWdzKQogewogCUluZGV4RmV0Y2hI ZWFwRGF0YSAqaHNjYW4gPSBwYWxsb2MwX29iamVjdChJbmRleEZldGNoSGVhcERhdGEpOwogCi0J aHNjYW4tPnhzX2Jhc2UucmVsID0gcmVsOwogCWhzY2FuLT54c19iYXNlLmZsYWdzID0gZmxhZ3M7 CiAJaHNjYW4tPnhzX2NidWYgPSBJbnZhbGlkQnVmZmVyOwogCWhzY2FuLT54c19ibGsgPSBJbnZh bGlkQmxvY2tOdW1iZXI7CiAJaHNjYW4tPnhzX3ZtYnVmZmVyID0gSW52YWxpZEJ1ZmZlcjsKIAor CS8qIFJlc29sdmUgd2hpY2ggZ2V0bmV4dF9zbG90IGltcGxlbWVudGF0aW9uIHRvIHVzZSBmb3Ig dGhpcyBzY2FuICovCisJaWYgKHNjYW4tPnhzX3dhbnRfaXR1cCkKKwkJc2Nhbi0+eHNfZ2V0bmV4 dF9zbG90ID0gaGVhcGFtX2luZGV4X29ubHlfdHVwbGVfZ2V0bmV4dF9zbG90OworCWVsc2UKKwkJ c2Nhbi0+eHNfZ2V0bmV4dF9zbG90ID0gaGVhcGFtX2luZGV4X3BsYWluX3R1cGxlX2dldG5leHRf c2xvdDsKKwogCXJldHVybiAmaHNjYW4tPnhzX2Jhc2U7CiB9CiAKIHZvaWQKLWhlYXBhbV9pbmRl eF9mZXRjaF9yZXNldChJbmRleEZldGNoVGFibGVEYXRhICpzY2FuKQoraGVhcGFtX2luZGV4X2Zl dGNoX3Jlc2V0KEluZGV4U2NhbkRlc2Mgc2NhbikKIHsKIAkvKgogCSAqIFJlc2V0cyBhcmUgYSBu by1vcC4KQEAgLTUxLDkgKzEwNCw5IEBAIGhlYXBhbV9pbmRleF9mZXRjaF9yZXNldChJbmRleEZl dGNoVGFibGVEYXRhICpzY2FuKQogfQogCiB2b2lkCi1oZWFwYW1faW5kZXhfZmV0Y2hfZW5kKElu ZGV4RmV0Y2hUYWJsZURhdGEgKnNjYW4pCitoZWFwYW1faW5kZXhfZmV0Y2hfZW5kKEluZGV4U2Nh bkRlc2Mgc2NhbikKIHsKLQlJbmRleEZldGNoSGVhcERhdGEgKmhzY2FuID0gKEluZGV4RmV0Y2hI ZWFwRGF0YSAqKSBzY2FuOworCUluZGV4RmV0Y2hIZWFwRGF0YSAqaHNjYW4gPSAoSW5kZXhGZXRj aEhlYXBEYXRhICopIHNjYW4tPnhzX2hlYXBmZXRjaDsKIAogCS8qIGRyb3AgcGluIGlmIHRoZXJl J3MgYSBwaW5uZWQgaGVhcCBwYWdlICovCiAJaWYgKEJ1ZmZlcklzVmFsaWQoaHNjYW4tPnhzX2Ni dWYpKQpAQCAtMjI4LDE0ICsyODEsMTggQEAgaGVhcF9ob3Rfc2VhcmNoX2J1ZmZlcihJdGVtUG9p bnRlciB0aWQsIFJlbGF0aW9uIHJlbGF0aW9uLCBCdWZmZXIgYnVmZmVyLAogCXJldHVybiBmYWxz ZTsKIH0KIAotYm9vbAotaGVhcGFtX2luZGV4X2ZldGNoX3R1cGxlKHN0cnVjdCBJbmRleEZldGNo VGFibGVEYXRhICpzY2FuLAorLyoKKyAqIFRoaXMgaXMgdGhlIGd1dHMgb2YgaGVhcGFtX2luZGV4 X2ZldGNoX2hlYXBfaXRlbSwgd2hlcmUgaXQgYWN0dWFsbHkgZmV0Y2hlcworICogdGhlIGhlYXAg dHVwbGUgaXRzZWxmCisgKi8KK3N0YXRpYyBwZ19hdHRyaWJ1dGVfYWx3YXlzX2lubGluZSBib29s CitoZWFwYW1faW5kZXhfZmV0Y2hfdHVwbGUoUmVsYXRpb24gcmVsLAorCQkJCQkJIEluZGV4RmV0 Y2hIZWFwRGF0YSAqaHNjYW4sCiAJCQkJCQkgSXRlbVBvaW50ZXIgdGlkLAogCQkJCQkJIFNuYXBz aG90IHNuYXBzaG90LAogCQkJCQkJIFR1cGxlVGFibGVTbG90ICpzbG90LAogCQkJCQkJIGJvb2wg KmhlYXBfY29udGludWUsIGJvb2wgKmFsbF9kZWFkKQogewotCUluZGV4RmV0Y2hIZWFwRGF0YSAq aHNjYW4gPSAoSW5kZXhGZXRjaEhlYXBEYXRhICopIHNjYW47CiAJQnVmZmVySGVhcFR1cGxlVGFi bGVTbG90ICpic2xvdCA9IChCdWZmZXJIZWFwVHVwbGVUYWJsZVNsb3QgKikgc2xvdDsKIAlib29s CQlnb3RfaGVhcF90dXBsZTsKIApAQCAtMjUyLDEzICszMDksMTIgQEAgaGVhcGFtX2luZGV4X2Zl dGNoX3R1cGxlKHN0cnVjdCBJbmRleEZldGNoVGFibGVEYXRhICpzY2FuLAogCQlpZiAoQnVmZmVy SXNWYWxpZChoc2Nhbi0+eHNfY2J1ZikpCiAJCQlSZWxlYXNlQnVmZmVyKGhzY2FuLT54c19jYnVm KTsKIAotCQloc2Nhbi0+eHNfY2J1ZiA9IFJlYWRCdWZmZXIoaHNjYW4tPnhzX2Jhc2UucmVsLCBo c2Nhbi0+eHNfYmxrKTsKKwkJaHNjYW4tPnhzX2NidWYgPSBSZWFkQnVmZmVyKHJlbCwgaHNjYW4t PnhzX2Jsayk7CiAKIAkJLyoKIAkJICogUHJ1bmUgcGFnZSB3aGVuIGl0IGlzIHBpbm5lZCBmb3Ig dGhlIGZpcnN0IHRpbWUKIAkJICovCi0JCWhlYXBfcGFnZV9wcnVuZV9vcHQoaHNjYW4tPnhzX2Jh c2UucmVsLCBoc2Nhbi0+eHNfY2J1ZiwKLQkJCQkJCQkmaHNjYW4tPnhzX3ZtYnVmZmVyLAorCQlo ZWFwX3BhZ2VfcHJ1bmVfb3B0KHJlbCwgaHNjYW4tPnhzX2NidWYsICZoc2Nhbi0+eHNfdm1idWZm ZXIsCiAJCQkJCQkJaHNjYW4tPnhzX2Jhc2UuZmxhZ3MgJiBTT19ISU5UX1JFTF9SRUFEX09OTFkp OwogCX0KIApAQCAtMjY4LDcgKzMyNCw3IEBAIGhlYXBhbV9pbmRleF9mZXRjaF90dXBsZShzdHJ1 Y3QgSW5kZXhGZXRjaFRhYmxlRGF0YSAqc2NhbiwKIAkvKiBPYnRhaW4gc2hhcmUtbG9jayBvbiB0 aGUgYnVmZmVyIHNvIHdlIGNhbiBleGFtaW5lIHZpc2liaWxpdHkgKi8KIAlMb2NrQnVmZmVyKGhz Y2FuLT54c19jYnVmLCBCVUZGRVJfTE9DS19TSEFSRSk7CiAJZ290X2hlYXBfdHVwbGUgPSBoZWFw X2hvdF9zZWFyY2hfYnVmZmVyKHRpZCwKLQkJCQkJCQkJCQkJaHNjYW4tPnhzX2Jhc2UucmVsLAor CQkJCQkJCQkJCQlyZWwsCiAJCQkJCQkJCQkJCWhzY2FuLT54c19jYnVmLAogCQkJCQkJCQkJCQlz bmFwc2hvdCwKIAkJCQkJCQkJCQkJJmJzbG90LT5iYXNlLnR1cGRhdGEsCkBAIC0yODUsNyArMzQx LDcgQEAgaGVhcGFtX2luZGV4X2ZldGNoX3R1cGxlKHN0cnVjdCBJbmRleEZldGNoVGFibGVEYXRh ICpzY2FuLAogCQkgKi8KIAkJKmhlYXBfY29udGludWUgPSAhSXNNVkNDTGlrZVNuYXBzaG90KHNu YXBzaG90KTsKIAotCQlzbG90LT50dHNfdGFibGVPaWQgPSBSZWxhdGlvbkdldFJlbGlkKHNjYW4t PnJlbCk7CisJCXNsb3QtPnR0c190YWJsZU9pZCA9IFJlbGF0aW9uR2V0UmVsaWQocmVsKTsKIAkJ RXhlY1N0b3JlQnVmZmVySGVhcFR1cGxlKCZic2xvdC0+YmFzZS50dXBkYXRhLCBzbG90LCBoc2Nh bi0+eHNfY2J1Zik7CiAJfQogCWVsc2UKQEAgLTI5NiwzICszNTIsMTk2IEBAIGhlYXBhbV9pbmRl eF9mZXRjaF90dXBsZShzdHJ1Y3QgSW5kZXhGZXRjaFRhYmxlRGF0YSAqc2NhbiwKIAogCXJldHVy biBnb3RfaGVhcF90dXBsZTsKIH0KKworLyoKKyAqIEdldCB0aGUgc2NhbidzIG5leHQgaGVhcCBp dGVtLgorICoKKyAqIFRoZSByZXN1bHQgaXMgYSB2aXNpYmxlIGhlYXAgdHVwbGUgYXNzb2NpYXRl ZCB3aXRoIHRoZSBpbmRleCBUSUQgbW9zdAorICogcmVjZW50bHkgZmV0Y2hlZCBieSBvdXIgY2Fs bGVyIGluIHNjYW4tPnhzX2hlYXB0aWQsIG9yIE5VTEwgaWYgbm8gbW9yZQorICogbWF0Y2hpbmcg dHVwbGVzIGV4aXN0LiAgKFRoZXJlIGNhbiBiZSBtb3JlIHRoYW4gb25lIG1hdGNoaW5nIHR1cGxl IGJlY2F1c2UKKyAqIG9mIEhPVCBjaGFpbnMsIGFsdGhvdWdoIHdoZW4gdXNpbmcgYW4gTVZDQyBz bmFwc2hvdCBpdCBzaG91bGQgYmUgaW1wb3NzaWJsZQorICogZm9yIG1vcmUgdGhhbiBvbmUgc3Vj aCB0dXBsZSB0byBleGlzdC4pCisgKgorICogT24gc3VjY2VzcywgdGhlIGJ1ZmZlciBjb250YWlu aW5nIHRoZSBoZWFwIHR1cCBpcyBwaW5uZWQuICBUaGUgcGluIG11c3QgYmUKKyAqIGRyb3BwZWQg ZWxzZXdoZXJlLgorICovCitzdGF0aWMgcGdfYXR0cmlidXRlX2Fsd2F5c19pbmxpbmUgYm9vbAor aGVhcGFtX2luZGV4X2ZldGNoX2hlYXBfaXRlbShJbmRleFNjYW5EZXNjIHNjYW4sIEluZGV4RmV0 Y2hIZWFwRGF0YSAqaHNjYW4sCisJCQkJCQkJIFR1cGxlVGFibGVTbG90ICpzbG90LCBib29sICpo ZWFwX2NvbnRpbnVlKQoreworCWJvb2wJCWFsbF9kZWFkID0gZmFsc2U7CisJYm9vbAkJZm91bmQ7 CisKKwlmb3VuZCA9IGhlYXBhbV9pbmRleF9mZXRjaF90dXBsZShzY2FuLT5oZWFwUmVsYXRpb24s IGhzY2FuLAorCQkJCQkJCQkJICZzY2FuLT54c19oZWFwdGlkLAorCQkJCQkJCQkJIHNjYW4tPnhz X3NuYXBzaG90LCBzbG90LAorCQkJCQkJCQkJIGhlYXBfY29udGludWUsICZhbGxfZGVhZCk7CisK KwlpZiAoZm91bmQpCisJCXBnc3RhdF9jb3VudF9oZWFwX2ZldGNoKHNjYW4tPmluZGV4UmVsYXRp b24pOworCisJLyoKKwkgKiBJZiB3ZSBzY2FubmVkIGEgd2hvbGUgSE9UIGNoYWluIGFuZCBmb3Vu ZCBvbmx5IGRlYWQgdHVwbGVzLCB0ZWxsIGluZGV4CisJICogQU0gdG8ga2lsbCBpdHMgZW50cnkg Zm9yIHRoYXQgVElEICh0aGlzIHdpbGwgdGFrZSBlZmZlY3QgaW4gdGhlIG5leHQKKwkgKiBhbWdl dHR1cGxlIGNhbGwsIGluIGluZGV4X2dldG5leHRfdGlkKS4gIFdlIGRvIG5vdCBkbyB0aGlzIHdo ZW4gaW4KKwkgKiByZWNvdmVyeSBiZWNhdXNlIGl0IG1heSB2aW9sYXRlIE1WQ0MgdG8gZG8gc28u ICBTZWUgY29tbWVudHMgaW4KKwkgKiBSZWxhdGlvbkdldEluZGV4U2NhbigpLgorCSAqLworCWlm ICghc2Nhbi0+eGFjdFN0YXJ0ZWRJblJlY292ZXJ5KQorCQlzY2FuLT5raWxsX3ByaW9yX3R1cGxl ID0gYWxsX2RlYWQ7CisKKwlyZXR1cm4gZm91bmQ7Cit9CisKKy8qCisgKiBDb21tb24gaW1wbGVt ZW50YXRpb24gZm9yIGJvdGggaGVhcGFtX2luZGV4XypfZ2V0bmV4dF9zbG90IHZhcmlhbnRzLgor ICoKKyAqIFRoZSByZXN1bHQgaXMgdHJ1ZSBpZiBhIHR1cGxlIHNhdGlzZnlpbmcgdGhlIHNjYW4g a2V5cyBhbmQgdGhlIHNuYXBzaG90IHdhcworICogZm91bmQsIGZhbHNlIG90aGVyd2lzZS4gIFRo ZSB0dXBsZSBpcyBzdG9yZWQgaW4gdGhlIHNwZWNpZmllZCBzbG90LgorICoKKyAqIE9uIHN1Y2Nl c3MsIHJlc291cmNlcyAobGlrZSBidWZmZXIgcGlucykgYXJlIGxpa2VseSB0byBiZSBoZWxkLCBh bmQgd2lsbCBiZQorICogZHJvcHBlZCBieSBhIGZ1dHVyZSBjYWxsIGhlcmUgKG9yIGJ5IGEgbGF0 ZXIgY2FsbCB0byBoZWFwYW1faW5kZXhfZmV0Y2hfZW5kCisgKiB0aHJvdWdoIGluZGV4X2VuZHNj YW4pLgorICoKKyAqIFRoZSBpbmRleF9vbmx5IHBhcmFtZXRlciBpcyBhIGNvbXBpbGUtdGltZSBj b25zdGFudCBhdCBlYWNoIGNhbGwgc2l0ZSwKKyAqIGFsbG93aW5nIHRoZSBjb21waWxlciB0byBz cGVjaWFsaXplIHRoZSBjb2RlIGZvciBlYWNoIHZhcmlhbnQuCisgKi8KK3N0YXRpYyBwZ19hdHRy aWJ1dGVfYWx3YXlzX2lubGluZSBib29sCitoZWFwYW1faW5kZXhfZ2V0bmV4dF9zbG90KEluZGV4 U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24sCisJCQkJCQkgIFR1cGxlVGFi bGVTbG90ICpzbG90LCBib29sIGluZGV4X29ubHkpCit7CisJSW5kZXhGZXRjaEhlYXBEYXRhICpo c2NhbiA9IChJbmRleEZldGNoSGVhcERhdGEgKikgc2Nhbi0+eHNfaGVhcGZldGNoOworCWJvb2wJ ICAgKmhlYXBfY29udGludWUgPSAmc2Nhbi0+eHNfaGVhcF9jb250aW51ZTsKKwlib29sCQlhbGxf dmlzaWJsZSA9IGZhbHNlOworCUJsb2NrTnVtYmVyIGxhc3RfdmlzaXRlZF9ibG9jayA9IEludmFs aWRCbG9ja051bWJlcjsKKwl1aW50OAkJbl92aXNpdGVkX3BhZ2VzID0gMDsKKwlJdGVtUG9pbnRl ciB0aWQgPSBOVUxMOworCisJZm9yICg7OykKKwl7CisJCWlmICghKmhlYXBfY29udGludWUpCisJ CXsKKwkJCS8qIEdldCB0aGUgbmV4dCBUSUQgZnJvbSB0aGUgaW5kZXggKi8KKwkJCXRpZCA9IGlu ZGV4X2dldG5leHRfdGlkKHNjYW4sIGRpcmVjdGlvbik7CisKKwkJCS8qIElmIHdlJ3JlIG91dCBv ZiBpbmRleCBlbnRyaWVzLCB3ZSdyZSBkb25lICovCisJCQlpZiAodGlkID09IE5VTEwpCisJCQkJ YnJlYWs7CisKKwkJCS8qIEZvciBpbmRleC1vbmx5IHNjYW5zLCBjaGVjayB0aGUgdmlzaWJpbGl0 eSBtYXAgKi8KKwkJCWlmIChpbmRleF9vbmx5KQorCQkJCWFsbF92aXNpYmxlID0gVk1fQUxMX1ZJ U0lCTEUoc2Nhbi0+aGVhcFJlbGF0aW9uLAorCQkJCQkJCQkJCQkgSXRlbVBvaW50ZXJHZXRCbG9j a051bWJlcih0aWQpLAorCQkJCQkJCQkJCQkgJmhzY2FuLT54c192bWJ1ZmZlcik7CisJCX0KKwor CQlBc3NlcnQoSXRlbVBvaW50ZXJJc1ZhbGlkKCZzY2FuLT54c19oZWFwdGlkKSk7CisKKwkJaWYg KGluZGV4X29ubHkpCisJCXsKKwkJCS8qCisJCQkgKiBXZSBjYW4gc2tpcCB0aGUgaGVhcCBmZXRj aCBpZiB0aGUgVElEIHJlZmVyZW5jZXMgYSBoZWFwIHBhZ2Ugb24KKwkJCSAqIHdoaWNoIGFsbCB0 dXBsZXMgYXJlIGtub3duIHZpc2libGUgdG8gZXZlcnlib2R5LiAgSW4gYW55IGNhc2UsCisJCQkg KiB3ZSdsbCB1c2UgdGhlIGluZGV4IHR1cGxlIG5vdCB0aGUgaGVhcCB0dXBsZSBhcyB0aGUgZGF0 YQorCQkJICogc291cmNlLgorCQkJICovCisJCQlpZiAoIWFsbF92aXNpYmxlKQorCQkJeworCQkJ CS8qCisJCQkJICogUmF0cywgd2UgaGF2ZSB0byB2aXNpdCB0aGUgaGVhcCB0byBjaGVjayB2aXNp YmlsaXR5LgorCQkJCSAqLworCQkJCWlmIChzY2FuLT5pbnN0cnVtZW50KQorCQkJCQlzY2FuLT5p bnN0cnVtZW50LT5udGFibGV0dXBsZWZldGNoZXMrKzsKKworCQkJCWlmICghaGVhcGFtX2luZGV4 X2ZldGNoX2hlYXBfaXRlbShzY2FuLCBoc2Nhbiwgc2xvdCwKKwkJCQkJCQkJCQkJCSAgaGVhcF9j b250aW51ZSkpCisJCQkJeworCQkJCQkvKgorCQkJCQkgKiBObyB2aXNpYmxlIHR1cGxlLiAgSWYg Y2FsbGVyIHNldCBhIHZpc2l0ZWQtcGFnZXMgbGltaXQKKwkJCQkJICogKG9ubHkgc2VsZnVuY3Mu YyBkb2VzIHRoaXMpLCBjb3VudCBkaXN0aW5jdCBoZWFwIHBhZ2VzCisJCQkJCSAqIGFuZCBnaXZl IHVwIG9uY2Ugd2UndmUgdmlzaXRlZCB0b28gbWFueS4KKwkJCQkJICovCisJCQkJCWlmICh1bmxp a2VseShzY2FuLT54c192aXNpdGVkX3BhZ2VzX2xpbWl0ID4gMCkpCisJCQkJCXsKKwkJCQkJCUFz c2VydChoc2Nhbi0+eHNfYmxrID09IEl0ZW1Qb2ludGVyR2V0QmxvY2tOdW1iZXIodGlkKSk7CisK KwkJCQkJCWlmIChoc2Nhbi0+eHNfYmxrICE9IGxhc3RfdmlzaXRlZF9ibG9jaykKKwkJCQkJCXsK KwkJCQkJCQlsYXN0X3Zpc2l0ZWRfYmxvY2sgPSBoc2Nhbi0+eHNfYmxrOworCQkJCQkJCWlmICgr K25fdmlzaXRlZF9wYWdlcyA+IHNjYW4tPnhzX3Zpc2l0ZWRfcGFnZXNfbGltaXQpCisJCQkJCQkJ CXJldHVybiBmYWxzZTsJLyogZ2l2ZSB1cCAqLworCQkJCQkJfQorCQkJCQl9CisJCQkJCWNvbnRp bnVlOwkvKiBubyB2aXNpYmxlIHR1cGxlLCB0cnkgbmV4dCBpbmRleCBlbnRyeSAqLworCQkJCX0K KworCQkJCS8qIFdlIGRvbid0IGFjdHVhbGx5IG5lZWQgdGhlIGhlYXAgdHVwbGUgZm9yIGFueXRo aW5nICovCisJCQkJRXhlY0NsZWFyVHVwbGUoc2xvdCk7CisKKwkJCQkvKgorCQkJCSAqIE9ubHkg TVZDQyBzbmFwc2hvdHMgYXJlIHN1cHBvcnRlZCB3aXRoIHN0YW5kYXJkIGluZGV4LW9ubHkKKwkJ CQkgKiBzY2Fucywgc28gdGhlcmUgc2hvdWxkIGJlIG5vIG5lZWQgdG8ga2VlcCBmb2xsb3dpbmcg dGhlIEhPVAorCQkJCSAqIGNoYWluIG9uY2UgYSB2aXNpYmxlIGVudHJ5IGhhcyBiZWVuIGZvdW5k LiAgT3RoZXIgY2FsbGVycworCQkJCSAqIChjdXJyZW50bHkgb25seSBzZWxmdW5jcy5jKSB1c2Ug U25hcHNob3ROb25WYWN1dW1hYmxlLCBhbmQKKwkJCQkgKiB3YW50IHVzIHRvIGFzc3VtZSB0aGF0 IGp1c3QgaGF2aW5nIG9uZSB2aXNpYmxlIHR1cGxlIGluIHRoZQorCQkJCSAqIGhvdCBjaGFpbiBp cyBhbHdheXMgZ29vZCBlbm91Z2guCisJCQkJICovCisJCQkJQXNzZXJ0KCEoKmhlYXBfY29udGlu dWUgJiYgSXNNVkNDU25hcHNob3Qoc2Nhbi0+eHNfc25hcHNob3QpKSk7CisJCQl9CisJCQllbHNl CisJCQl7CisJCQkJLyoKKwkJCQkgKiBXZSBkaWRuJ3QgYWNjZXNzIHRoZSBoZWFwLCBzbyB3ZSds bCBuZWVkIHRvIHRha2UgYQorCQkJCSAqIHByZWRpY2F0ZSBsb2NrIGV4cGxpY2l0bHksIGFzIGlm IHdlIGhhZC4gIEZvciBub3cgd2UgZG8KKwkJCQkgKiB0aGF0IGF0IHBhZ2UgbGV2ZWwuCisJCQkJ ICovCisJCQkJUHJlZGljYXRlTG9ja1BhZ2Uoc2Nhbi0+aGVhcFJlbGF0aW9uLAorCQkJCQkJCQkg IEl0ZW1Qb2ludGVyR2V0QmxvY2tOdW1iZXIodGlkKSwKKwkJCQkJCQkJICBzY2FuLT54c19zbmFw c2hvdCk7CisJCQl9CisKKwkJCS8qCisJCQkgKiBSZXR1cm4gbWF0Y2hpbmcgaW5kZXggdHVwbGUg bm93IHNldCBpbiBzY2FuLT54c19pdHVwIChvciByZXR1cm4KKwkJCSAqIG1hdGNoaW5nIGhlYXAg dHVwbGUgbm93IHNldCBpbiBzY2FuLT54c19oaXR1cCkKKwkJCSAqLworCQkJcmV0dXJuIHRydWU7 CisJCX0KKwkJZWxzZQorCQl7CisJCQkvKgorCQkJICogRmV0Y2ggdGhlIG5leHQgKG9yIG9ubHkp IHZpc2libGUgaGVhcCB0dXBsZSBmb3IgdGhpcyBpbmRleAorCQkJICogZW50cnkuICBJZiB3ZSBk b24ndCBmaW5kIGFueXRoaW5nLCBsb29wIGFyb3VuZCBhbmQgZ3JhYiB0aGUKKwkJCSAqIG5leHQg VElEIGZyb20gdGhlIGluZGV4LgorCQkJICovCisJCQlpZiAoaGVhcGFtX2luZGV4X2ZldGNoX2hl YXBfaXRlbShzY2FuLCBoc2Nhbiwgc2xvdCwKKwkJCQkJCQkJCQkJIGhlYXBfY29udGludWUpKQor CQkJCXJldHVybiB0cnVlOworCQl9CisJfQorCisJcmV0dXJuIGZhbHNlOworfQorCisvKiB4c19n ZXRuZXh0X3Nsb3QgY2FsbGJhY2s6IGFtZ2V0dHVwbGUsIHBsYWluIGluZGV4IHNjYW4gKi8KK3N0 YXRpYyBwZ19hdHRyaWJ1dGVfaG90IGJvb2wKK2hlYXBhbV9pbmRleF9wbGFpbl90dXBsZV9nZXRu ZXh0X3Nsb3QoSW5kZXhTY2FuRGVzYyBzY2FuLAorCQkJCQkJCQkJICBTY2FuRGlyZWN0aW9uIGRp cmVjdGlvbiwKKwkJCQkJCQkJCSAgVHVwbGVUYWJsZVNsb3QgKnNsb3QpCit7CisJQXNzZXJ0KCFz Y2FuLT54c193YW50X2l0dXApOworCUFzc2VydChzY2FuLT5pbmRleFJlbGF0aW9uLT5yZF9pbmRh bS0+YW1nZXR0dXBsZSAhPSBOVUxMKTsKKworCXJldHVybiBoZWFwYW1faW5kZXhfZ2V0bmV4dF9z bG90KHNjYW4sIGRpcmVjdGlvbiwgc2xvdCwgZmFsc2UpOworfQorCisvKiB4c19nZXRuZXh0X3Ns b3QgY2FsbGJhY2s6IGFtZ2V0dHVwbGUsIGluZGV4LW9ubHkgc2NhbiAqLworc3RhdGljIHBnX2F0 dHJpYnV0ZV9ob3QgYm9vbAoraGVhcGFtX2luZGV4X29ubHlfdHVwbGVfZ2V0bmV4dF9zbG90KElu ZGV4U2NhbkRlc2Mgc2NhbiwKKwkJCQkJCQkJCSBTY2FuRGlyZWN0aW9uIGRpcmVjdGlvbiwKKwkJ CQkJCQkJCSBUdXBsZVRhYmxlU2xvdCAqc2xvdCkKK3sKKwlBc3NlcnQoc2Nhbi0+eHNfd2FudF9p dHVwKTsKKwlBc3NlcnQoc2Nhbi0+aW5kZXhSZWxhdGlvbi0+cmRfaW5kYW0tPmFtZ2V0dHVwbGUg IT0gTlVMTCk7CisKKwlyZXR1cm4gaGVhcGFtX2luZGV4X2dldG5leHRfc2xvdChzY2FuLCBkaXJl Y3Rpb24sIHNsb3QsIHRydWUpOworfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hl YXAvdmlzaWJpbGl0eW1hcC5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvdmlzaWJpbGl0eW1h cC5jCmluZGV4IDRmZDQ3MDcwMi4uNGJhOWY0OGU5IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9h Y2Nlc3MvaGVhcC92aXNpYmlsaXR5bWFwLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAv dmlzaWJpbGl0eW1hcC5jCkBAIC0zMTMsNyArMzEzLDMyIEBAIHZpc2liaWxpdHltYXBfc2V0KEJs b2NrTnVtYmVyIGhlYXBCbGssCiAgKiBzaW5jZSB3ZSBkb24ndCBsb2NrIHRoZSB2aXNpYmlsaXR5 IG1hcCBwYWdlIGVpdGhlciwgaXQncyBldmVuIHBvc3NpYmxlIHRoYXQKICAqIHNvbWVvbmUgZWxz ZSBjb3VsZCBoYXZlIGNoYW5nZWQgdGhlIGJpdCBqdXN0IGJlZm9yZSB3ZSBsb29rIGF0IGl0LCBi dXQgeWV0CiAgKiB3ZSBtaWdodCBzZWUgdGhlIG9sZCB2YWx1ZS4gIEl0IGlzIHRoZSBjYWxsZXIn cyByZXNwb25zaWJpbGl0eSB0byBkZWFsIHdpdGgKLSAqIGFsbCBjb25jdXJyZW5jeSBpc3N1ZXMh CisgKiBhbGwgY29uY3VycmVuY3kgaXNzdWVzISAgSW4gcHJhY3RpY2UgaXQgY2FuJ3QgYmUgc3Rh bGUgZW5vdWdoIHRvIG1hdHRlciBmb3IKKyAqIHRoZSBwcmltYXJ5IHVzZSBjYXNlOiBpbmRleC1v bmx5IHNjYW5zIHRoYXQgY2hlY2sgd2hldGhlciBhIGhlYXAgZmV0Y2ggY2FuCisgKiBiZSBza2lw cGVkLgorICoKKyAqIFRoZSBhcmd1bWVudCBmb3Igd2h5IGl0IGNhbid0IGJlIHN0YWxlIGVub3Vn aCB0byBtYXR0ZXIgZm9yIHRoZSBwcmltYXJ5IHVzZQorICogY2FzZSBpcyBhcyBmb2xsb3dzOgor ICoKKyAqIEluc2VydHM6IHdlIG5lZWQgdG8gZGV0ZWN0IHRoYXQgYSBWTSBiaXQgd2FzIGNsZWFy ZWQgYnkgYW4gaW5zZXJ0IHJpZ2h0CisgKiBhd2F5LCBiZWNhdXNlIHRoZSBuZXcgdHVwbGUgaXMg cHJlc2VudCBpbiB0aGUgaW5kZXggYnV0IG5vdCB5ZXQgdmlzaWJsZS4KKyAqIFJlYWRpbmcgdGhl IFRJRCBmcm9tIHRoZSBpbmRleCBwYWdlICh1bmRlciBhIHNoYXJlZCBsb2NrIG9uIHRoZSBpbmRl eAorICogYnVmZmVyKSBpcyBzZXJpYWxpemVkIHdpdGggdGhlIGluc2VydGlvbiBvZiB0aGUgVElE IGludG8gdGhlIGluZGV4ICh1bmRlcgorICogYW4gZXhjbHVzaXZlIGxvY2sgb24gdGhlIHNhbWUg aW5kZXggYnVmZmVyKS4gIEJlY2F1c2UgdGhlIFZNIGJpdCBpcyBjbGVhcmVkCisgKiBiZWZvcmUg dGhlIGluZGV4IGlzIHVwZGF0ZWQsIGFuZCBsb2NraW5nL3VubG9ja2luZyBvZiB0aGUgaW5kZXgg cGFnZSBhY3RzCisgKiBhcyBhIGZ1bGwgbWVtb3J5IGJhcnJpZXIsIHdlIGFyZSBzdXJlIHRvIHNl ZSB0aGUgY2xlYXJlZCBiaXQgd2hlbmV2ZXIgd2UKKyAqIHNlZSBhIHJlY2VudGx5LWluc2VydGVk IFRJRC4KKyAqCisgKiBEZWxldGVzOiB0aGUgY2xlYXJpbmcgb2YgdGhlIFZNIGJpdCBieSBhIGRl bGV0ZSBpcyBOT1Qgc2VyaWFsaXplZCB3aXRoIHRoZQorICogaW5kZXggcGFnZSBhY2Nlc3MsIGJl Y2F1c2UgZGVsZXRlcyBkbyBub3QgdXBkYXRlIHRoZSBpbmRleCBwYWdlIChvbmx5CisgKiBWQUNV VU0gcmVtb3ZlcyB0aGUgaW5kZXggVElEKS4gIFNvIHdlIG1heSBzZWUgYSBzaWduaWZpY2FudGx5 IHN0YWxlIHZhbHVlLgorICogSG93ZXZlciwgd2UgZG9uJ3QgbmVlZCB0byBkZXRlY3QgdGhlIGRl bGV0ZSByaWdodCBhd2F5LCBiZWNhdXNlIHRoZSB0dXBsZQorICogcmVtYWlucyB2aXNpYmxlIHVu dGlsIHRoZSBkZWxldGluZyB0cmFuc2FjdGlvbiBjb21taXRzIG9yIHRoZSBzdGF0ZW1lbnQKKyAq IGVuZHMgKGlmIGl0J3Mgb3VyIG93biB0cmFuc2FjdGlvbikuICBJbiBlaXRoZXIgY2FzZSwgdGhl IGxvY2sgb24gdGhlIFZNCisgKiBidWZmZXIgd2lsbCBoYXZlIGJlZW4gcmVsZWFzZWQgKGFjdGlu ZyBhcyBhIHdyaXRlIGJhcnJpZXIpIGFmdGVyIGNsZWFyaW5nCisgKiB0aGUgYml0LiAgQW5kIGZv ciB1cyB0byBoYXZlIGEgc25hcHNob3QgdGhhdCBpbmNsdWRlcyB0aGUgZGVsZXRpbmcKKyAqIHRy YW5zYWN0aW9uIChtYWtpbmcgdGhlIHR1cGxlIGludmlzaWJsZSksIHdlIG11c3QgaGF2ZSBhY3F1 aXJlZAorICogUHJvY0FycmF5TG9jayBhZnRlciB0aGF0IHRpbWUsIGFjdGluZyBhcyBhIHJlYWQg YmFycmllci4KICAqLwogdWludDgKIHZpc2liaWxpdHltYXBfZ2V0X3N0YXR1cyhSZWxhdGlvbiBy ZWwsIEJsb2NrTnVtYmVyIGhlYXBCbGssIEJ1ZmZlciAqdm1idWYpCmRpZmYgLS1naXQgYS9zcmMv YmFja2VuZC9hY2Nlc3MvaW5kZXgvZ2VuYW0uYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9n ZW5hbS5jCmluZGV4IDE0MDg5ODljNS4uYWNjOWYzZTZhIDEwMDY0NAotLS0gYS9zcmMvYmFja2Vu ZC9hY2Nlc3MvaW5kZXgvZ2VuYW0uYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvZ2Vu YW0uYwpAQCAtMTI2LDYgKzEyNiw4IEBAIFJlbGF0aW9uR2V0SW5kZXhTY2FuKFJlbGF0aW9uIGlu ZGV4UmVsYXRpb24sIGludCBua2V5cywgaW50IG5vcmRlcmJ5cykKIAlzY2FuLT54c19oaXR1cCA9 IE5VTEw7CiAJc2Nhbi0+eHNfaGl0dXBkZXNjID0gTlVMTDsKIAorCXNjYW4tPnhzX3Zpc2l0ZWRf cGFnZXNfbGltaXQgPSAwOworCiAJcmV0dXJuIHNjYW47CiB9CiAKQEAgLTQ1NCw3ICs0NTYsNyBA QCBzeXN0YWJsZV9iZWdpbnNjYW4oUmVsYXRpb24gaGVhcFJlbGF0aW9uLAogCQkJCWVsb2coRVJS T1IsICJjb2x1bW4gaXMgbm90IGluIGluZGV4Iik7CiAJCX0KIAotCQlzeXNzY2FuLT5pc2NhbiA9 IGluZGV4X2JlZ2luc2NhbihoZWFwUmVsYXRpb24sIGlyZWwsCisJCXN5c3NjYW4tPmlzY2FuID0g aW5kZXhfYmVnaW5zY2FuKGhlYXBSZWxhdGlvbiwgaXJlbCwgZmFsc2UsCiAJCQkJCQkJCQkJIHNu YXBzaG90LCBOVUxMLCBua2V5cywgMCwKIAkJCQkJCQkJCQkgU09fTk9ORSk7CiAJCWluZGV4X3Jl c2NhbihzeXNzY2FuLT5pc2NhbiwgaWR4a2V5LCBua2V5cywgTlVMTCwgMCk7CkBAIC01MTgsNyAr NTIwLDggQEAgc3lzdGFibGVfZ2V0bmV4dChTeXNTY2FuRGVzYyBzeXNzY2FuKQogCiAJaWYgKHN5 c3NjYW4tPmlyZWwpCiAJewotCQlpZiAoaW5kZXhfZ2V0bmV4dF9zbG90KHN5c3NjYW4tPmlzY2Fu LCBGb3J3YXJkU2NhbkRpcmVjdGlvbiwgc3lzc2Nhbi0+c2xvdCkpCisJCWlmICh0YWJsZV9pbmRl eF9nZXRuZXh0X3Nsb3Qoc3lzc2Nhbi0+aXNjYW4sIEZvcndhcmRTY2FuRGlyZWN0aW9uLAorCQkJ CQkJCQkJIHN5c3NjYW4tPnNsb3QpKQogCQl7CiAJCQlib29sCQlzaG91bGRGcmVlOwogCkBAIC03 MTYsNyArNzE5LDcgQEAgc3lzdGFibGVfYmVnaW5zY2FuX29yZGVyZWQoUmVsYXRpb24gaGVhcFJl bGF0aW9uLAogCWlmIChUcmFuc2FjdGlvbklkSXNWYWxpZChDaGVja1hpZEFsaXZlKSkKIAkJYnN5 c3NjYW4gPSB0cnVlOwogCi0Jc3lzc2Nhbi0+aXNjYW4gPSBpbmRleF9iZWdpbnNjYW4oaGVhcFJl bGF0aW9uLCBpbmRleFJlbGF0aW9uLAorCXN5c3NjYW4tPmlzY2FuID0gaW5kZXhfYmVnaW5zY2Fu KGhlYXBSZWxhdGlvbiwgaW5kZXhSZWxhdGlvbiwgZmFsc2UsCiAJCQkJCQkJCQkgc25hcHNob3Qs IE5VTEwsIG5rZXlzLCAwLAogCQkJCQkJCQkJIFNPX05PTkUpOwogCWluZGV4X3Jlc2NhbihzeXNz Y2FuLT5pc2NhbiwgaWR4a2V5LCBua2V5cywgTlVMTCwgMCk7CkBAIC03MzYsNyArNzM5LDcgQEAg c3lzdGFibGVfZ2V0bmV4dF9vcmRlcmVkKFN5c1NjYW5EZXNjIHN5c3NjYW4sIFNjYW5EaXJlY3Rp b24gZGlyZWN0aW9uKQogCUhlYXBUdXBsZQlodHVwID0gTlVMTDsKIAogCUFzc2VydChzeXNzY2Fu LT5pcmVsKTsKLQlpZiAoaW5kZXhfZ2V0bmV4dF9zbG90KHN5c3NjYW4tPmlzY2FuLCBkaXJlY3Rp b24sIHN5c3NjYW4tPnNsb3QpKQorCWlmICh0YWJsZV9pbmRleF9nZXRuZXh0X3Nsb3Qoc3lzc2Nh bi0+aXNjYW4sIGRpcmVjdGlvbiwgc3lzc2Nhbi0+c2xvdCkpCiAJCWh0dXAgPSBFeGVjRmV0Y2hT bG90SGVhcFR1cGxlKHN5c3NjYW4tPnNsb3QsIGZhbHNlLCBOVUxMKTsKIAogCS8qIFNlZSBub3Rl cyBpbiBzeXN0YWJsZV9nZXRuZXh0ICovCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3Mv aW5kZXgvaW5kZXhhbS5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L2luZGV4YW0uYwppbmRl eCAyMzI4OGE0ZjkuLjNmYWM0YzMwZCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL2lu ZGV4L2luZGV4YW0uYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvaW5kZXhhbS5jCkBA IC0yNCw5ICsyNCw3IEBACiAgKgkJaW5kZXhfcGFyYWxsZWxzY2FuX2luaXRpYWxpemUgLSBpbml0 aWFsaXplIHBhcmFsbGVsIHNjYW4KICAqCQlpbmRleF9wYXJhbGxlbHJlc2NhbiAgLSAocmUpc3Rh cnQgYSBwYXJhbGxlbCBzY2FuIG9mIGFuIGluZGV4CiAgKgkJaW5kZXhfYmVnaW5zY2FuX3BhcmFs bGVsIC0gam9pbiBwYXJhbGxlbCBpbmRleCBzY2FuCi0gKgkJaW5kZXhfZ2V0bmV4dF90aWQJLSBn ZXQgdGhlIG5leHQgVElEIGZyb20gYSBzY2FuCi0gKgkJaW5kZXhfZmV0Y2hfaGVhcAkJLSBnZXQg dGhlIHNjYW4ncyBuZXh0IGhlYXAgdHVwbGUKLSAqCQlpbmRleF9nZXRuZXh0X3Nsb3QJLSBnZXQg dGhlIG5leHQgdHVwbGUgZnJvbSBhIHNjYW4KKyAqCQlpbmRleF9nZXRuZXh0X3RpZAktIGFtZ2V0 dHVwbGUgdGFibGUgQU0gaGVscGVyIHJvdXRpbmUKICAqCQlpbmRleF9nZXRiaXRtYXAgLSBnZXQg YWxsIHR1cGxlcyBmcm9tIGEgc2NhbgogICoJCWluZGV4X2J1bGtfZGVsZXRlCS0gYnVsayBkZWxl dGlvbiBvZiBpbmRleCB0dXBsZXMKICAqCQlpbmRleF92YWN1dW1fY2xlYW51cAktIHBvc3QtZGVs ZXRpb24gY2xlYW51cCBvZiBhbiBpbmRleApAQCAtMTA1LDkgKzEwMyw2IEBAIGRvIHsgXAogCQkJ IENwcEFzU3RyaW5nKHBuYW1lKSwgUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUoc2Nhbi0+aW5kZXhS ZWxhdGlvbikpOyBcCiB9IHdoaWxlKDApCiAKLXN0YXRpYyBJbmRleFNjYW5EZXNjIGluZGV4X2Jl Z2luc2Nhbl9pbnRlcm5hbChSZWxhdGlvbiBpbmRleFJlbGF0aW9uLAotCQkJCQkJCQkJCQkgIGlu dCBua2V5cywgaW50IG5vcmRlcmJ5cywgU25hcHNob3Qgc25hcHNob3QsCi0JCQkJCQkJCQkJCSAg UGFyYWxsZWxJbmRleFNjYW5EZXNjIHBzY2FuLCBib29sIHRlbXBfc25hcCk7CiBzdGF0aWMgaW5s aW5lIHZvaWQgdmFsaWRhdGVfcmVsYXRpb25fYXNfaW5kZXgoUmVsYXRpb24gcik7CiAKIApAQCAt MjQ4LDg0ICsyNDMsMTcgQEAgaW5kZXhfaW5zZXJ0X2NsZWFudXAoUmVsYXRpb24gaW5kZXhSZWxh dGlvbiwKIAkJaW5kZXhSZWxhdGlvbi0+cmRfaW5kYW0tPmFtaW5zZXJ0Y2xlYW51cChpbmRleFJl bGF0aW9uLCBpbmRleEluZm8pOwogfQogCi0vKgotICogaW5kZXhfYmVnaW5zY2FuIC0gc3RhcnQg YSBzY2FuIG9mIGFuIGluZGV4IHdpdGggYW1nZXR0dXBsZQotICoKLSAqIENhbGxlciBtdXN0IGJl IGhvbGRpbmcgc3VpdGFibGUgbG9ja3Mgb24gdGhlIGhlYXAgYW5kIHRoZSBpbmRleC4KLSAqLwot SW5kZXhTY2FuRGVzYwotaW5kZXhfYmVnaW5zY2FuKFJlbGF0aW9uIGhlYXBSZWxhdGlvbiwKLQkJ CQlSZWxhdGlvbiBpbmRleFJlbGF0aW9uLAotCQkJCVNuYXBzaG90IHNuYXBzaG90LAotCQkJCUlu ZGV4U2Nhbkluc3RydW1lbnRhdGlvbiAqaW5zdHJ1bWVudCwKLQkJCQlpbnQgbmtleXMsIGludCBu b3JkZXJieXMsCi0JCQkJdWludDMyIGZsYWdzKQotewotCUluZGV4U2NhbkRlc2Mgc2NhbjsKLQot CUFzc2VydChzbmFwc2hvdCAhPSBJbnZhbGlkU25hcHNob3QpOwotCi0JLyogQ2hlY2sgdGhhdCBh IGhpc3RvcmljIHNuYXBzaG90IGlzIG5vdCB1c2VkIGZvciBub24tY2F0YWxvZyB0YWJsZXMgKi8K LQlpZiAoSXNIaXN0b3JpY01WQ0NTbmFwc2hvdChzbmFwc2hvdCkgJiYKLQkJIVJlbGF0aW9uSXNB Y2Nlc3NpYmxlSW5Mb2dpY2FsRGVjb2RpbmcoaGVhcFJlbGF0aW9uKSkKLQl7Ci0JCWVyZXBvcnQo RVJST1IsCi0JCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1RSQU5TQUNUSU9OX1NUQVRFKSwK LQkJCQkgZXJybXNnKCJjYW5ub3QgcXVlcnkgbm9uLWNhdGFsb2cgdGFibGUgXCIlc1wiIGR1cmlu ZyBsb2dpY2FsIGRlY29kaW5nIiwKLQkJCQkJCVJlbGF0aW9uR2V0UmVsYXRpb25OYW1lKGhlYXBS ZWxhdGlvbikpKSk7Ci0JfQotCi0Jc2NhbiA9IGluZGV4X2JlZ2luc2Nhbl9pbnRlcm5hbChpbmRl eFJlbGF0aW9uLCBua2V5cywgbm9yZGVyYnlzLCBzbmFwc2hvdCwgTlVMTCwgZmFsc2UpOwotCi0J LyoKLQkgKiBTYXZlIGFkZGl0aW9uYWwgcGFyYW1ldGVycyBpbnRvIHRoZSBzY2FuZGVzYy4gIEV2 ZXJ5dGhpbmcgZWxzZSB3YXMgc2V0Ci0JICogdXAgYnkgUmVsYXRpb25HZXRJbmRleFNjYW4uCi0J ICovCi0Jc2Nhbi0+aGVhcFJlbGF0aW9uID0gaGVhcFJlbGF0aW9uOwotCXNjYW4tPnhzX3NuYXBz aG90ID0gc25hcHNob3Q7Ci0Jc2Nhbi0+aW5zdHJ1bWVudCA9IGluc3RydW1lbnQ7Ci0KLQkvKiBw cmVwYXJlIHRvIGZldGNoIGluZGV4IG1hdGNoZXMgZnJvbSB0YWJsZSAqLwotCXNjYW4tPnhzX2hl YXBmZXRjaCA9IHRhYmxlX2luZGV4X2ZldGNoX2JlZ2luKGhlYXBSZWxhdGlvbiwgZmxhZ3MpOwot Ci0JcmV0dXJuIHNjYW47Ci19Ci0KLS8qCi0gKiBpbmRleF9iZWdpbnNjYW5fYml0bWFwIC0gc3Rh cnQgYSBzY2FuIG9mIGFuIGluZGV4IHdpdGggYW1nZXRiaXRtYXAKLSAqCi0gKiBBcyBhYm92ZSwg Y2FsbGVyIGhhZCBiZXR0ZXIgYmUgaG9sZGluZyBzb21lIGxvY2sgb24gdGhlIHBhcmVudCBoZWFw Ci0gKiByZWxhdGlvbiwgZXZlbiB0aG91Z2ggaXQncyBub3QgZXhwbGljaXRseSBtZW50aW9uZWQg aGVyZS4KLSAqLwotSW5kZXhTY2FuRGVzYwotaW5kZXhfYmVnaW5zY2FuX2JpdG1hcChSZWxhdGlv biBpbmRleFJlbGF0aW9uLAotCQkJCQkgICBTbmFwc2hvdCBzbmFwc2hvdCwKLQkJCQkJICAgSW5k ZXhTY2FuSW5zdHJ1bWVudGF0aW9uICppbnN0cnVtZW50LAotCQkJCQkgICBpbnQgbmtleXMpCi17 Ci0JSW5kZXhTY2FuRGVzYyBzY2FuOwotCi0JQXNzZXJ0KHNuYXBzaG90ICE9IEludmFsaWRTbmFw c2hvdCk7Ci0KLQlzY2FuID0gaW5kZXhfYmVnaW5zY2FuX2ludGVybmFsKGluZGV4UmVsYXRpb24s IG5rZXlzLCAwLCBzbmFwc2hvdCwgTlVMTCwgZmFsc2UpOwotCi0JLyoKLQkgKiBTYXZlIGFkZGl0 aW9uYWwgcGFyYW1ldGVycyBpbnRvIHRoZSBzY2FuZGVzYy4gIEV2ZXJ5dGhpbmcgZWxzZSB3YXMg c2V0Ci0JICogdXAgYnkgUmVsYXRpb25HZXRJbmRleFNjYW4uCi0JICovCi0Jc2Nhbi0+eHNfc25h cHNob3QgPSBzbmFwc2hvdDsKLQlzY2FuLT5pbnN0cnVtZW50ID0gaW5zdHJ1bWVudDsKLQotCXJl dHVybiBzY2FuOwotfQotCiAvKgogICogaW5kZXhfYmVnaW5zY2FuX2ludGVybmFsIC0tLSBjb21t b24gY29kZSBmb3IgaW5kZXhfYmVnaW5zY2FuIHZhcmlhbnRzCisgKgorICogV2hlbiBoZWFwUmVs YXRpb24gaXMgbm90IE5VTEwsIGFsc28gaW5pdGlhbGl6ZXMgdGFibGUgQU0gaW5kZXggc2NhbiBz dGF0ZS4KICAqLwotc3RhdGljIEluZGV4U2NhbkRlc2MKLWluZGV4X2JlZ2luc2Nhbl9pbnRlcm5h bChSZWxhdGlvbiBpbmRleFJlbGF0aW9uLAorc3RhdGljIHBnX2F0dHJpYnV0ZV9hbHdheXNfaW5s aW5lIEluZGV4U2NhbkRlc2MKK2luZGV4X2JlZ2luc2Nhbl9pbnRlcm5hbChSZWxhdGlvbiBpbmRl eFJlbGF0aW9uLCBSZWxhdGlvbiBoZWFwUmVsYXRpb24sCiAJCQkJCQkgaW50IG5rZXlzLCBpbnQg bm9yZGVyYnlzLCBTbmFwc2hvdCBzbmFwc2hvdCwKLQkJCQkJCSBQYXJhbGxlbEluZGV4U2NhbkRl c2MgcHNjYW4sIGJvb2wgdGVtcF9zbmFwKQorCQkJCQkJIFBhcmFsbGVsSW5kZXhTY2FuRGVzYyBw c2NhbiwKKwkJCQkJCSBJbmRleFNjYW5JbnN0cnVtZW50YXRpb24gKmluc3RydW1lbnQsCisJCQkJ CQkgYm9vbCBpbmRleF9vbmx5X3NjYW4sIGJvb2wgdGVtcF9zbmFwLCB1aW50MzIgZmxhZ3MpCiB7 CiAJSW5kZXhTY2FuRGVzYyBzY2FuOwogCkBAIC0zNDksOSArMjc3LDgwIEBAIGluZGV4X2JlZ2lu c2Nhbl9pbnRlcm5hbChSZWxhdGlvbiBpbmRleFJlbGF0aW9uLAogCXNjYW4tPnBhcmFsbGVsX3Nj YW4gPSBwc2NhbjsKIAlzY2FuLT54c190ZW1wX3NuYXAgPSB0ZW1wX3NuYXA7CiAKKwlzY2FuLT54 c19zbmFwc2hvdCA9IHNuYXBzaG90OworCXNjYW4tPmluc3RydW1lbnQgPSBpbnN0cnVtZW50Owor CisJLyoKKwkgKiBJbml0aWFsaXplIGhlYXAtc2lkZSBzY2FuIHN0YXRlIHdoZW4gYSBoZWFwIHJl bGF0aW9uIGlzIHByb3ZpZGVkLgorCSAqIEJpdG1hcCBpbmRleCBzY2FucyBkb24ndCBwcm92aWRl IG9uZS4KKwkgKi8KKwlpZiAoaGVhcFJlbGF0aW9uICE9IE5VTEwpCisJeworCQlzY2FuLT5oZWFw UmVsYXRpb24gPSBoZWFwUmVsYXRpb247CisJCXNjYW4tPnhzX3dhbnRfaXR1cCA9IGluZGV4X29u bHlfc2NhbjsKKwkJc2Nhbi0+eHNfaGVhcF9jb250aW51ZSA9IGZhbHNlOworCisJCS8qIHByZXBh cmUgdG8gZmV0Y2ggaW5kZXggbWF0Y2hlcyBmcm9tIHRhYmxlICovCisJCXNjYW4tPnhzX2hlYXBm ZXRjaCA9IHRhYmxlX2luZGV4X2ZldGNoX2JlZ2luKHNjYW4sIGZsYWdzKTsKKworCQkvKiB0YWJs ZSBBTSBtdXN0IHNldCB4c19nZXRuZXh0X3Nsb3QgY2FsbGJhY2sgZm9yIHVzICovCisJCUFzc2Vy dChzY2FuLT54c19nZXRuZXh0X3Nsb3QgIT0gTlVMTCk7CisJfQorCiAJcmV0dXJuIHNjYW47CiB9 CiAKKy8qCisgKiBpbmRleF9iZWdpbnNjYW4gLSBzdGFydCBhIHNjYW4gb2YgYW4gaW5kZXggd2l0 aCBhbWdldHR1cGxlCisgKgorICogQ2FsbGVyIG11c3QgYmUgaG9sZGluZyBzdWl0YWJsZSBsb2Nr cyBvbiB0aGUgaGVhcCBhbmQgdGhlIGluZGV4LgorICovCitJbmRleFNjYW5EZXNjCitpbmRleF9i ZWdpbnNjYW4oUmVsYXRpb24gaGVhcFJlbGF0aW9uLAorCQkJCVJlbGF0aW9uIGluZGV4UmVsYXRp b24sCisJCQkJYm9vbCBpbmRleF9vbmx5X3NjYW4sCisJCQkJU25hcHNob3Qgc25hcHNob3QsCisJ CQkJSW5kZXhTY2FuSW5zdHJ1bWVudGF0aW9uICppbnN0cnVtZW50LAorCQkJCWludCBua2V5cywg aW50IG5vcmRlcmJ5cywKKwkJCQl1aW50MzIgZmxhZ3MpCit7CisJQXNzZXJ0KHNuYXBzaG90ICE9 IEludmFsaWRTbmFwc2hvdCk7CisKKwkvKiBDaGVjayB0aGF0IGEgaGlzdG9yaWMgc25hcHNob3Qg aXMgbm90IHVzZWQgZm9yIG5vbi1jYXRhbG9nIHRhYmxlcyAqLworCWlmIChJc0hpc3RvcmljTVZD Q1NuYXBzaG90KHNuYXBzaG90KSAmJgorCQkhUmVsYXRpb25Jc0FjY2Vzc2libGVJbkxvZ2ljYWxE ZWNvZGluZyhoZWFwUmVsYXRpb24pKQorCXsKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQkoZXJyY29k ZShFUlJDT0RFX0lOVkFMSURfVFJBTlNBQ1RJT05fU1RBVEUpLAorCQkJCSBlcnJtc2coImNhbm5v dCBxdWVyeSBub24tY2F0YWxvZyB0YWJsZSBcIiVzXCIgZHVyaW5nIGxvZ2ljYWwgZGVjb2Rpbmci LAorCQkJCQkJUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUoaGVhcFJlbGF0aW9uKSkpKTsKKwl9CisK KwlyZXR1cm4gaW5kZXhfYmVnaW5zY2FuX2ludGVybmFsKGluZGV4UmVsYXRpb24sIGhlYXBSZWxh dGlvbiwKKwkJCQkJCQkJCW5rZXlzLCBub3JkZXJieXMsCisJCQkJCQkJCQlzbmFwc2hvdCwgTlVM TCwgaW5zdHJ1bWVudCwKKwkJCQkJCQkJCWluZGV4X29ubHlfc2NhbiwgZmFsc2UsIGZsYWdzKTsK K30KKworLyoKKyAqIGluZGV4X2JlZ2luc2Nhbl9iaXRtYXAgLSBzdGFydCBhIHNjYW4gb2YgYW4g aW5kZXggd2l0aCBhbWdldGJpdG1hcAorICoKKyAqIEFzIGFib3ZlLCBjYWxsZXIgaGFkIGJldHRl ciBiZSBob2xkaW5nIHNvbWUgbG9jayBvbiB0aGUgcGFyZW50IGhlYXAKKyAqIHJlbGF0aW9uLCBl dmVuIHRob3VnaCBpdCdzIG5vdCBleHBsaWNpdGx5IG1lbnRpb25lZCBoZXJlLgorICovCitJbmRl eFNjYW5EZXNjCitpbmRleF9iZWdpbnNjYW5fYml0bWFwKFJlbGF0aW9uIGluZGV4UmVsYXRpb24s CisJCQkJCSAgIFNuYXBzaG90IHNuYXBzaG90LAorCQkJCQkgICBJbmRleFNjYW5JbnN0cnVtZW50 YXRpb24gKmluc3RydW1lbnQsCisJCQkJCSAgIGludCBua2V5cykKK3sKKwlBc3NlcnQoc25hcHNo b3QgIT0gSW52YWxpZFNuYXBzaG90KTsKKwlBc3NlcnQoSXNNVkNDTGlrZVNuYXBzaG90KHNuYXBz aG90KSk7CisKKwlyZXR1cm4gaW5kZXhfYmVnaW5zY2FuX2ludGVybmFsKGluZGV4UmVsYXRpb24s IE5VTEwsIG5rZXlzLCAwLCBzbmFwc2hvdCwKKwkJCQkJCQkJCU5VTEwsIGluc3RydW1lbnQsIGZh bHNlLCBmYWxzZSwgU09fTk9ORSk7Cit9CisKIC8qIC0tLS0tLS0tLS0tLS0tLS0KICAqCQlpbmRl eF9yZXNjYW4gIC0gKHJlKXN0YXJ0IGEgc2NhbiBvZiBhbiBpbmRleAogICoKQEAgLTM3Nyw3ICsz NzYsNyBAQCBpbmRleF9yZXNjYW4oSW5kZXhTY2FuRGVzYyBzY2FuLAogCiAJLyogcmVzZXQgdGFi bGUgQU0gc3RhdGUgZm9yIHJlc2NhbiAqLwogCWlmIChzY2FuLT54c19oZWFwZmV0Y2gpCi0JCXRh YmxlX2luZGV4X2ZldGNoX3Jlc2V0KHNjYW4tPnhzX2hlYXBmZXRjaCk7CisJCXRhYmxlX2luZGV4 X2ZldGNoX3Jlc2V0KHNjYW4pOwogCiAJc2Nhbi0+a2lsbF9wcmlvcl90dXBsZSA9IGZhbHNlOyAv KiBmb3Igc2FmZXR5ICovCiAJc2Nhbi0+eHNfaGVhcF9jb250aW51ZSA9IGZhbHNlOwpAQCAtMzk5 LDcgKzM5OCw3IEBAIGluZGV4X2VuZHNjYW4oSW5kZXhTY2FuRGVzYyBzY2FuKQogCS8qIFJlbGVh c2UgcmVzb3VyY2VzIChsaWtlIGJ1ZmZlciBwaW5zKSBmcm9tIHRhYmxlIGFjY2Vzc2VzICovCiAJ aWYgKHNjYW4tPnhzX2hlYXBmZXRjaCkKIAl7Ci0JCXRhYmxlX2luZGV4X2ZldGNoX2VuZChzY2Fu LT54c19oZWFwZmV0Y2gpOworCQl0YWJsZV9pbmRleF9mZXRjaF9lbmQoc2Nhbik7CiAJCXNjYW4t PnhzX2hlYXBmZXRjaCA9IE5VTEw7CiAJfQogCkBAIC00NTQsNyArNDUzLDcgQEAgaW5kZXhfcmVz dHJwb3MoSW5kZXhTY2FuRGVzYyBzY2FuKQogCiAJLyogcmVzZXQgdGFibGUgQU0gc3RhdGUgZm9y IHJlc3RvcmluZyB0aGUgbWFya2VkIHBvc2l0aW9uICovCiAJaWYgKHNjYW4tPnhzX2hlYXBmZXRj aCkKLQkJdGFibGVfaW5kZXhfZmV0Y2hfcmVzZXQoc2Nhbi0+eHNfaGVhcGZldGNoKTsKKwkJdGFi bGVfaW5kZXhfZmV0Y2hfcmVzZXQoc2Nhbik7CiAKIAlzY2FuLT5raWxsX3ByaW9yX3R1cGxlID0g ZmFsc2U7IC8qIGZvciBzYWZldHkgKi8KIAlzY2FuLT54c19oZWFwX2NvbnRpbnVlID0gZmFsc2U7 CkBAIC01ODAsNyArNTc5LDcgQEAgaW5kZXhfcGFyYWxsZWxyZXNjYW4oSW5kZXhTY2FuRGVzYyBz Y2FuKQogCiAJLyogcmVzZXQgdGFibGUgQU0gc3RhdGUgZm9yIHJlc2NhbiAqLwogCWlmIChzY2Fu LT54c19oZWFwZmV0Y2gpCi0JCXRhYmxlX2luZGV4X2ZldGNoX3Jlc2V0KHNjYW4tPnhzX2hlYXBm ZXRjaCk7CisJCXRhYmxlX2luZGV4X2ZldGNoX3Jlc2V0KHNjYW4pOwogCiAJLyogYW1wYXJhbGxl bHJlc2NhbiBpcyBvcHRpb25hbDsgYXNzdW1lIG5vLW9wIGlmIG5vdCBwcm92aWRlZCBieSBBTSAq LwogCWlmIChzY2FuLT5pbmRleFJlbGF0aW9uLT5yZF9pbmRhbS0+YW1wYXJhbGxlbHJlc2NhbiAh PSBOVUxMKQpAQCAtNTk3LDQxICs1OTYsMzMgQEAgaW5kZXhfcGFyYWxsZWxyZXNjYW4oSW5kZXhT Y2FuRGVzYyBzY2FuKQogICovCiBJbmRleFNjYW5EZXNjCiBpbmRleF9iZWdpbnNjYW5fcGFyYWxs ZWwoUmVsYXRpb24gaGVhcHJlbCwgUmVsYXRpb24gaW5kZXhyZWwsCisJCQkJCQkgYm9vbCBpbmRl eF9vbmx5X3NjYW4sCiAJCQkJCQkgSW5kZXhTY2FuSW5zdHJ1bWVudGF0aW9uICppbnN0cnVtZW50 LAogCQkJCQkJIGludCBua2V5cywgaW50IG5vcmRlcmJ5cywKIAkJCQkJCSBQYXJhbGxlbEluZGV4 U2NhbkRlc2MgcHNjYW4sCiAJCQkJCQkgdWludDMyIGZsYWdzKQogewogCVNuYXBzaG90CXNuYXBz aG90OwotCUluZGV4U2NhbkRlc2Mgc2NhbjsKIAogCUFzc2VydChSZWxGaWxlTG9jYXRvckVxdWFs cyhoZWFwcmVsLT5yZF9sb2NhdG9yLCBwc2Nhbi0+cHNfbG9jYXRvcikpOwogCUFzc2VydChSZWxG aWxlTG9jYXRvckVxdWFscyhpbmRleHJlbC0+cmRfbG9jYXRvciwgcHNjYW4tPnBzX2luZGV4bG9j YXRvcikpOwogCiAJc25hcHNob3QgPSBSZXN0b3JlU25hcHNob3QocHNjYW4tPnBzX3NuYXBzaG90 X2RhdGEpOwogCVJlZ2lzdGVyU25hcHNob3Qoc25hcHNob3QpOwotCXNjYW4gPSBpbmRleF9iZWdp bnNjYW5faW50ZXJuYWwoaW5kZXhyZWwsIG5rZXlzLCBub3JkZXJieXMsIHNuYXBzaG90LAotCQkJ CQkJCQkJcHNjYW4sIHRydWUpOwogCi0JLyoKLQkgKiBTYXZlIGFkZGl0aW9uYWwgcGFyYW1ldGVy cyBpbnRvIHRoZSBzY2FuZGVzYy4gIEV2ZXJ5dGhpbmcgZWxzZSB3YXMgc2V0Ci0JICogdXAgYnkg aW5kZXhfYmVnaW5zY2FuX2ludGVybmFsLgotCSAqLwotCXNjYW4tPmhlYXBSZWxhdGlvbiA9IGhl YXByZWw7Ci0Jc2Nhbi0+eHNfc25hcHNob3QgPSBzbmFwc2hvdDsKLQlzY2FuLT5pbnN0cnVtZW50 ID0gaW5zdHJ1bWVudDsKLQotCS8qIHByZXBhcmUgdG8gZmV0Y2ggaW5kZXggbWF0Y2hlcyBmcm9t IHRhYmxlICovCi0Jc2Nhbi0+eHNfaGVhcGZldGNoID0gdGFibGVfaW5kZXhfZmV0Y2hfYmVnaW4o aGVhcHJlbCwgZmxhZ3MpOwotCi0JcmV0dXJuIHNjYW47CisJcmV0dXJuIGluZGV4X2JlZ2luc2Nh bl9pbnRlcm5hbChpbmRleHJlbCwgaGVhcHJlbCwgbmtleXMsIG5vcmRlcmJ5cywKKwkJCQkJCQkJ CXNuYXBzaG90LCBwc2NhbiwgaW5zdHJ1bWVudCwKKwkJCQkJCQkJCWluZGV4X29ubHlfc2Nhbiwg dHJ1ZSwgZmxhZ3MpOwogfQogCiAvKiAtLS0tLS0tLS0tLS0tLS0tCi0gKiBpbmRleF9nZXRuZXh0 X3RpZCAtIGdldCB0aGUgbmV4dCBUSUQgZnJvbSBhIHNjYW4KKyAqIGluZGV4X2dldG5leHRfdGlk IC0gYW1nZXR0dXBsZSBpbnRlcmZhY2UKICAqCiAgKiBUaGUgcmVzdWx0IGlzIHRoZSBuZXh0IFRJ RCBzYXRpc2Z5aW5nIHRoZSBzY2FuIGtleXMsCiAgKiBvciBOVUxMIGlmIG5vIG1vcmUgbWF0Y2hp bmcgdHVwbGVzIGV4aXN0LgorICoKKyAqIFRoaXMgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGJ5IHRh YmxlIEFNIGFtZ2V0dHVwbGUtYmFzZWQgaW5kZXggc2NhbgorICogY2FsbGJhY2tzLgogICogLS0t LS0tLS0tLS0tLS0tLQogICovCiBJdGVtUG9pbnRlcgpAQCAtNjYyLDcgKzY1Myw3IEBAIGluZGV4 X2dldG5leHRfdGlkKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24p CiAJewogCQkvKiByZXNldCB0YWJsZSBBTSBzdGF0ZSAqLwogCQlpZiAoc2Nhbi0+eHNfaGVhcGZl dGNoKQotCQkJdGFibGVfaW5kZXhfZmV0Y2hfcmVzZXQoc2Nhbi0+eHNfaGVhcGZldGNoKTsKKwkJ CXRhYmxlX2luZGV4X2ZldGNoX3Jlc2V0KHNjYW4pOwogCiAJCXJldHVybiBOVUxMOwogCX0KQEAg LTY3NCw5NyArNjY1LDYgQEAgaW5kZXhfZ2V0bmV4dF90aWQoSW5kZXhTY2FuRGVzYyBzY2FuLCBT Y2FuRGlyZWN0aW9uIGRpcmVjdGlvbikKIAlyZXR1cm4gJnNjYW4tPnhzX2hlYXB0aWQ7CiB9CiAK LS8qIC0tLS0tLS0tLS0tLS0tLS0KLSAqCQlpbmRleF9mZXRjaF9oZWFwIC0gZ2V0IHRoZSBzY2Fu J3MgbmV4dCBoZWFwIHR1cGxlCi0gKgotICogVGhlIHJlc3VsdCBpcyBhIHZpc2libGUgaGVhcCB0 dXBsZSBhc3NvY2lhdGVkIHdpdGggdGhlIGluZGV4IFRJRCBtb3N0Ci0gKiByZWNlbnRseSBmZXRj aGVkIGJ5IGluZGV4X2dldG5leHRfdGlkLCBvciBOVUxMIGlmIG5vIG1vcmUgbWF0Y2hpbmcgdHVw bGVzCi0gKiBleGlzdC4gIChUaGVyZSBjYW4gYmUgbW9yZSB0aGFuIG9uZSBtYXRjaGluZyB0dXBs ZSBiZWNhdXNlIG9mIEhPVCBjaGFpbnMsCi0gKiBhbHRob3VnaCB3aGVuIHVzaW5nIGFuIE1WQ0Mg c25hcHNob3QgaXQgc2hvdWxkIGJlIGltcG9zc2libGUgZm9yIG1vcmUgdGhhbgotICogb25lIHN1 Y2ggdHVwbGUgdG8gZXhpc3QuKQotICoKLSAqIE9uIHN1Y2Nlc3MsIHRoZSBidWZmZXIgY29udGFp bmluZyB0aGUgaGVhcCB0dXAgaXMgcGlubmVkICh0aGUgcGluIHdpbGwgYmUKLSAqIGRyb3BwZWQg aW4gYSBmdXR1cmUgaW5kZXhfZ2V0bmV4dF90aWQsIGluZGV4X2ZldGNoX2hlYXAgb3IgaW5kZXhf ZW5kc2NhbgotICogY2FsbCkuCi0gKgotICogTm90ZTogY2FsbGVyIG11c3QgY2hlY2sgc2Nhbi0+ eHNfcmVjaGVjaywgYW5kIHBlcmZvcm0gcmVjaGVja2luZyBvZiB0aGUKLSAqIHNjYW4ga2V5cyBp ZiByZXF1aXJlZC4gIFdlIGRvIG5vdCBkbyB0aGF0IGhlcmUgYmVjYXVzZSB3ZSBkb24ndCBoYXZl Ci0gKiBlbm91Z2ggaW5mb3JtYXRpb24gdG8gZG8gaXQgZWZmaWNpZW50bHkgaW4gdGhlIGdlbmVy YWwgY2FzZS4KLSAqIC0tLS0tLS0tLS0tLS0tLS0KLSAqLwotYm9vbAotaW5kZXhfZmV0Y2hfaGVh cChJbmRleFNjYW5EZXNjIHNjYW4sIFR1cGxlVGFibGVTbG90ICpzbG90KQotewotCWJvb2wJCWFs bF9kZWFkID0gZmFsc2U7Ci0JYm9vbAkJZm91bmQ7Ci0KLQlmb3VuZCA9IHRhYmxlX2luZGV4X2Zl dGNoX3R1cGxlKHNjYW4tPnhzX2hlYXBmZXRjaCwgJnNjYW4tPnhzX2hlYXB0aWQsCi0JCQkJCQkJ CQlzY2FuLT54c19zbmFwc2hvdCwgc2xvdCwKLQkJCQkJCQkJCSZzY2FuLT54c19oZWFwX2NvbnRp bnVlLCAmYWxsX2RlYWQpOwotCi0JaWYgKGZvdW5kKQotCQlwZ3N0YXRfY291bnRfaGVhcF9mZXRj aChzY2FuLT5pbmRleFJlbGF0aW9uKTsKLQotCS8qCi0JICogSWYgd2Ugc2Nhbm5lZCBhIHdob2xl IEhPVCBjaGFpbiBhbmQgZm91bmQgb25seSBkZWFkIHR1cGxlcywgdGVsbCBpbmRleAotCSAqIEFN IHRvIGtpbGwgaXRzIGVudHJ5IGZvciB0aGF0IFRJRCAodGhpcyB3aWxsIHRha2UgZWZmZWN0IGlu IHRoZSBuZXh0Ci0JICogYW1nZXR0dXBsZSBjYWxsLCBpbiBpbmRleF9nZXRuZXh0X3RpZCkuICBX ZSBkbyBub3QgZG8gdGhpcyB3aGVuIGluCi0JICogcmVjb3ZlcnkgYmVjYXVzZSBpdCBtYXkgdmlv bGF0ZSBNVkNDIHRvIGRvIHNvLiAgU2VlIGNvbW1lbnRzIGluCi0JICogUmVsYXRpb25HZXRJbmRl eFNjYW4oKS4KLQkgKi8KLQlpZiAoIXNjYW4tPnhhY3RTdGFydGVkSW5SZWNvdmVyeSkKLQkJc2Nh bi0+a2lsbF9wcmlvcl90dXBsZSA9IGFsbF9kZWFkOwotCi0JcmV0dXJuIGZvdW5kOwotfQotCi0v KiAtLS0tLS0tLS0tLS0tLS0tCi0gKgkJaW5kZXhfZ2V0bmV4dF9zbG90IC0gZ2V0IHRoZSBuZXh0 IHR1cGxlIGZyb20gYSBzY2FuCi0gKgotICogVGhlIHJlc3VsdCBpcyB0cnVlIGlmIGEgdHVwbGUg c2F0aXNmeWluZyB0aGUgc2NhbiBrZXlzIGFuZCB0aGUgc25hcHNob3Qgd2FzCi0gKiBmb3VuZCwg ZmFsc2Ugb3RoZXJ3aXNlLiAgVGhlIHR1cGxlIGlzIHN0b3JlZCBpbiB0aGUgc3BlY2lmaWVkIHNs b3QuCi0gKgotICogT24gc3VjY2VzcywgcmVzb3VyY2VzIChsaWtlIGJ1ZmZlciBwaW5zKSBhcmUg bGlrZWx5IHRvIGJlIGhlbGQsIGFuZCB3aWxsIGJlCi0gKiBkcm9wcGVkIGJ5IGEgZnV0dXJlIGlu ZGV4X2dldG5leHRfdGlkLCBpbmRleF9mZXRjaF9oZWFwIG9yIGluZGV4X2VuZHNjYW4KLSAqIGNh bGwpLgotICoKLSAqIE5vdGU6IGNhbGxlciBtdXN0IGNoZWNrIHNjYW4tPnhzX3JlY2hlY2ssIGFu ZCBwZXJmb3JtIHJlY2hlY2tpbmcgb2YgdGhlCi0gKiBzY2FuIGtleXMgaWYgcmVxdWlyZWQuICBX ZSBkbyBub3QgZG8gdGhhdCBoZXJlIGJlY2F1c2Ugd2UgZG9uJ3QgaGF2ZQotICogZW5vdWdoIGlu Zm9ybWF0aW9uIHRvIGRvIGl0IGVmZmljaWVudGx5IGluIHRoZSBnZW5lcmFsIGNhc2UuCi0gKiAt LS0tLS0tLS0tLS0tLS0tCi0gKi8KLWJvb2wKLWluZGV4X2dldG5leHRfc2xvdChJbmRleFNjYW5E ZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyZWN0aW9uLCBUdXBsZVRhYmxlU2xvdCAqc2xvdCkK LXsKLQlmb3IgKDs7KQotCXsKLQkJaWYgKCFzY2FuLT54c19oZWFwX2NvbnRpbnVlKQotCQl7Ci0J CQlJdGVtUG9pbnRlciB0aWQ7Ci0KLQkJCS8qIFRpbWUgdG8gZmV0Y2ggdGhlIG5leHQgVElEIGZy b20gdGhlIGluZGV4ICovCi0JCQl0aWQgPSBpbmRleF9nZXRuZXh0X3RpZChzY2FuLCBkaXJlY3Rp b24pOwotCi0JCQkvKiBJZiB3ZSdyZSBvdXQgb2YgaW5kZXggZW50cmllcywgd2UncmUgZG9uZSAq LwotCQkJaWYgKHRpZCA9PSBOVUxMKQotCQkJCWJyZWFrOwotCi0JCQlBc3NlcnQoSXRlbVBvaW50 ZXJFcXVhbHModGlkLCAmc2Nhbi0+eHNfaGVhcHRpZCkpOwotCQl9Ci0KLQkJLyoKLQkJICogRmV0 Y2ggdGhlIG5leHQgKG9yIG9ubHkpIHZpc2libGUgaGVhcCB0dXBsZSBmb3IgdGhpcyBpbmRleCBl bnRyeS4KLQkJICogSWYgd2UgZG9uJ3QgZmluZCBhbnl0aGluZywgbG9vcCBhcm91bmQgYW5kIGdy YWIgdGhlIG5leHQgVElEIGZyb20KLQkJICogdGhlIGluZGV4LgotCQkgKi8KLQkJQXNzZXJ0KEl0 ZW1Qb2ludGVySXNWYWxpZCgmc2Nhbi0+eHNfaGVhcHRpZCkpOwotCQlpZiAoaW5kZXhfZmV0Y2hf aGVhcChzY2FuLCBzbG90KSkKLQkJCXJldHVybiB0cnVlOwotCX0KLQotCXJldHVybiBmYWxzZTsK LX0KLQogLyogLS0tLS0tLS0tLS0tLS0tLQogICoJCWluZGV4X2dldGJpdG1hcCAtIGdldCBhbGwg dHVwbGVzIGF0IG9uY2UgZnJvbSBhbiBpbmRleCBzY2FuCiAgKgpkaWZmIC0tZ2l0IGEvc3JjL2Jh Y2tlbmQvYWNjZXNzL25idHJlZS9uYnRpbnNlcnQuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRy ZWUvbmJ0aW5zZXJ0LmMKaW5kZXggYzhhZjk3ZGQyLi5mMWI1NWZiMjAgMTAwNjQ0Ci0tLSBhL3Ny Yy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0aW5zZXJ0LmMKKysrIGIvc3JjL2JhY2tlbmQvYWNj ZXNzL25idHJlZS9uYnRpbnNlcnQuYwpAQCAtNTYwLDkgKzU2MCw5IEBAIF9idF9jaGVja191bmlx dWUoUmVsYXRpb24gcmVsLCBCVEluc2VydFN0YXRlIGluc2VydHN0YXRlLCBSZWxhdGlvbiBoZWFw UmVsLAogCQkJCSAqIHdpdGggb3B0aW1pemF0aW9ucyBsaWtlIGhlYXAncyBIT1QsIHdlIGhhdmUg anVzdCBhIHNpbmdsZQogCQkJCSAqIGluZGV4IGVudHJ5IGZvciB0aGUgZW50aXJlIGNoYWluLgog CQkJCSAqLwotCQkJCWVsc2UgaWYgKHRhYmxlX2luZGV4X2ZldGNoX3R1cGxlX2NoZWNrKGhlYXBS ZWwsICZodGlkLAotCQkJCQkJCQkJCQkJCSAgICZTbmFwc2hvdERpcnR5LAotCQkJCQkJCQkJCQkJ CSAgICZhbGxfZGVhZCkpCisJCQkJZWxzZSBpZiAodGFibGVfZmV0Y2hfdGlkX2NoZWNrKGhlYXBS ZWwsICZodGlkLAorCQkJCQkJCQkJCQkgICAmU25hcHNob3REaXJ0eSwKKwkJCQkJCQkJCQkJICAg JmFsbF9kZWFkKSkKIAkJCQl7CiAJCQkJCVRyYW5zYWN0aW9uSWQgeHdhaXQ7CiAKQEAgLTYxOCw4 ICs2MTgsOCBAQCBfYnRfY2hlY2tfdW5pcXVlKFJlbGF0aW9uIHJlbCwgQlRJbnNlcnRTdGF0ZSBp bnNlcnRzdGF0ZSwgUmVsYXRpb24gaGVhcFJlbCwKIAkJCQkJICogZW50cnkuCiAJCQkJCSAqLwog CQkJCQlodGlkID0gaXR1cC0+dF90aWQ7Ci0JCQkJCWlmICh0YWJsZV9pbmRleF9mZXRjaF90dXBs ZV9jaGVjayhoZWFwUmVsLCAmaHRpZCwKLQkJCQkJCQkJCQkJCQkgIFNuYXBzaG90U2VsZiwgTlVM TCkpCisJCQkJCWlmICh0YWJsZV9mZXRjaF90aWRfY2hlY2soaGVhcFJlbCwgJmh0aWQsCisJCQkJ CQkJCQkJCSAgU25hcHNob3RTZWxmLCBOVUxMKSkKIAkJCQkJewogCQkJCQkJLyogTm9ybWFsIGNh c2UgLS0tIGl0J3Mgc3RpbGwgbGl2ZSAqLwogCQkJCQl9CmRpZmYgLS1naXQgYS9zcmMvYmFja2Vu ZC9hY2Nlc3MvdGFibGUvdGFibGVhbS5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RhYmxlL3RhYmxl YW0uYwppbmRleCA2OGZmMDk2NmYuLjBhYzlmMDE0MyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQv YWNjZXNzL3RhYmxlL3RhYmxlYW0uYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvdGFibGUvdGFi bGVhbS5jCkBAIC0yMjgsMzIgKzIyOCwyMCBAQCB0YWJsZV9iZWdpbnNjYW5fcGFyYWxsZWxfdGlk cmFuZ2UoUmVsYXRpb24gcmVsYXRpb24sCiAgKi8KIAogLyoKLSAqIFRvIHBlcmZvcm0gdGhhdCBj aGVjayBzaW1wbHkgc3RhcnQgYW4gaW5kZXggc2NhbiwgY3JlYXRlIHRoZSBuZWNlc3NhcnkKLSAq IHNsb3QsIGRvIHRoZSBoZWFwIGxvb2t1cCwgYW5kIHNodXQgZXZlcnl0aGluZyBkb3duIGFnYWlu LiBUaGlzIGNvdWxkIGJlCi0gKiBvcHRpbWl6ZWQsIGJ1dCBpcyB1bmxpa2VseSB0byBtYXR0ZXIg ZnJvbSBhIHBlcmZvcm1hbmNlIFBPVi4gSWYgdGhlcmUKLSAqIGZyZXF1ZW50bHkgYXJlIGxpdmUg aW5kZXggcG9pbnRlcnMgYWxzbyBtYXRjaGluZyBhIHVuaXF1ZSBpbmRleCBrZXksIHRoZQotICog Q1BVIG92ZXJoZWFkIG9mIHRoaXMgcm91dGluZSBpcyB1bmxpa2VseSB0byBtYXR0ZXIuCi0gKgot ICogTm90ZSB0aGF0ICp0aWQgbWF5IGJlIG1vZGlmaWVkIHdoZW4gd2UgcmV0dXJuIHRydWUgaWYg dGhlIEFNIHN1cHBvcnRzCi0gKiBzdG9yaW5nIG11bHRpcGxlIHJvdyB2ZXJzaW9ucyByZWFjaGFi bGUgdmlhIGEgc2luZ2xlIGluZGV4IGVudHJ5IChsaWtlCi0gKiBoZWFwJ3MgSE9UKS4KKyAqIENh bGxlciBzaG91bGQgbm90ZSB0aGUgdGFibGVfZmV0Y2hfdGlkIHdhcm5pbmcgYWJvdXQgKnRpZCBi ZWluZyBtb2RpZmllZAorICogd2hlbiB3ZSByZXR1cm4gdHJ1ZSBpbiBzb21lIGNhc2VzCiAgKi8K IGJvb2wKLXRhYmxlX2luZGV4X2ZldGNoX3R1cGxlX2NoZWNrKFJlbGF0aW9uIHJlbCwKLQkJCQkJ CQkgIEl0ZW1Qb2ludGVyIHRpZCwKLQkJCQkJCQkgIFNuYXBzaG90IHNuYXBzaG90LAotCQkJCQkJ CSAgYm9vbCAqYWxsX2RlYWQpCit0YWJsZV9mZXRjaF90aWRfY2hlY2soUmVsYXRpb24gcmVsLAor CQkJCQkgIEl0ZW1Qb2ludGVyIHRpZCwKKwkJCQkJICBTbmFwc2hvdCBzbmFwc2hvdCwKKwkJCQkJ ICBib29sICphbGxfZGVhZCkKIHsKLQlJbmRleEZldGNoVGFibGVEYXRhICpzY2FuOwogCVR1cGxl VGFibGVTbG90ICpzbG90OwotCWJvb2wJCWNhbGxfYWdhaW4gPSBmYWxzZTsKIAlib29sCQlmb3Vu ZDsKIAogCXNsb3QgPSB0YWJsZV9zbG90X2NyZWF0ZShyZWwsIE5VTEwpOwotCXNjYW4gPSB0YWJs ZV9pbmRleF9mZXRjaF9iZWdpbihyZWwsIFNPX05PTkUpOwotCWZvdW5kID0gdGFibGVfaW5kZXhf ZmV0Y2hfdHVwbGUoc2NhbiwgdGlkLCBzbmFwc2hvdCwgc2xvdCwgJmNhbGxfYWdhaW4sCi0JCQkJ CQkJCQlhbGxfZGVhZCk7Ci0JdGFibGVfaW5kZXhfZmV0Y2hfZW5kKHNjYW4pOworCWZvdW5kID0g dGFibGVfZmV0Y2hfdGlkKHJlbCwgdGlkLCBzbmFwc2hvdCwgc2xvdCwgYWxsX2RlYWQpOwogCUV4 ZWNEcm9wU2luZ2xlVHVwbGVUYWJsZVNsb3Qoc2xvdCk7CiAKIAlyZXR1cm4gZm91bmQ7CmRpZmYg LS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvdGFibGUvdGFibGVhbWFwaS5jIGIvc3JjL2JhY2tl bmQvYWNjZXNzL3RhYmxlL3RhYmxlYW1hcGkuYwppbmRleCA1NDUwYTI3ZmEuLmMwOTQ3M2I5NyAx MDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL3RhYmxlL3RhYmxlYW1hcGkuYworKysgYi9z cmMvYmFja2VuZC9hY2Nlc3MvdGFibGUvdGFibGVhbWFwaS5jCkBAIC01Myw4ICs1Myw4IEBAIEdl dFRhYmxlQW1Sb3V0aW5lKE9pZCBhbWhhbmRsZXIpCiAJQXNzZXJ0KHJvdXRpbmUtPmluZGV4X2Zl dGNoX2JlZ2luICE9IE5VTEwpOwogCUFzc2VydChyb3V0aW5lLT5pbmRleF9mZXRjaF9yZXNldCAh PSBOVUxMKTsKIAlBc3NlcnQocm91dGluZS0+aW5kZXhfZmV0Y2hfZW5kICE9IE5VTEwpOwotCUFz c2VydChyb3V0aW5lLT5pbmRleF9mZXRjaF90dXBsZSAhPSBOVUxMKTsKIAorCUFzc2VydChyb3V0 aW5lLT5mZXRjaF90aWQgIT0gTlVMTCk7CiAJQXNzZXJ0KHJvdXRpbmUtPnR1cGxlX2ZldGNoX3Jv d192ZXJzaW9uICE9IE5VTEwpOwogCUFzc2VydChyb3V0aW5lLT50dXBsZV90aWRfdmFsaWQgIT0g TlVMTCk7CiAJQXNzZXJ0KHJvdXRpbmUtPnR1cGxlX2dldF9sYXRlc3RfdGlkICE9IE5VTEwpOwpk aWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvY29uc3RyYWludC5jIGIvc3JjL2JhY2tl bmQvY29tbWFuZHMvY29uc3RyYWludC5jCmluZGV4IDQyMWQ4YzM1OS4uN2FmZjQ4MTI0IDEwMDY0 NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy9jb25zdHJhaW50LmMKKysrIGIvc3JjL2JhY2tl bmQvY29tbWFuZHMvY29uc3RyYWludC5jCkBAIC0xMDUsMjMgKzEwNSwxNCBAQCB1bmlxdWVfa2V5 X3JlY2hlY2soUEdfRlVOQ1RJT05fQVJHUykKIAkgKiByZW1vdmVkLgogCSAqLwogCXRtcHRpZCA9 IGNoZWNrdGlkOworCWlmICghdGFibGVfZmV0Y2hfdGlkKHRyaWdkYXRhLT50Z19yZWxhdGlvbiwg JnRtcHRpZCwgU25hcHNob3RTZWxmLAorCQkJCQkJIHNsb3QsIE5VTEwpKQogCXsKLQkJSW5kZXhG ZXRjaFRhYmxlRGF0YSAqc2NhbiA9IHRhYmxlX2luZGV4X2ZldGNoX2JlZ2luKHRyaWdkYXRhLT50 Z19yZWxhdGlvbiwKLQkJCQkJCQkJCQkJCQkJCVNPX05PTkUpOwotCQlib29sCQljYWxsX2FnYWlu ID0gZmFsc2U7Ci0KLQkJaWYgKCF0YWJsZV9pbmRleF9mZXRjaF90dXBsZShzY2FuLCAmdG1wdGlk LCBTbmFwc2hvdFNlbGYsIHNsb3QsCi0JCQkJCQkJCQkgJmNhbGxfYWdhaW4sIE5VTEwpKQotCQl7 Ci0JCQkvKgotCQkJICogQWxsIHJvd3MgcmVmZXJlbmNlZCBieSB0aGUgaW5kZXggZW50cnkgYXJl IGRlYWQsIHNvIHNraXAgdGhlCi0JCQkgKiBjaGVjay4KLQkJCSAqLwotCQkJRXhlY0Ryb3BTaW5n bGVUdXBsZVRhYmxlU2xvdChzbG90KTsKLQkJCXRhYmxlX2luZGV4X2ZldGNoX2VuZChzY2FuKTsK LQkJCXJldHVybiBQb2ludGVyR2V0RGF0dW0oTlVMTCk7Ci0JCX0KLQkJdGFibGVfaW5kZXhfZmV0 Y2hfZW5kKHNjYW4pOworCQkvKgorCQkgKiBBbGwgcm93cyByZWZlcmVuY2VkIGJ5IHRoZSBpbmRl eCBlbnRyeSBhcmUgZGVhZCwgc28gc2tpcCB0aGUgY2hlY2sKKwkJICovCisJCUV4ZWNEcm9wU2lu Z2xlVHVwbGVUYWJsZVNsb3Qoc2xvdCk7CisJCXJldHVybiBQb2ludGVyR2V0RGF0dW0oTlVMTCk7 CiAJfQogCiAJLyoKQEAgLTE2OCw5ICsxNTksOCBAQCB1bmlxdWVfa2V5X3JlY2hlY2soUEdfRlVO Q1RJT05fQVJHUykKIAkJLyoKIAkJICogTm90ZTogdGhpcyBpcyBub3QgYSByZWFsIGluc2VydDsg aXQgaXMgYSBjaGVjayB0aGF0IHRoZSBpbmRleCBlbnRyeQogCQkgKiB0aGF0IGhhcyBhbHJlYWR5 IGJlZW4gaW5zZXJ0ZWQgaXMgdW5pcXVlLiAgUGFzc2luZyB0aGUgdHVwbGUncyB0aWQKLQkJICog KGkuZS4gdW5tb2RpZmllZCBieSB0YWJsZV9pbmRleF9mZXRjaF90dXBsZSgpKSBpcyBjb3JyZWN0 IGV2ZW4gaWYKLQkJICogdGhlIHJvdyBpcyBub3cgZGVhZCwgYmVjYXVzZSB0aGF0IGlzIHRoZSBU SUQgdGhlIGluZGV4IHdpbGwga25vdwotCQkgKiBhYm91dC4KKwkJICogKGkuZS4gdW5tb2RpZmll ZCBieSB0YWJsZV9mZXRjaF90aWQoKSkgaXMgY29ycmVjdCBldmVuIGlmIHRoZSByb3cKKwkJICog aXMgbm93IGRlYWQsIGJlY2F1c2UgdGhhdCBpcyB0aGUgVElEIHRoZSBpbmRleCB3aWxsIGtub3cg YWJvdXQuCiAJCSAqLwogCQlpbmRleF9pbnNlcnQoaW5kZXhSZWwsIHZhbHVlcywgaXNudWxsLCAm Y2hlY2t0aWQsCiAJCQkJCSB0cmlnZGF0YS0+dGdfcmVsYXRpb24sIFVOSVFVRV9DSEVDS19FWElT VElORywKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2V4cGxhaW4uYyBiL3NyYy9i YWNrZW5kL2NvbW1hbmRzL2V4cGxhaW4uYwppbmRleCBlNGI3MDE2NmIuLjE4Y2Y0MjJhZCAxMDA2 NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvZXhwbGFpbi5jCisrKyBiL3NyYy9iYWNrZW5k L2NvbW1hbmRzL2V4cGxhaW4uYwpAQCAtMTM2LDcgKzEzNiw3IEBAIHN0YXRpYyB2b2lkIHNob3df cmVjdXJzaXZlX3VuaW9uX2luZm8oUmVjdXJzaXZlVW5pb25TdGF0ZSAqcnN0YXRlLAogc3RhdGlj IHZvaWQgc2hvd19tZW1vaXplX2luZm8oTWVtb2l6ZVN0YXRlICptc3RhdGUsIExpc3QgKmFuY2Vz dG9ycywKIAkJCQkJCQkgIEV4cGxhaW5TdGF0ZSAqZXMpOwogc3RhdGljIHZvaWQgc2hvd19oYXNo YWdnX2luZm8oQWdnU3RhdGUgKmFnZ3N0YXRlLCBFeHBsYWluU3RhdGUgKmVzKTsKLXN0YXRpYyB2 b2lkIHNob3dfaW5kZXhzZWFyY2hlc19pbmZvKFBsYW5TdGF0ZSAqcGxhbnN0YXRlLCBFeHBsYWlu U3RhdGUgKmVzKTsKK3N0YXRpYyB2b2lkIHNob3dfaW5kZXhzY2FuX2luZm8oUGxhblN0YXRlICpw bGFuc3RhdGUsIEV4cGxhaW5TdGF0ZSAqZXMpOwogc3RhdGljIHZvaWQgc2hvd190aWRiaXRtYXBf aW5mbyhCaXRtYXBIZWFwU2NhblN0YXRlICpwbGFuc3RhdGUsCiAJCQkJCQkJCUV4cGxhaW5TdGF0 ZSAqZXMpOwogc3RhdGljIHZvaWQgc2hvd19pbnN0cnVtZW50YXRpb25fY291bnQoY29uc3QgY2hh ciAqcWxhYmVsLCBpbnQgd2hpY2gsCkBAIC0xOTc0LDcgKzE5NzQsNyBAQCBFeHBsYWluTm9kZShQ bGFuU3RhdGUgKnBsYW5zdGF0ZSwgTGlzdCAqYW5jZXN0b3JzLAogCQkJaWYgKHBsYW4tPnF1YWwp CiAJCQkJc2hvd19pbnN0cnVtZW50YXRpb25fY291bnQoIlJvd3MgUmVtb3ZlZCBieSBGaWx0ZXIi LCAxLAogCQkJCQkJCQkJCSAgIHBsYW5zdGF0ZSwgZXMpOwotCQkJc2hvd19pbmRleHNlYXJjaGVz X2luZm8ocGxhbnN0YXRlLCBlcyk7CisJCQlzaG93X2luZGV4c2Nhbl9pbmZvKHBsYW5zdGF0ZSwg ZXMpOwogCQkJYnJlYWs7CiAJCWNhc2UgVF9JbmRleE9ubHlTY2FuOgogCQkJc2hvd19zY2FuX3F1 YWwoKChJbmRleE9ubHlTY2FuICopIHBsYW4pLT5pbmRleHF1YWwsCkBAIC0xOTg4LDE1ICsxOTg4 LDEyIEBAIEV4cGxhaW5Ob2RlKFBsYW5TdGF0ZSAqcGxhbnN0YXRlLCBMaXN0ICphbmNlc3RvcnMs CiAJCQlpZiAocGxhbi0+cXVhbCkKIAkJCQlzaG93X2luc3RydW1lbnRhdGlvbl9jb3VudCgiUm93 cyBSZW1vdmVkIGJ5IEZpbHRlciIsIDEsCiAJCQkJCQkJCQkJICAgcGxhbnN0YXRlLCBlcyk7Ci0J CQlpZiAoZXMtPmFuYWx5emUpCi0JCQkJRXhwbGFpblByb3BlcnR5RmxvYXQoIkhlYXAgRmV0Y2hl cyIsIE5VTEwsCi0JCQkJCQkJCQkgcGxhbnN0YXRlLT5pbnN0cnVtZW50LT5udHVwbGVzMiwgMCwg ZXMpOwotCQkJc2hvd19pbmRleHNlYXJjaGVzX2luZm8ocGxhbnN0YXRlLCBlcyk7CisJCQlzaG93 X2luZGV4c2Nhbl9pbmZvKHBsYW5zdGF0ZSwgZXMpOwogCQkJYnJlYWs7CiAJCWNhc2UgVF9CaXRt YXBJbmRleFNjYW46CiAJCQlzaG93X3NjYW5fcXVhbCgoKEJpdG1hcEluZGV4U2NhbiAqKSBwbGFu KS0+aW5kZXhxdWFsb3JpZywKIAkJCQkJCSAgICJJbmRleCBDb25kIiwgcGxhbnN0YXRlLCBhbmNl c3RvcnMsIGVzKTsKLQkJCXNob3dfaW5kZXhzZWFyY2hlc19pbmZvKHBsYW5zdGF0ZSwgZXMpOwor CQkJc2hvd19pbmRleHNjYW5faW5mbyhwbGFuc3RhdGUsIGVzKTsKIAkJCWJyZWFrOwogCQljYXNl IFRfQml0bWFwSGVhcFNjYW46CiAJCQlzaG93X3NjYW5fcXVhbCgoKEJpdG1hcEhlYXBTY2FuICop IHBsYW4pLT5iaXRtYXBxdWFsb3JpZywKQEAgLTM4NjAsMTUgKzM4NTcsMTYgQEAgc2hvd19oYXNo YWdnX2luZm8oQWdnU3RhdGUgKmFnZ3N0YXRlLCBFeHBsYWluU3RhdGUgKmVzKQogfQogCiAvKgot ICogU2hvdyB0aGUgdG90YWwgbnVtYmVyIG9mIGluZGV4IHNlYXJjaGVzIGZvciBhCisgKiBTaG93 IGluZGV4IHNjYW4gcmVsYXRlZCBleGVjdXRvciBpbnN0cnVtZW50YXRpb24gZm9yIGEKICAqIElu ZGV4U2Nhbi9JbmRleE9ubHlTY2FuL0JpdG1hcEluZGV4U2NhbiBub2RlCiAgKi8KIHN0YXRpYyB2 b2lkCi1zaG93X2luZGV4c2VhcmNoZXNfaW5mbyhQbGFuU3RhdGUgKnBsYW5zdGF0ZSwgRXhwbGFp blN0YXRlICplcykKK3Nob3dfaW5kZXhzY2FuX2luZm8oUGxhblN0YXRlICpwbGFuc3RhdGUsIEV4 cGxhaW5TdGF0ZSAqZXMpCiB7CiAJUGxhbgkgICAqcGxhbiA9IHBsYW5zdGF0ZS0+cGxhbjsKIAlT aGFyZWRJbmRleFNjYW5JbnN0cnVtZW50YXRpb24gKlNoYXJlZEluZm8gPSBOVUxMOwotCXVpbnQ2 NAkJbnNlYXJjaGVzID0gMDsKKwl1aW50NjQJCW5zZWFyY2hlcyA9IDAsCisJCQkJbnRhYmxldHVw bGVmZXRjaGVzID0gMDsKIAogCWlmICghZXMtPmFuYWx5emUpCiAJCXJldHVybjsKQEAgLTM4ODks NiArMzg4Nyw3IEBAIHNob3dfaW5kZXhzZWFyY2hlc19pbmZvKFBsYW5TdGF0ZSAqcGxhbnN0YXRl LCBFeHBsYWluU3RhdGUgKmVzKQogCQkJCUluZGV4T25seVNjYW5TdGF0ZSAqaW5kZXhzdGF0ZSA9 ICgoSW5kZXhPbmx5U2NhblN0YXRlICopIHBsYW5zdGF0ZSk7CiAKIAkJCQluc2VhcmNoZXMgPSBp bmRleHN0YXRlLT5pb3NzX0luc3RydW1lbnQtPm5zZWFyY2hlczsKKwkJCQludGFibGV0dXBsZWZl dGNoZXMgPSBpbmRleHN0YXRlLT5pb3NzX0luc3RydW1lbnQtPm50YWJsZXR1cGxlZmV0Y2hlczsK IAkJCQlTaGFyZWRJbmZvID0gaW5kZXhzdGF0ZS0+aW9zc19TaGFyZWRJbmZvOwogCQkJCWJyZWFr OwogCQkJfQpAQCAtMzkxMiw5ICszOTExLDEzIEBAIHNob3dfaW5kZXhzZWFyY2hlc19pbmZvKFBs YW5TdGF0ZSAqcGxhbnN0YXRlLCBFeHBsYWluU3RhdGUgKmVzKQogCQkJSW5kZXhTY2FuSW5zdHJ1 bWVudGF0aW9uICp3aW5zdHJ1bWVudCA9ICZTaGFyZWRJbmZvLT53aW5zdHJ1bWVudFtpXTsKIAog CQkJbnNlYXJjaGVzICs9IHdpbnN0cnVtZW50LT5uc2VhcmNoZXM7CisJCQludGFibGV0dXBsZWZl dGNoZXMgKz0gd2luc3RydW1lbnQtPm50YWJsZXR1cGxlZmV0Y2hlczsKIAkJfQogCX0KIAorCWlm IChub2RlVGFnKHBsYW4pID09IFRfSW5kZXhPbmx5U2NhbikKKwkJRXhwbGFpblByb3BlcnR5VUlu dGVnZXIoIkhlYXAgRmV0Y2hlcyIsIE5VTEwsIG50YWJsZXR1cGxlZmV0Y2hlcywgZXMpOworCiAJ RXhwbGFpblByb3BlcnR5VUludGVnZXIoIkluZGV4IFNlYXJjaGVzIiwgTlVMTCwgbnNlYXJjaGVz LCBlcyk7CiB9CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNJbmRleGlu Zy5jIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0luZGV4aW5nLmMKaW5kZXggNDM2M2UxNTRj Li44NGM4YzM0MDMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNJbmRleGlu Zy5jCisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNJbmRleGluZy5jCkBAIC04MTUsMTIg KzgxNSwxMyBAQCBjaGVja19leGNsdXNpb25fb3JfdW5pcXVlX2NvbnN0cmFpbnQoUmVsYXRpb24g aGVhcCwgUmVsYXRpb24gaW5kZXgsCiByZXRyeToKIAljb25mbGljdCA9IGZhbHNlOwogCWZvdW5k X3NlbGYgPSBmYWxzZTsKLQlpbmRleF9zY2FuID0gaW5kZXhfYmVnaW5zY2FuKGhlYXAsIGluZGV4 LAorCWluZGV4X3NjYW4gPSBpbmRleF9iZWdpbnNjYW4oaGVhcCwgaW5kZXgsIGZhbHNlLAogCQkJ CQkJCQkgJkRpcnR5U25hcHNob3QsIE5VTEwsIGluZG5rZXlhdHRzLCAwLAogCQkJCQkJCQkgU09f Tk9ORSk7CiAJaW5kZXhfcmVzY2FuKGluZGV4X3NjYW4sIHNjYW5rZXlzLCBpbmRua2V5YXR0cywg TlVMTCwgMCk7CiAKLQl3aGlsZSAoaW5kZXhfZ2V0bmV4dF9zbG90KGluZGV4X3NjYW4sIEZvcndh cmRTY2FuRGlyZWN0aW9uLCBleGlzdGluZ19zbG90KSkKKwl3aGlsZSAodGFibGVfaW5kZXhfZ2V0 bmV4dF9zbG90KGluZGV4X3NjYW4sIEZvcndhcmRTY2FuRGlyZWN0aW9uLAorCQkJCQkJCQkJZXhp c3Rpbmdfc2xvdCkpCiAJewogCQlUcmFuc2FjdGlvbklkIHh3YWl0OwogCQlYTFRXX09wZXIJcmVh c29uX3dhaXQ7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjUmVwbGljYXRp b24uYyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNSZXBsaWNhdGlvbi5jCmluZGV4IGIyY2E1 Y2JmMS4uZmQ5ZWZkOTQ3IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjUmVw bGljYXRpb24uYworKysgYi9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjUmVwbGljYXRpb24uYwpA QCAtMjA1LDcgKzIwNSw3IEBAIFJlbGF0aW9uRmluZFJlcGxUdXBsZUJ5SW5kZXgoUmVsYXRpb24g cmVsLCBPaWQgaWR4b2lkLAogCXNrZXlfYXR0b2ZmID0gYnVpbGRfcmVwbGluZGV4X3NjYW5fa2V5 KHNrZXksIHJlbCwgaWR4cmVsLCBzZWFyY2hzbG90KTsKIAogCS8qIFN0YXJ0IGFuIGluZGV4IHNj YW4uICovCi0Jc2NhbiA9IGluZGV4X2JlZ2luc2NhbihyZWwsIGlkeHJlbCwKKwlzY2FuID0gaW5k ZXhfYmVnaW5zY2FuKHJlbCwgaWR4cmVsLCBmYWxzZSwKIAkJCQkJCSAgICZzbmFwLCBOVUxMLCBz a2V5X2F0dG9mZiwgMCwgU09fTk9ORSk7CiAKIHJldHJ5OgpAQCAtMjE0LDcgKzIxNCw3IEBAIHJl dHJ5OgogCWluZGV4X3Jlc2NhbihzY2FuLCBza2V5LCBza2V5X2F0dG9mZiwgTlVMTCwgMCk7CiAK IAkvKiBUcnkgdG8gZmluZCB0aGUgdHVwbGUgKi8KLQl3aGlsZSAoaW5kZXhfZ2V0bmV4dF9zbG90 KHNjYW4sIEZvcndhcmRTY2FuRGlyZWN0aW9uLCBvdXRzbG90KSkKKwl3aGlsZSAodGFibGVfaW5k ZXhfZ2V0bmV4dF9zbG90KHNjYW4sIEZvcndhcmRTY2FuRGlyZWN0aW9uLCBvdXRzbG90KSkKIAl7 CiAJCS8qCiAJCSAqIEF2b2lkIGV4cGVuc2l2ZSBlcXVhbGl0eSBjaGVjayBpZiB0aGUgaW5kZXgg aXMgcHJpbWFyeSBrZXkgb3IKQEAgLTY2OSwxMyArNjY5LDEzIEBAIFJlbGF0aW9uRmluZERlbGV0 ZWRUdXBsZUluZm9CeUluZGV4KFJlbGF0aW9uIHJlbCwgT2lkIGlkeG9pZCwKIAkgKiBub3QgeWV0 IGNvbW1pdHRlZCBvciB0aG9zZSBqdXN0IGNvbW1pdHRlZCBwcmlvciB0byB0aGUgc2NhbiBhcmUK IAkgKiBleGNsdWRlZCBpbiB1cGRhdGVfbW9zdF9yZWNlbnRfZGVsZXRpb25faW5mbygpLgogCSAq LwotCXNjYW4gPSBpbmRleF9iZWdpbnNjYW4ocmVsLCBpZHhyZWwsCisJc2NhbiA9IGluZGV4X2Jl Z2luc2NhbihyZWwsIGlkeHJlbCwgZmFsc2UsCiAJCQkJCQkgICBTbmFwc2hvdEFueSwgTlVMTCwg c2tleV9hdHRvZmYsIDAsIFNPX05PTkUpOwogCiAJaW5kZXhfcmVzY2FuKHNjYW4sIHNrZXksIHNr ZXlfYXR0b2ZmLCBOVUxMLCAwKTsKIAogCS8qIFRyeSB0byBmaW5kIHRoZSB0dXBsZSAqLwotCXdo aWxlIChpbmRleF9nZXRuZXh0X3Nsb3Qoc2NhbiwgRm9yd2FyZFNjYW5EaXJlY3Rpb24sIHNjYW5z bG90KSkKKwl3aGlsZSAodGFibGVfaW5kZXhfZ2V0bmV4dF9zbG90KHNjYW4sIEZvcndhcmRTY2Fu RGlyZWN0aW9uLCBzY2Fuc2xvdCkpCiAJewogCQkvKgogCQkgKiBBdm9pZCBleHBlbnNpdmUgZXF1 YWxpdHkgY2hlY2sgaWYgdGhlIGluZGV4IGlzIHByaW1hcnkga2V5IG9yCmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC9leGVjdXRvci9ub2RlQml0bWFwSW5kZXhzY2FuLmMgYi9zcmMvYmFja2VuZC9l eGVjdXRvci9ub2RlQml0bWFwSW5kZXhzY2FuLmMKaW5kZXggNzBjNTVlZTZkLi5hOWEzZDJmYjEg MTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVCaXRtYXBJbmRleHNjYW4uYwor KysgYi9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlQml0bWFwSW5kZXhzY2FuLmMKQEAgLTIwNCw2 ICsyMDQsNyBAQCBFeGVjRW5kQml0bWFwSW5kZXhTY2FuKEJpdG1hcEluZGV4U2NhblN0YXRlICpu b2RlKQogCQkgKiB3aGljaCB3aWxsIGhhdmUgYSBuZXcgQml0bWFwSW5kZXhTY2FuU3RhdGUgYW5k IHplcm9lZCBzdGF0cy4KIAkJICovCiAJCXdpbnN0cnVtZW50LT5uc2VhcmNoZXMgKz0gbm9kZS0+ Ymlzc19JbnN0cnVtZW50LT5uc2VhcmNoZXM7CisJCUFzc2VydChub2RlLT5iaXNzX0luc3RydW1l bnQtPm50YWJsZXR1cGxlZmV0Y2hlcyA9PSAwKTsKIAl9CiAKIAkvKgpkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUluZGV4b25seXNjYW4uYyBiL3NyYy9iYWNrZW5kL2V4ZWN1 dG9yL25vZGVJbmRleG9ubHlzY2FuLmMKaW5kZXggZGU2MTU0ZmQ1Li5iNmI5ZGJkMTAgMTAwNjQ0 Ci0tLSBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVJbmRleG9ubHlzY2FuLmMKKysrIGIvc3Jj L2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUluZGV4b25seXNjYW4uYwpAQCAtMzQsNyArMzQsNiBAQAog I2luY2x1ZGUgImFjY2Vzcy9yZWxzY2FuLmgiCiAjaW5jbHVkZSAiYWNjZXNzL3RhYmxlYW0uaCIK ICNpbmNsdWRlICJhY2Nlc3MvdHVwZGVzYy5oIgotI2luY2x1ZGUgImFjY2Vzcy92aXNpYmlsaXR5 bWFwLmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9wZ190eXBlLmgiCiAjaW5jbHVkZSAiZXhlY3V0b3Iv ZXhlY3V0b3IuaCIKICNpbmNsdWRlICJleGVjdXRvci9pbnN0cnVtZW50LmgiCkBAIC00Miw3ICs0 MSw2IEBACiAjaW5jbHVkZSAiZXhlY3V0b3Ivbm9kZUluZGV4c2Nhbi5oIgogI2luY2x1ZGUgIm1p c2NhZG1pbi5oIgogI2luY2x1ZGUgInN0b3JhZ2UvYnVmbWdyLmgiCi0jaW5jbHVkZSAic3RvcmFn ZS9wcmVkaWNhdGUuaCIKICNpbmNsdWRlICJ1dGlscy9idWlsdGlucy5oIgogI2luY2x1ZGUgInV0 aWxzL3JlbC5oIgogCkBAIC02Niw3ICs2NCw2IEBAIEluZGV4T25seU5leHQoSW5kZXhPbmx5U2Nh blN0YXRlICpub2RlKQogCVNjYW5EaXJlY3Rpb24gZGlyZWN0aW9uOwogCUluZGV4U2NhbkRlc2Mg c2NhbmRlc2M7CiAJVHVwbGVUYWJsZVNsb3QgKnNsb3Q7Ci0JSXRlbVBvaW50ZXIgdGlkOwogCiAJ LyoKIAkgKiBleHRyYWN0IG5lY2Vzc2FyeSBpbmZvcm1hdGlvbiBmcm9tIGluZGV4IHNjYW4gbm9k ZQpAQCAtOTIsNiArODksNyBAQCBJbmRleE9ubHlOZXh0KEluZGV4T25seVNjYW5TdGF0ZSAqbm9k ZSkKIAkJICovCiAJCXNjYW5kZXNjID0gaW5kZXhfYmVnaW5zY2FuKG5vZGUtPnNzLnNzX2N1cnJl bnRSZWxhdGlvbiwKIAkJCQkJCQkJICAgbm9kZS0+aW9zc19SZWxhdGlvbkRlc2MsCisJCQkJCQkJ CSAgIHRydWUsCiAJCQkJCQkJCSAgIGVzdGF0ZS0+ZXNfc25hcHNob3QsCiAJCQkJCQkJCSAgIG5v ZGUtPmlvc3NfSW5zdHJ1bWVudCwKIAkJCQkJCQkJICAgbm9kZS0+aW9zc19OdW1TY2FuS2V5cywK QEAgLTEwMCwxMSArOTgsNyBAQCBJbmRleE9ubHlOZXh0KEluZGV4T25seVNjYW5TdGF0ZSAqbm9k ZSkKIAkJCQkJCQkJICAgU09fSElOVF9SRUxfUkVBRF9PTkxZIDogU09fTk9ORSk7CiAKIAkJbm9k ZS0+aW9zc19TY2FuRGVzYyA9IHNjYW5kZXNjOwotCi0KLQkJLyogU2V0IGl0IHVwIGZvciBpbmRl eC1vbmx5IHNjYW4gKi8KLQkJbm9kZS0+aW9zc19TY2FuRGVzYy0+eHNfd2FudF9pdHVwID0gdHJ1 ZTsKLQkJbm9kZS0+aW9zc19WTUJ1ZmZlciA9IEludmFsaWRCdWZmZXI7CisJCUFzc2VydChub2Rl LT5pb3NzX1NjYW5EZXNjLT54c193YW50X2l0dXApOwogCiAJCS8qCiAJCSAqIElmIG5vIHJ1bi10 aW1lIGtleXMgdG8gY2FsY3VsYXRlIG9yIHRoZXkgYXJlIHJlYWR5LCBnbyBhaGVhZCBhbmQKQEAg LTEyMSw3OCArMTE1LDExIEBAIEluZGV4T25seU5leHQoSW5kZXhPbmx5U2NhblN0YXRlICpub2Rl KQogCS8qCiAJICogT0ssIG5vdyB0aGF0IHdlIGhhdmUgd2hhdCB3ZSBuZWVkLCBmZXRjaCB0aGUg bmV4dCB0dXBsZS4KIAkgKi8KLQl3aGlsZSAoKHRpZCA9IGluZGV4X2dldG5leHRfdGlkKHNjYW5k ZXNjLCBkaXJlY3Rpb24pKSAhPSBOVUxMKQorCXdoaWxlICh0YWJsZV9pbmRleF9nZXRuZXh0X3Ns b3Qoc2NhbmRlc2MsIGRpcmVjdGlvbiwKKwkJCQkJCQkJCW5vZGUtPmlvc3NfVGFibGVTbG90KSkK IAl7Ci0JCWJvb2wJCXR1cGxlX2Zyb21faGVhcCA9IGZhbHNlOwotCiAJCUNIRUNLX0ZPUl9JTlRF UlJVUFRTKCk7CiAKLQkJLyoKLQkJICogV2UgY2FuIHNraXAgdGhlIGhlYXAgZmV0Y2ggaWYgdGhl IFRJRCByZWZlcmVuY2VzIGEgaGVhcCBwYWdlIG9uCi0JCSAqIHdoaWNoIGFsbCB0dXBsZXMgYXJl IGtub3duIHZpc2libGUgdG8gZXZlcnlib2R5LiAgSW4gYW55IGNhc2UsCi0JCSAqIHdlJ2xsIHVz ZSB0aGUgaW5kZXggdHVwbGUgbm90IHRoZSBoZWFwIHR1cGxlIGFzIHRoZSBkYXRhIHNvdXJjZS4K LQkJICoKLQkJICogTm90ZSBvbiBNZW1vcnkgT3JkZXJpbmcgRWZmZWN0czogdmlzaWJpbGl0eW1h cF9nZXRfc3RhdHVzIGRvZXMgbm90Ci0JCSAqIGxvY2sgdGhlIHZpc2liaWxpdHkgbWFwIGJ1ZmZl ciwgYW5kIHRoZXJlZm9yZSB0aGUgcmVzdWx0IHdlIHJlYWQKLQkJICogaGVyZSBjb3VsZCBiZSBz bGlnaHRseSBzdGFsZS4gIEhvd2V2ZXIsIGl0IGNhbid0IGJlIHN0YWxlIGVub3VnaCB0bwotCQkg KiBtYXR0ZXIuCi0JCSAqCi0JCSAqIFdlIG5lZWQgdG8gZGV0ZWN0IGNsZWFyaW5nIGEgVk0gYml0 IGR1ZSB0byBhbiBpbnNlcnQgcmlnaHQgYXdheSwKLQkJICogYmVjYXVzZSB0aGUgdHVwbGUgaXMg cHJlc2VudCBpbiB0aGUgaW5kZXggcGFnZSBidXQgbm90IHZpc2libGUuIFRoZQotCQkgKiByZWFk aW5nIG9mIHRoZSBUSUQgYnkgdGhpcyBzY2FuICh1c2luZyBhIHNoYXJlZCBsb2NrIG9uIHRoZSBp bmRleAotCQkgKiBidWZmZXIpIGlzIHNlcmlhbGl6ZWQgd2l0aCB0aGUgaW5zZXJ0IG9mIHRoZSBU SUQgaW50byB0aGUgaW5kZXgKLQkJICogKHVzaW5nIGFuIGV4Y2x1c2l2ZSBsb2NrIG9uIHRoZSBp bmRleCBidWZmZXIpLiBCZWNhdXNlIHRoZSBWTSBiaXQKLQkJICogaXMgY2xlYXJlZCBiZWZvcmUg dXBkYXRpbmcgdGhlIGluZGV4LCBhbmQgbG9ja2luZy91bmxvY2tpbmcgb2YgdGhlCi0JCSAqIGlu ZGV4IHBhZ2UgYWN0cyBhcyBhIGZ1bGwgbWVtb3J5IGJhcnJpZXIsIHdlIGFyZSBzdXJlIHRvIHNl ZSB0aGUKLQkJICogY2xlYXJlZCBiaXQgaWYgd2Ugc2VlIGEgcmVjZW50bHktaW5zZXJ0ZWQgVElE LgotCQkgKgotCQkgKiBEZWxldGVzIGRvIG5vdCB1cGRhdGUgdGhlIGluZGV4IHBhZ2UgKG9ubHkg VkFDVVVNIHdpbGwgY2xlYXIgb3V0Ci0JCSAqIHRoZSBUSUQpLCBzbyB0aGUgY2xlYXJpbmcgb2Yg dGhlIFZNIGJpdCBieSBhIGRlbGV0ZSBpcyBub3QKLQkJICogc2VyaWFsaXplZCB3aXRoIHRoaXMg dGVzdCBiZWxvdywgYW5kIHdlIG1heSBzZWUgYSB2YWx1ZSB0aGF0IGlzCi0JCSAqIHNpZ25pZmlj YW50bHkgc3RhbGUuIEhvd2V2ZXIsIHdlIGRvbid0IGNhcmUgYWJvdXQgdGhlIGRlbGV0ZSByaWdo dAotCQkgKiBhd2F5LCBiZWNhdXNlIHRoZSB0dXBsZSBpcyBzdGlsbCB2aXNpYmxlIHVudGlsIHRo ZSBkZWxldGluZwotCQkgKiB0cmFuc2FjdGlvbiBjb21taXRzIG9yIHRoZSBzdGF0ZW1lbnQgZW5k cyAoaWYgaXQncyBvdXIKLQkJICogdHJhbnNhY3Rpb24pLiBJbiBlaXRoZXIgY2FzZSwgdGhlIGxv Y2sgb24gdGhlIFZNIGJ1ZmZlciB3aWxsIGhhdmUKLQkJICogYmVlbiByZWxlYXNlZCAoYWN0aW5n IGFzIGEgd3JpdGUgYmFycmllcikgYWZ0ZXIgY2xlYXJpbmcgdGhlIGJpdC4KLQkJICogQW5kIGZv ciB1cyB0byBoYXZlIGEgc25hcHNob3QgdGhhdCBpbmNsdWRlcyB0aGUgZGVsZXRpbmcKLQkJICog dHJhbnNhY3Rpb24gKG1ha2luZyB0aGUgdHVwbGUgaW52aXNpYmxlKSwgd2UgbXVzdCBoYXZlIGFj cXVpcmVkCi0JCSAqIFByb2NBcnJheUxvY2sgYWZ0ZXIgdGhhdCB0aW1lLCBhY3RpbmcgYXMgYSBy ZWFkIGJhcnJpZXIuCi0JCSAqCi0JCSAqIEl0J3Mgd29ydGggZ29pbmcgdGhyb3VnaCB0aGlzIGNv bXBsZXhpdHkgdG8gYXZvaWQgbmVlZGluZyB0byBsb2NrCi0JCSAqIHRoZSBWTSBidWZmZXIsIHdo aWNoIGNvdWxkIGNhdXNlIHNpZ25pZmljYW50IGNvbnRlbnRpb24uCi0JCSAqLwotCQlpZiAoIVZN X0FMTF9WSVNJQkxFKHNjYW5kZXNjLT5oZWFwUmVsYXRpb24sCi0JCQkJCQkJSXRlbVBvaW50ZXJH ZXRCbG9ja051bWJlcih0aWQpLAotCQkJCQkJCSZub2RlLT5pb3NzX1ZNQnVmZmVyKSkKLQkJewot CQkJLyoKLQkJCSAqIFJhdHMsIHdlIGhhdmUgdG8gdmlzaXQgdGhlIGhlYXAgdG8gY2hlY2sgdmlz aWJpbGl0eS4KLQkJCSAqLwotCQkJSW5zdHJDb3VudFR1cGxlczIobm9kZSwgMSk7Ci0JCQlpZiAo IWluZGV4X2ZldGNoX2hlYXAoc2NhbmRlc2MsIG5vZGUtPmlvc3NfVGFibGVTbG90KSkKLQkJCQlj b250aW51ZTsJCS8qIG5vIHZpc2libGUgdHVwbGUsIHRyeSBuZXh0IGluZGV4IGVudHJ5ICovCi0K LQkJCUV4ZWNDbGVhclR1cGxlKG5vZGUtPmlvc3NfVGFibGVTbG90KTsKLQotCQkJLyoKLQkJCSAq IE9ubHkgTVZDQyBzbmFwc2hvdHMgYXJlIHN1cHBvcnRlZCBoZXJlLCBzbyB0aGVyZSBzaG91bGQg YmUgbm8KLQkJCSAqIG5lZWQgdG8ga2VlcCBmb2xsb3dpbmcgdGhlIEhPVCBjaGFpbiBvbmNlIGEg dmlzaWJsZSBlbnRyeSBoYXMKLQkJCSAqIGJlZW4gZm91bmQuICBJZiB3ZSBkaWQgd2FudCB0byBh bGxvdyB0aGF0LCB3ZSdkIG5lZWQgdG8ga2VlcAotCQkJICogbW9yZSBzdGF0ZSB0byByZW1lbWJl ciBub3QgdG8gY2FsbCBpbmRleF9nZXRuZXh0X3RpZCBuZXh0IHRpbWUuCi0JCQkgKi8KLQkJCWlm IChzY2FuZGVzYy0+eHNfaGVhcF9jb250aW51ZSkKLQkJCQllbG9nKEVSUk9SLCAibm9uLU1WQ0Mg c25hcHNob3RzIGFyZSBub3Qgc3VwcG9ydGVkIGluIGluZGV4LW9ubHkgc2NhbnMiKTsKLQotCQkJ LyoKLQkJCSAqIE5vdGU6IGF0IHRoaXMgcG9pbnQgd2UgYXJlIGhvbGRpbmcgYSBwaW4gb24gdGhl IGhlYXAgcGFnZSwgYXMKLQkJCSAqIHJlY29yZGVkIGluIHNjYW5kZXNjLT54c19jYnVmLiAgV2Ug Y291bGQgcmVsZWFzZSB0aGF0IHBpbiBub3csCi0JCQkgKiBidXQgaXQncyBub3QgY2xlYXIgd2hl dGhlciBpdCdzIGEgd2luIHRvIGRvIHNvLiAgVGhlIG5leHQgaW5kZXgKLQkJCSAqIGVudHJ5IG1p Z2h0IHJlcXVpcmUgYSB2aXNpdCB0byB0aGUgc2FtZSBoZWFwIHBhZ2UuCi0JCQkgKi8KLQotCQkJ dHVwbGVfZnJvbV9oZWFwID0gdHJ1ZTsKLQkJfQotCiAJCS8qCiAJCSAqIEZpbGwgdGhlIHNjYW4g dHVwbGUgc2xvdCB3aXRoIGRhdGEgZnJvbSB0aGUgaW5kZXguICBUaGlzIG1pZ2h0IGJlCiAJCSAq IHByb3ZpZGVkIGluIGVpdGhlciBIZWFwVHVwbGUgb3IgSW5kZXhUdXBsZSBmb3JtYXQuICBDb25j ZWl2YWJseSBhbgpAQCAtMjQxLDE2ICsxNjgsNiBAQCBJbmRleE9ubHlOZXh0KEluZGV4T25seVNj YW5TdGF0ZSAqbm9kZSkKIAkJCWVyZXBvcnQoRVJST1IsCiAJCQkJCShlcnJjb2RlKEVSUkNPREVf RkVBVFVSRV9OT1RfU1VQUE9SVEVEKSwKIAkJCQkJIGVycm1zZygibG9zc3kgZGlzdGFuY2UgZnVu Y3Rpb25zIGFyZSBub3Qgc3VwcG9ydGVkIGluIGluZGV4LW9ubHkgc2NhbnMiKSkpOwotCi0JCS8q Ci0JCSAqIElmIHdlIGRpZG4ndCBhY2Nlc3MgdGhlIGhlYXAsIHRoZW4gd2UnbGwgbmVlZCB0byB0 YWtlIGEgcHJlZGljYXRlCi0JCSAqIGxvY2sgZXhwbGljaXRseSwgYXMgaWYgd2UgaGFkLiAgRm9y IG5vdyB3ZSBkbyB0aGF0IGF0IHBhZ2UgbGV2ZWwuCi0JCSAqLwotCQlpZiAoIXR1cGxlX2Zyb21f aGVhcCkKLQkJCVByZWRpY2F0ZUxvY2tQYWdlKHNjYW5kZXNjLT5oZWFwUmVsYXRpb24sCi0JCQkJ CQkJICBJdGVtUG9pbnRlckdldEJsb2NrTnVtYmVyKHRpZCksCi0JCQkJCQkJICBlc3RhdGUtPmVz X3NuYXBzaG90KTsKLQogCQlyZXR1cm4gc2xvdDsKIAl9CiAKQEAgLTQxMCwxMyArMzI3LDYgQEAg RXhlY0VuZEluZGV4T25seVNjYW4oSW5kZXhPbmx5U2NhblN0YXRlICpub2RlKQogCWluZGV4UmVs YXRpb25EZXNjID0gbm9kZS0+aW9zc19SZWxhdGlvbkRlc2M7CiAJaW5kZXhTY2FuRGVzYyA9IG5v ZGUtPmlvc3NfU2NhbkRlc2M7CiAKLQkvKiBSZWxlYXNlIFZNIGJ1ZmZlciBwaW4sIGlmIGFueS4g Ki8KLQlpZiAobm9kZS0+aW9zc19WTUJ1ZmZlciAhPSBJbnZhbGlkQnVmZmVyKQotCXsKLQkJUmVs ZWFzZUJ1ZmZlcihub2RlLT5pb3NzX1ZNQnVmZmVyKTsKLQkJbm9kZS0+aW9zc19WTUJ1ZmZlciA9 IEludmFsaWRCdWZmZXI7Ci0JfQotCiAJLyoKIAkgKiBXaGVuIGVuZGluZyBhIHBhcmFsbGVsIHdv cmtlciwgY29weSB0aGUgc3RhdGlzdGljcyBnYXRoZXJlZCBieSB0aGUKIAkgKiB3b3JrZXIgYmFj ayBpbnRvIHNoYXJlZCBtZW1vcnkgc28gdGhhdCBpdCBjYW4gYmUgcGlja2VkIHVwIGJ5IHRoZSBt YWluCkBAIC00MzYsNiArMzQ2LDcgQEAgRXhlY0VuZEluZGV4T25seVNjYW4oSW5kZXhPbmx5U2Nh blN0YXRlICpub2RlKQogCQkgKiB3aGljaCB3aWxsIGhhdmUgYSBuZXcgSW5kZXhPbmx5U2NhblN0 YXRlIGFuZCB6ZXJvZWQgc3RhdHMuCiAJCSAqLwogCQl3aW5zdHJ1bWVudC0+bnNlYXJjaGVzICs9 IG5vZGUtPmlvc3NfSW5zdHJ1bWVudC0+bnNlYXJjaGVzOworCQl3aW5zdHJ1bWVudC0+bnRhYmxl dHVwbGVmZXRjaGVzICs9IG5vZGUtPmlvc3NfSW5zdHJ1bWVudC0+bnRhYmxldHVwbGVmZXRjaGVz OwogCX0KIAogCS8qCkBAIC03OTMsMTQgKzcwNCwxNCBAQCBFeGVjSW5kZXhPbmx5U2NhbkluaXRp YWxpemVEU00oSW5kZXhPbmx5U2NhblN0YXRlICpub2RlLAogCW5vZGUtPmlvc3NfU2NhbkRlc2Mg PQogCQlpbmRleF9iZWdpbnNjYW5fcGFyYWxsZWwobm9kZS0+c3Muc3NfY3VycmVudFJlbGF0aW9u LAogCQkJCQkJCQkgbm9kZS0+aW9zc19SZWxhdGlvbkRlc2MsCisJCQkJCQkJCSB0cnVlLAogCQkJ CQkJCQkgbm9kZS0+aW9zc19JbnN0cnVtZW50LAogCQkJCQkJCQkgbm9kZS0+aW9zc19OdW1TY2Fu S2V5cywKIAkJCQkJCQkJIG5vZGUtPmlvc3NfTnVtT3JkZXJCeUtleXMsCiAJCQkJCQkJCSBwaXNj YW4sCiAJCQkJCQkJCSBTY2FuUmVsSXNSZWFkT25seSgmbm9kZS0+c3MpID8KIAkJCQkJCQkJIFNP X0hJTlRfUkVMX1JFQURfT05MWSA6IFNPX05PTkUpOwotCW5vZGUtPmlvc3NfU2NhbkRlc2MtPnhz X3dhbnRfaXR1cCA9IHRydWU7Ci0Jbm9kZS0+aW9zc19WTUJ1ZmZlciA9IEludmFsaWRCdWZmZXI7 CisJQXNzZXJ0KG5vZGUtPmlvc3NfU2NhbkRlc2MtPnhzX3dhbnRfaXR1cCk7CiAKIAkvKgogCSAq IElmIG5vIHJ1bi10aW1lIGtleXMgdG8gY2FsY3VsYXRlIG9yIHRoZXkgYXJlIHJlYWR5LCBnbyBh aGVhZCBhbmQgcGFzcwpAQCAtODYxLDEzICs3NzIsMTQgQEAgRXhlY0luZGV4T25seVNjYW5Jbml0 aWFsaXplV29ya2VyKEluZGV4T25seVNjYW5TdGF0ZSAqbm9kZSwKIAlub2RlLT5pb3NzX1NjYW5E ZXNjID0KIAkJaW5kZXhfYmVnaW5zY2FuX3BhcmFsbGVsKG5vZGUtPnNzLnNzX2N1cnJlbnRSZWxh dGlvbiwKIAkJCQkJCQkJIG5vZGUtPmlvc3NfUmVsYXRpb25EZXNjLAorCQkJCQkJCQkgdHJ1ZSwK IAkJCQkJCQkJIG5vZGUtPmlvc3NfSW5zdHJ1bWVudCwKIAkJCQkJCQkJIG5vZGUtPmlvc3NfTnVt U2NhbktleXMsCiAJCQkJCQkJCSBub2RlLT5pb3NzX051bU9yZGVyQnlLZXlzLAogCQkJCQkJCQkg cGlzY2FuLAogCQkJCQkJCQkgU2NhblJlbElzUmVhZE9ubHkoJm5vZGUtPnNzKSA/CiAJCQkJCQkJ CSBTT19ISU5UX1JFTF9SRUFEX09OTFkgOiBTT19OT05FKTsKLQlub2RlLT5pb3NzX1NjYW5EZXNj LT54c193YW50X2l0dXAgPSB0cnVlOworCUFzc2VydChub2RlLT5pb3NzX1NjYW5EZXNjLT54c193 YW50X2l0dXApOwogCiAJLyoKIAkgKiBJZiBubyBydW4tdGltZSBrZXlzIHRvIGNhbGN1bGF0ZSBv ciB0aGV5IGFyZSByZWFkeSwgZ28gYWhlYWQgYW5kIHBhc3MKZGlmZiAtLWdpdCBhL3NyYy9iYWNr ZW5kL2V4ZWN1dG9yL25vZGVJbmRleHNjYW4uYyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVJ bmRleHNjYW4uYwppbmRleCAxNjIwZDE0NjAuLjJhYzg1NGRhNCAxMDA2NDQKLS0tIGEvc3JjL2Jh Y2tlbmQvZXhlY3V0b3Ivbm9kZUluZGV4c2Nhbi5jCisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9y L25vZGVJbmRleHNjYW4uYwpAQCAtMTEwLDYgKzExMCw3IEBAIEluZGV4TmV4dChJbmRleFNjYW5T dGF0ZSAqbm9kZSkKIAkJICovCiAJCXNjYW5kZXNjID0gaW5kZXhfYmVnaW5zY2FuKG5vZGUtPnNz LnNzX2N1cnJlbnRSZWxhdGlvbiwKIAkJCQkJCQkJICAgbm9kZS0+aXNzX1JlbGF0aW9uRGVzYywK KwkJCQkJCQkJICAgZmFsc2UsCiAJCQkJCQkJCSAgIGVzdGF0ZS0+ZXNfc25hcHNob3QsCiAJCQkJ CQkJCSAgIG5vZGUtPmlzc19JbnN0cnVtZW50LAogCQkJCQkJCQkgICBub2RlLT5pc3NfTnVtU2Nh bktleXMsCkBAIC0xMzIsNyArMTMzLDcgQEAgSW5kZXhOZXh0KEluZGV4U2NhblN0YXRlICpub2Rl KQogCS8qCiAJICogb2ssIG5vdyB0aGF0IHdlIGhhdmUgd2hhdCB3ZSBuZWVkLCBmZXRjaCB0aGUg bmV4dCB0dXBsZS4KIAkgKi8KLQl3aGlsZSAoaW5kZXhfZ2V0bmV4dF9zbG90KHNjYW5kZXNjLCBk aXJlY3Rpb24sIHNsb3QpKQorCXdoaWxlICh0YWJsZV9pbmRleF9nZXRuZXh0X3Nsb3Qoc2NhbmRl c2MsIGRpcmVjdGlvbiwgc2xvdCkpCiAJewogCQlDSEVDS19GT1JfSU5URVJSVVBUUygpOwogCkBA IC0yMDgsNiArMjA5LDcgQEAgSW5kZXhOZXh0V2l0aFJlb3JkZXIoSW5kZXhTY2FuU3RhdGUgKm5v ZGUpCiAJCSAqLwogCQlzY2FuZGVzYyA9IGluZGV4X2JlZ2luc2Nhbihub2RlLT5zcy5zc19jdXJy ZW50UmVsYXRpb24sCiAJCQkJCQkJCSAgIG5vZGUtPmlzc19SZWxhdGlvbkRlc2MsCisJCQkJCQkJ CSAgIGZhbHNlLAogCQkJCQkJCQkgICBlc3RhdGUtPmVzX3NuYXBzaG90LAogCQkJCQkJCQkgICBu b2RlLT5pc3NfSW5zdHJ1bWVudCwKIAkJCQkJCQkJICAgbm9kZS0+aXNzX051bVNjYW5LZXlzLApA QCAtMjY2LDcgKzI2OCw3IEBAIEluZGV4TmV4dFdpdGhSZW9yZGVyKEluZGV4U2NhblN0YXRlICpu b2RlKQogCQkgKiBGZXRjaCBuZXh0IHR1cGxlIGZyb20gdGhlIGluZGV4LgogCQkgKi8KIG5leHRf aW5kZXh0dXBsZToKLQkJaWYgKCFpbmRleF9nZXRuZXh0X3Nsb3Qoc2NhbmRlc2MsIEZvcndhcmRT Y2FuRGlyZWN0aW9uLCBzbG90KSkKKwkJaWYgKCF0YWJsZV9pbmRleF9nZXRuZXh0X3Nsb3Qoc2Nh bmRlc2MsIEZvcndhcmRTY2FuRGlyZWN0aW9uLCBzbG90KSkKIAkJewogCQkJLyoKIAkJCSAqIE5v IG1vcmUgdHVwbGVzIGZyb20gdGhlIGluZGV4LiAgQnV0IHdlIHN0aWxsIG5lZWQgdG8gZHJhaW4g YW55CkBAIC04MTgsNiArODIwLDcgQEAgRXhlY0VuZEluZGV4U2NhbihJbmRleFNjYW5TdGF0ZSAq bm9kZSkKIAkJICogd2hpY2ggd2lsbCBoYXZlIGEgbmV3IEluZGV4T25seVNjYW5TdGF0ZSBhbmQg emVyb2VkIHN0YXRzLgogCQkgKi8KIAkJd2luc3RydW1lbnQtPm5zZWFyY2hlcyArPSBub2RlLT5p c3NfSW5zdHJ1bWVudC0+bnNlYXJjaGVzOworCQlBc3NlcnQobm9kZS0+aXNzX0luc3RydW1lbnQt Pm50YWJsZXR1cGxlZmV0Y2hlcyA9PSAwKTsKIAl9CiAKIAkvKgpAQCAtMTczMSw2ICsxNzM0LDcg QEAgRXhlY0luZGV4U2NhbkluaXRpYWxpemVEU00oSW5kZXhTY2FuU3RhdGUgKm5vZGUsCiAJbm9k ZS0+aXNzX1NjYW5EZXNjID0KIAkJaW5kZXhfYmVnaW5zY2FuX3BhcmFsbGVsKG5vZGUtPnNzLnNz X2N1cnJlbnRSZWxhdGlvbiwKIAkJCQkJCQkJIG5vZGUtPmlzc19SZWxhdGlvbkRlc2MsCisJCQkJ CQkJCSBmYWxzZSwKIAkJCQkJCQkJIG5vZGUtPmlzc19JbnN0cnVtZW50LAogCQkJCQkJCQkgbm9k ZS0+aXNzX051bVNjYW5LZXlzLAogCQkJCQkJCQkgbm9kZS0+aXNzX051bU9yZGVyQnlLZXlzLApA QCAtMTc5Nyw2ICsxODAxLDcgQEAgRXhlY0luZGV4U2NhbkluaXRpYWxpemVXb3JrZXIoSW5kZXhT Y2FuU3RhdGUgKm5vZGUsCiAJbm9kZS0+aXNzX1NjYW5EZXNjID0KIAkJaW5kZXhfYmVnaW5zY2Fu X3BhcmFsbGVsKG5vZGUtPnNzLnNzX2N1cnJlbnRSZWxhdGlvbiwKIAkJCQkJCQkJIG5vZGUtPmlz c19SZWxhdGlvbkRlc2MsCisJCQkJCQkJCSBmYWxzZSwKIAkJCQkJCQkJIG5vZGUtPmlzc19JbnN0 cnVtZW50LAogCQkJCQkJCQkgbm9kZS0+aXNzX051bVNjYW5LZXlzLAogCQkJCQkJCQkgbm9kZS0+ aXNzX051bU9yZGVyQnlLZXlzLApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3Jp X3RyaWdnZXJzLmMgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvcmlfdHJpZ2dlcnMuYwppbmRleCA4 NGY5ZmVjZGIuLmZjZWI1NjM4NiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3Jp X3RyaWdnZXJzLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3JpX3RyaWdnZXJzLmMKQEAg LTI4MDMsNyArMjgwMyw3IEBAIHJpX0Zhc3RQYXRoQ2hlY2soY29uc3QgUklfQ29uc3RyYWludElu Zm8gKnJpaW5mbywKIAlpZHhfcmVsID0gaW5kZXhfb3BlbihyaWluZm8tPmNvbmluZGlkLCBBY2Nl c3NTaGFyZUxvY2spOwogCiAJc2xvdCA9IHRhYmxlX3Nsb3RfY3JlYXRlKHBrX3JlbCwgTlVMTCk7 Ci0Jc2NhbmRlc2MgPSBpbmRleF9iZWdpbnNjYW4ocGtfcmVsLCBpZHhfcmVsLAorCXNjYW5kZXNj ID0gaW5kZXhfYmVnaW5zY2FuKHBrX3JlbCwgaWR4X3JlbCwgZmFsc2UsCiAJCQkJCQkJICAgc25h cHNob3QsIE5VTEwsCiAJCQkJCQkJICAgcmlpbmZvLT5ua2V5cywgMCwKIAkJCQkJCQkgICBTT19O T05FKTsKQEAgLTI5MTgsNyArMjkxOCw3IEBAIHJpX0Zhc3RQYXRoQmF0Y2hGbHVzaChSSV9GYXN0 UGF0aEVudHJ5ICpmcGVudHJ5LCBSZWxhdGlvbiBma19yZWwsCiAJICovCiAJb2xkY3h0ID0gTWVt b3J5Q29udGV4dFN3aXRjaFRvKGZwZW50cnktPmZsdXNoX2N4dCk7CiAKLQlzY2FuZGVzYyA9IGlu ZGV4X2JlZ2luc2Nhbihwa19yZWwsIGlkeF9yZWwsIHNuYXBzaG90LCBOVUxMLAorCXNjYW5kZXNj ID0gaW5kZXhfYmVnaW5zY2FuKHBrX3JlbCwgaWR4X3JlbCwgZmFsc2UsIHNuYXBzaG90LCBOVUxM LAogCQkJCQkJCSAgIHJpaW5mby0+bmtleXMsIDAsIFNPX05PTkUpOwogCiAJR2V0VXNlcklkQW5k U2VjQ29udGV4dCgmc2F2ZWRfdXNlcmlkLCAmc2F2ZWRfc2VjX2NvbnRleHQpOwpAQCAtMzExMiw3 ICszMTEyLDcgQEAgcmlfRmFzdFBhdGhGbHVzaEFycmF5KFJJX0Zhc3RQYXRoRW50cnkgKmZwZW50 cnksIFR1cGxlVGFibGVTbG90ICpma19zbG90LAogCSAqIFdhbGsgYWxsIG1hdGNoZXMuICBUaGUg aW5kZXggQU0gcmV0dXJucyB0aGVtIGluIGluZGV4IG9yZGVyLiAgRm9yIGVhY2gKIAkgKiBtYXRj aCwgZmluZCB3aGljaCBiYXRjaCBpdGVtKHMpIGl0IHNhdGlzZmllcy4KIAkgKi8KLQl3aGlsZSAo aW5kZXhfZ2V0bmV4dF9zbG90KHNjYW5kZXNjLCBGb3J3YXJkU2NhbkRpcmVjdGlvbiwgcGtfc2xv dCkpCisJd2hpbGUgKHRhYmxlX2luZGV4X2dldG5leHRfc2xvdChzY2FuZGVzYywgRm9yd2FyZFNj YW5EaXJlY3Rpb24sIHBrX3Nsb3QpKQogCXsKIAkJRGF0dW0JCWZvdW5kX3ZhbDsKIAkJYm9vbAkJ Zm91bmRfbnVsbDsKQEAgLTMxODUsNyArMzE4NSw3IEBAIHJpX0Zhc3RQYXRoUHJvYmVPbmUoUmVs YXRpb24gcGtfcmVsLCBSZWxhdGlvbiBpZHhfcmVsLAogCiAJaW5kZXhfcmVzY2FuKHNjYW5kZXNj LCBza2V5LCBua2V5cywgTlVMTCwgMCk7CiAKLQlpZiAoaW5kZXhfZ2V0bmV4dF9zbG90KHNjYW5k ZXNjLCBGb3J3YXJkU2NhbkRpcmVjdGlvbiwgc2xvdCkpCisJaWYgKHRhYmxlX2luZGV4X2dldG5l eHRfc2xvdChzY2FuZGVzYywgRm9yd2FyZFNjYW5EaXJlY3Rpb24sIHNsb3QpKQogCXsKIAkJYm9v bAkJY29uY3VycmVudGx5X3VwZGF0ZWQ7CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxz L2FkdC9zZWxmdW5jcy5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3NlbGZ1bmNzLmMKaW5kZXgg NDE2MGQyZDZlLi42YTFkZmFiNTEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9z ZWxmdW5jcy5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9zZWxmdW5jcy5jCkBAIC0xMDIs NyArMTAyLDYgQEAKICNpbmNsdWRlICJhY2Nlc3MvZ2luLmgiCiAjaW5jbHVkZSAiYWNjZXNzL3Rh YmxlLmgiCiAjaW5jbHVkZSAiYWNjZXNzL3RhYmxlYW0uaCIKLSNpbmNsdWRlICJhY2Nlc3Mvdmlz aWJpbGl0eW1hcC5oIgogI2luY2x1ZGUgImNhdGFsb2cvcGdfY29sbGF0aW9uLmgiCiAjaW5jbHVk ZSAiY2F0YWxvZy9wZ19vcGVyYXRvci5oIgogI2luY2x1ZGUgImNhdGFsb2cvcGdfc3RhdGlzdGlj LmgiCkBAIC03MTIxLDEwICs3MTIwLDYgQEAgZ2V0X2FjdHVhbF92YXJpYWJsZV9lbmRwb2ludChS ZWxhdGlvbiBoZWFwUmVsLAogCWJvb2wJCWhhdmVfZGF0YSA9IGZhbHNlOwogCVNuYXBzaG90RGF0 YSBTbmFwc2hvdE5vblZhY3V1bWFibGU7CiAJSW5kZXhTY2FuRGVzYyBpbmRleF9zY2FuOwotCUJ1 ZmZlcgkJdm1idWZmZXIgPSBJbnZhbGlkQnVmZmVyOwotCUJsb2NrTnVtYmVyIGxhc3RfaGVhcF9i bG9jayA9IEludmFsaWRCbG9ja051bWJlcjsKLQlpbnQJCQluX3Zpc2l0ZWRfaGVhcF9wYWdlcyA9 IDA7Ci0JSXRlbVBvaW50ZXIgdGlkOwogCURhdHVtCQl2YWx1ZXNbSU5ERVhfTUFYX0tFWVNdOwog CWJvb2wJCWlzbnVsbFtJTkRFWF9NQVhfS0VZU107CiAJTWVtb3J5Q29udGV4dCBvbGRjb250ZXh0 OwpAQCAtNzE3Miw2MiArNzE2NywyNiBAQCBnZXRfYWN0dWFsX3ZhcmlhYmxlX2VuZHBvaW50KFJl bGF0aW9uIGhlYXBSZWwsCiAJICogYSBodWdlIGFtb3VudCBvZiB0aW1lIGhlcmUsIHNvIHdlIGdp dmUgdXAgb25jZSB3ZSd2ZSByZWFkIHRvbyBtYW55IGhlYXAKIAkgKiBwYWdlcy4gIFdoZW4gd2Ug ZmFpbCBmb3IgdGhhdCByZWFzb24sIHRoZSBjYWxsZXIgd2lsbCBlbmQgdXAgdXNpbmcKIAkgKiB3 aGF0ZXZlciBleHRyZW1hbCB2YWx1ZSBpcyByZWNvcmRlZCBpbiBwZ19zdGF0aXN0aWMuCisJICoK KwkgKiBXZSBzZXQgeHNfdmlzaXRlZF9wYWdlc19saW1pdCB0byB0ZWxsIHRoZSB0YWJsZSBBTSB0 byBjb3VudCBkaXN0aW5jdAorCSAqIGhlYXAgcGFnZXMgdmlzaXRlZCBmb3Igbm9uLXZpc2libGUg dHVwbGVzIGFuZCBnaXZlIHVwIGFmdGVyIHRoZSBsaW1pdAorCSAqIGlzIGV4Y2VlZGVkLgogCSAq LworI2RlZmluZSBWSVNJVEVEX1BBR0VTX0xJTUlUIDEwMAogCUluaXROb25WYWN1dW1hYmxlU25h cHNob3QoU25hcHNob3ROb25WYWN1dW1hYmxlLAogCQkJCQkJCSAgR2xvYmFsVmlzVGVzdEZvciho ZWFwUmVsKSk7CiAKLQlpbmRleF9zY2FuID0gaW5kZXhfYmVnaW5zY2FuKGhlYXBSZWwsIGluZGV4 UmVsLAorCWluZGV4X3NjYW4gPSBpbmRleF9iZWdpbnNjYW4oaGVhcFJlbCwgaW5kZXhSZWwsIHRy dWUsCiAJCQkJCQkJCSAmU25hcHNob3ROb25WYWN1dW1hYmxlLCBOVUxMLAogCQkJCQkJCQkgMSwg MCwKIAkJCQkJCQkJIFNPX05PTkUpOwotCS8qIFNldCBpdCB1cCBmb3IgaW5kZXgtb25seSBzY2Fu ICovCi0JaW5kZXhfc2Nhbi0+eHNfd2FudF9pdHVwID0gdHJ1ZTsKKwlBc3NlcnQoaW5kZXhfc2Nh bi0+eHNfd2FudF9pdHVwKTsKKwlpbmRleF9zY2FuLT54c192aXNpdGVkX3BhZ2VzX2xpbWl0ID0g VklTSVRFRF9QQUdFU19MSU1JVDsKIAlpbmRleF9yZXNjYW4oaW5kZXhfc2Nhbiwgc2NhbmtleXMs IDEsIE5VTEwsIDApOwogCiAJLyogRmV0Y2ggZmlyc3QvbmV4dCB0dXBsZSBpbiBzcGVjaWZpZWQg ZGlyZWN0aW9uICovCi0Jd2hpbGUgKCh0aWQgPSBpbmRleF9nZXRuZXh0X3RpZChpbmRleF9zY2Fu LCBpbmRleHNjYW5kaXIpKSAhPSBOVUxMKQorCXdoaWxlICh0YWJsZV9pbmRleF9nZXRuZXh0X3Ns b3QoaW5kZXhfc2NhbiwgaW5kZXhzY2FuZGlyLCB0YWJsZXNsb3QpKQogCXsKLQkJQmxvY2tOdW1i ZXIgYmxvY2sgPSBJdGVtUG9pbnRlckdldEJsb2NrTnVtYmVyKHRpZCk7Ci0KLQkJaWYgKCFWTV9B TExfVklTSUJMRShoZWFwUmVsLAotCQkJCQkJCWJsb2NrLAotCQkJCQkJCSZ2bWJ1ZmZlcikpCi0J CXsKLQkJCS8qIFJhdHMsIHdlIGhhdmUgdG8gdmlzaXQgdGhlIGhlYXAgdG8gY2hlY2sgdmlzaWJp bGl0eSAqLwotCQkJaWYgKCFpbmRleF9mZXRjaF9oZWFwKGluZGV4X3NjYW4sIHRhYmxlc2xvdCkp Ci0JCQl7Ci0JCQkJLyoKLQkJCQkgKiBObyB2aXNpYmxlIHR1cGxlIGZvciB0aGlzIGluZGV4IGVu dHJ5LCBzbyB3ZSBuZWVkIHRvCi0JCQkJICogYWR2YW5jZSB0byB0aGUgbmV4dCBlbnRyeS4gIEJl Zm9yZSBkb2luZyBzbywgY291bnQgaGVhcAotCQkJCSAqIHBhZ2UgZmV0Y2hlcyBhbmQgZ2l2ZSB1 cCBpZiB3ZSd2ZSBkb25lIHRvbyBtYW55LgotCQkJCSAqCi0JCQkJICogV2UgZG9uJ3QgY2hhcmdl IGEgcGFnZSBmZXRjaCBpZiB0aGlzIGlzIHRoZSBzYW1lIGhlYXAgcGFnZQotCQkJCSAqIGFzIHRo ZSBwcmV2aW91cyB0dXBsZS4gIFRoaXMgaXMgb24gdGhlIGNvbnNlcnZhdGl2ZSBzaWRlLAotCQkJ CSAqIHNpbmNlIG90aGVyIHJlY2VudGx5LWFjY2Vzc2VkIHBhZ2VzIGFyZSBwcm9iYWJseSBzdGls bCBpbgotCQkJCSAqIGJ1ZmZlcnMgdG9vOyBidXQgaXQncyBnb29kIGVub3VnaCBmb3IgdGhpcyBo ZXVyaXN0aWMuCi0JCQkJICovCi0jZGVmaW5lIFZJU0lURURfUEFHRVNfTElNSVQgMTAwCi0KLQkJ CQlpZiAoYmxvY2sgIT0gbGFzdF9oZWFwX2Jsb2NrKQotCQkJCXsKLQkJCQkJbGFzdF9oZWFwX2Js b2NrID0gYmxvY2s7Ci0JCQkJCW5fdmlzaXRlZF9oZWFwX3BhZ2VzKys7Ci0JCQkJCWlmIChuX3Zp c2l0ZWRfaGVhcF9wYWdlcyA+IFZJU0lURURfUEFHRVNfTElNSVQpCi0JCQkJCQlicmVhazsKLQkJ CQl9Ci0KLQkJCQljb250aW51ZTsJCS8qIG5vIHZpc2libGUgdHVwbGUsIHRyeSBuZXh0IGluZGV4 IGVudHJ5ICovCi0JCQl9Ci0KLQkJCS8qIFdlIGRvbid0IGFjdHVhbGx5IG5lZWQgdGhlIGhlYXAg dHVwbGUgZm9yIGFueXRoaW5nICovCi0JCQlFeGVjQ2xlYXJUdXBsZSh0YWJsZXNsb3QpOwotCi0J CQkvKgotCQkJICogV2UgZG9uJ3QgY2FyZSB3aGV0aGVyIHRoZXJlJ3MgbW9yZSB0aGFuIG9uZSB2 aXNpYmxlIHR1cGxlIGluCi0JCQkgKiB0aGUgSE9UIGNoYWluOyBpZiBhbnkgYXJlIHZpc2libGUs IHRoYXQncyBnb29kIGVub3VnaC4KLQkJCSAqLwotCQl9Ci0KIAkJLyoKIAkJICogV2UgZXhwZWN0 IHRoYXQgdGhlIGluZGV4IHdpbGwgcmV0dXJuIGRhdGEgaW4gSW5kZXhUdXBsZSBub3QKIAkJICog SGVhcFR1cGxlIGZvcm1hdC4KQEAgLTcyNTksOCArNzIxOCw2IEBAIGdldF9hY3R1YWxfdmFyaWFi bGVfZW5kcG9pbnQoUmVsYXRpb24gaGVhcFJlbCwKIAkJYnJlYWs7CiAJfQogCi0JaWYgKHZtYnVm ZmVyICE9IEludmFsaWRCdWZmZXIpCi0JCVJlbGVhc2VCdWZmZXIodm1idWZmZXIpOwogCWluZGV4 X2VuZHNjYW4oaW5kZXhfc2Nhbik7CiAKIAlyZXR1cm4gaGF2ZV9kYXRhOwotLSAKMi41My4wCgo= --0000000000002fe31c064eaff221 Content-Type: application/octet-stream; name="v23-0008-WIP-aio-bufmgr-Fix-race-condition-leading-to-dea.patch" Content-Disposition: attachment; filename="v23-0008-WIP-aio-bufmgr-Fix-race-condition-leading-to-dea.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mnlbta3n7 RnJvbSA2NTNhMzdhMjk2M2UyYTAxZTEzMjBjNTA3ODA0MGQwMjA5ZDU1MTlhIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbmRyZXMgRnJldW5kIDxhbmRyZXNAYW5hcmF6ZWwuZGU+CkRh dGU6IFN1biwgMjIgTWFyIDIwMjYgMTU6MTk6MDggLTA0MDAKU3ViamVjdDogW1BBVENIIHYyMyA4 LzhdIFdJUDogYWlvOiBidWZtZ3I6IEZpeCByYWNlIGNvbmRpdGlvbiBsZWFkaW5nIHRvCiBkZWFk bG9ja3Mgd2l0aCBpb191cmluZwoKSWYgYmFja2VuZCBBIGlzIGluIHRoZSBwcm9jZXNzIG9mIHN0 YXJ0aW5nIElPIGZvciBhIGJ1ZmZlciwgdGhlcmUgaXMgYSBzaG9ydApwZXJpb2QgaW4gd2hpY2gg dGhlIGJ1ZmZlciBpcyBtYXJrZWQgYXMgSU9fSU5fUFJPR1JFU1Mgd2l0aG91dCBoYXZpbmcgYW4K YXNzb2NpYXRlZCBBSU8gd2FpdCByZWZlcmVuY2UuIElmIGEgYmFja2VuZCBCIGRvZXMgV2FpdElP KCkgb24gdGhhdCBidWZmZXIsCml0J2xsIHdhaXQgZm9yIHRoZSBidWZmZXIncyBJTyBjb25kaXRp b24gdmFyaWFibGUgdG8gYmUgc2V0LiBNb3N0IG9mIHRoZSB0aW1lCnRoYXQgaXMgT0ssIHdoZW4g dGhlIElPIG9uIHRoZSBidWZmZXIgZmluaXNoZXMsIHRoZSBDViB3aWxsIGJlIHNpZ25hbGxlZC4K SG93ZXZlciwgd2l0aCBpb191cmluZywgaXQgaXMgcG9zc2libGUgdGhhdCB0aGUgaXNzdWVyIChB KSBvZiB0aGUgSU8gbmV2ZXIKZ2V0cyBhcm91bmQgdG8gZG9pbmcgc28sIGUuZy4gYmVjYXVzZSBp dCBpcyB3YWl0aW5nIGZvciBzb21ldGhpbmcgZG9uZSBieSBCLgoKVG8gZml4IHRoYXQsIHdlIG5l ZWQgdG8gc2lnbmFsIHRoZSBDViB3aGVuIHN0YWdpbmcgSU8uIFRoYXQncyBhbm5veWluZyBhcyBD Vgpicm9hZGNhc3RzIGFyZSBub3QgY2hlYXAuIFNvIHdlIGF0IGxlYXN0IGF2b2lkIGl0IGZvciB0 aGUgY29tbW9uIGNhc2Ugb2YgSU8KYmVpbmcgZXhlY3V0ZWQgc3luY2hyb25vdXNseS4KCkkgaG9w ZSB0aGF0IGV2ZW50dWFsbHkgd2UgY2FuIGdldCBhd2F5IGZyb20gbmVlZGluZyBtdWx0aXBsZSBz eXN0ZW1zIGZvcgpzaWduYWxsaW5nIElPIGNvbXBsZXRpb24sIGJ1dCB3ZSBhcmUgY2xlYXJseSBu b3QgdGhlcmUgeWV0LgotLS0KIHNyYy9iYWNrZW5kL3N0b3JhZ2UvYnVmZmVyL2J1Zm1nci5jIHwg MjIgKysrKysrKysrKysrKysrKysrKy0tLQogMSBmaWxlIGNoYW5nZWQsIDE5IGluc2VydGlvbnMo KyksIDMgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9idWZm ZXIvYnVmbWdyLmMgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2J1ZmZlci9idWZtZ3IuYwppbmRleCAz MzUwZjc4ZDAuLjcxODk5YzVhOCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9idWZm ZXIvYnVmbWdyLmMKKysrIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9idWZmZXIvYnVmbWdyLmMKQEAg LTgzMTIsNyArODMxMiw3IEBAIE1hcmtEaXJ0eUFsbFVucGlubmVkQnVmZmVycyhpbnQzMiAqYnVm ZmVyc19kaXJ0aWVkLAogICogcmVwbGFjZWQgd2hpbGUgSU8gaXMgb25nb2luZy4KICAqLwogc3Rh dGljIHBnX2F0dHJpYnV0ZV9hbHdheXNfaW5saW5lIHZvaWQKLWJ1ZmZlcl9zdGFnZV9jb21tb24o UGdBaW9IYW5kbGUgKmlvaCwgYm9vbCBpc193cml0ZSwgYm9vbCBpc190ZW1wKQorYnVmZmVyX3N0 YWdlX2NvbW1vbihQZ0Fpb0hhbmRsZSAqaW9oLCB1aW50OCBjYl9kYXRhLCBib29sIGlzX3dyaXRl LCBib29sIGlzX3RlbXApCiB7CiAJdWludDY0CSAgICppb19kYXRhOwogCXVpbnQ4CQloYW5kbGVf ZGF0YV9sZW47CkBAIC04NDExLDcgKzg0MTEsMjMgQEAgYnVmZmVyX3N0YWdlX2NvbW1vbihQZ0Fp b0hhbmRsZSAqaW9oLCBib29sIGlzX3dyaXRlLCBib29sIGlzX3RlbXApCiAJCSAqIGtlZXBzIHRy YWNrLgogCQkgKi8KIAkJaWYgKCFpc190ZW1wKQorCQl7CiAJCQlSZXNvdXJjZU93bmVyRm9yZ2V0 QnVmZmVySU8oQ3VycmVudFJlc291cmNlT3duZXIsIGJ1ZmZlcik7CisKKwkJCS8qCisJCQkgKiBB IGJhY2tlbmQgbWlnaHQgaGF2ZSBzdGFydGVkIHdhaXRpbmcgZm9yIHRoZSBJTyB1c2luZyB0aGUK KwkJCSAqIGJ1ZmZlcidzIGNvbmRpdGlvbiB2YXJpYWJsZSwgYnV0IG9uY2UgdGhlIElPIGlzIHN1 Ym1pdHRlZCwgaXQKKwkJCSAqIHNob3VsZCB3YWl0IHZpYSB0aGUgQUlPIHN1YnN5c3RlbSwgYXMg YSB3YWl0ZXIgbWlnaHQgbmVlZCB0bworCQkJICogY29tcGxldGUgdGhlIElPLgorCQkJICoKKwkJ CSAqIEhvd2V2ZXIsIGRvaW5nIGJyb2FkY2FzdHMgaXMgbm90IGZyZWUsIHNvIHdlIGxpa2UgdG8g YXZvaWQgaXQKKwkJCSAqIHdoZW4gbm90IG5lY2Vzc2FyeS4gSWYgdGhlIElPIGlzIGJlaW5nIGV4 ZWN1dGVkIHN5bmNocm9ub3VzbHksCisJCQkgKiB0aGlzIGJhY2tlbmQgd2lsbCBhbHdheXMgZW5k IHVwIHNpZ25hbGxpbmcgdGhlIElPQ1Ygd2l0aG91dAorCQkJICogZnVydGhlciB3YWl0aW5nLCB0 aGVyZWZvcmUgYXZvaWQgZG9pbmcgc28gaGVyZS4KKwkJCSAqLworCQkJaWYgKCEoY2JfZGF0YSAm IFJFQURfQlVGRkVSU19TWU5DSFJPTk9VU0xZKSkKKwkJCQlDb25kaXRpb25WYXJpYWJsZUJyb2Fk Y2FzdChCdWZmZXJEZXNjcmlwdG9yR2V0SU9DVihidWZfaGRyKSk7CisJCX0KIAl9CiB9CiAKQEAg LTg5MDcsNyArODkyMyw3IEBAIGJ1ZmZlcl9yZWFkdl9yZXBvcnQoUGdBaW9SZXN1bHQgcmVzdWx0 LCBjb25zdCBQZ0Fpb1RhcmdldERhdGEgKnRkLAogc3RhdGljIHZvaWQKIHNoYXJlZF9idWZmZXJf cmVhZHZfc3RhZ2UoUGdBaW9IYW5kbGUgKmlvaCwgdWludDggY2JfZGF0YSkKIHsKLQlidWZmZXJf c3RhZ2VfY29tbW9uKGlvaCwgZmFsc2UsIGZhbHNlKTsKKwlidWZmZXJfc3RhZ2VfY29tbW9uKGlv aCwgY2JfZGF0YSwgZmFsc2UsIGZhbHNlKTsKIH0KIAogc3RhdGljIFBnQWlvUmVzdWx0CkBAIC04 OTU4LDcgKzg5NzQsNyBAQCBzaGFyZWRfYnVmZmVyX3JlYWR2X2NvbXBsZXRlX2xvY2FsKFBnQWlv SGFuZGxlICppb2gsIFBnQWlvUmVzdWx0IHByaW9yX3Jlc3VsdCwKIHN0YXRpYyB2b2lkCiBsb2Nh bF9idWZmZXJfcmVhZHZfc3RhZ2UoUGdBaW9IYW5kbGUgKmlvaCwgdWludDggY2JfZGF0YSkKIHsK LQlidWZmZXJfc3RhZ2VfY29tbW9uKGlvaCwgZmFsc2UsIHRydWUpOworCWJ1ZmZlcl9zdGFnZV9j b21tb24oaW9oLCBjYl9kYXRhLCBmYWxzZSwgdHJ1ZSk7CiB9CiAKIHN0YXRpYyBQZ0Fpb1Jlc3Vs dAotLSAKMi41My4wCgo= --0000000000002fe31c064eaff221 Content-Type: application/octet-stream; name="v23-0002-Add-amgetbatch-interface-and-adopt-it-in-nbtree.patch" Content-Disposition: attachment; filename="v23-0002-Add-amgetbatch-interface-and-adopt-it-in-nbtree.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mnlbta3k6 RnJvbSA5YWMzY2EzYWNiMDkzMDAxMGE1YzZhZWI3NWM0Y2FmZDc1ZTlmZjA2IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBHZW9naGVnYW4gPHBnQGJvd3QuaWU+CkRhdGU6IFdl ZCwgMjUgTWFyIDIwMjYgMTY6NDg6NDMgLTA0MDAKU3ViamVjdDogW1BBVENIIHYyMyAyLzhdIEFk ZCBhbWdldGJhdGNoIGludGVyZmFjZSBhbmQgYWRvcHQgaXQgaW4gbmJ0cmVlLgoKQWRkIGEgbmV3 IGFtZ2V0YmF0Y2ggaW5kZXggQU0gaW50ZXJmYWNlIHRoYXQgYWxsb3dzIGluZGV4IGFjY2VzcyBt ZXRob2RzCnRvIGltcGxlbWVudCBwbGFpbiBpbmRleCBzY2FucyBhbmQgaW5kZXgtb25seSBzY2Fu cyB0aGF0IHJldHVybiBpbmRleAplbnRyaWVzIGluIGJhdGNoZXMgY29tcHJpc2luZyBhbGwgbWF0 Y2hpbmcgaXRlbXMgZnJvbSBhbiBpbmRleCBwYWdlLApyYXRoZXIgdGhhbiBvbmUgbWF0Y2ggYXQg YSB0aW1lLiAgQWxzbyBzd2l0Y2ggbmJ0cmVlIG92ZXIgZnJvbQphbWdldHR1cGxlIHRvIHRoZSBu ZXcgYW1nZXRiYXRjaCBpbnRlcmZhY2UuCgpUaGUgbmV3IGludGVyZmFjZSBhbGxvd3MgdGhlIHRh YmxlIEFNIHRvIGFwcGx5IGtub3dsZWRnZSBvZiB3aGljaCBUSURzCndpbGwgYmUgcmV0dXJuZWQg dG8gdGhlIHNjYW4gaW4gdGhlIG5lYXIgZnV0dXJlIHRvIHBlcmZvcm0gb3B0aW1pemF0aW9ucwps aWtlIEkvTyBwcmVmZXRjaGluZy4gIFByZWZldGNoaW5nIGlzIHNldCB0byBiZSBhZGRlZCBieSBh biB1cGNvbWluZyBjb21taXQuCgpXaXRoIGFtZ2V0YmF0Y2gsIGEgc2Nhbi1sZXZlbCBwb2xpY3kg ZGV0ZXJtaW5lcyB3aGV0aGVyIGVhY2ggYmF0Y2gncwppbmRleCBwYWdlIGJ1ZmZlciBwaW4gaXMg ZHJvcHBlZCBlYWdlcmx5IGJ5IHRoZSBpbmRleCBBTSAoZm9yIHBsYWluCnNjYW5zIHdpdGggYW4g TVZDQyBzbmFwc2hvdCwgd2hlcmUgdGhlIHNuYXBzaG90IGl0c2VsZiBwcmV2ZW50cyBUSUQKcmVj eWNsaW5nIHByb2JsZW1zKSBvciByZXRhaW5lZCBhcyBhbiBpbnRlcmxvY2sgYWdhaW5zdCBjb25j dXJyZW50IFRJRApyZWN5Y2xpbmcgYnkgVkFDVVVNLiAgVGhlIGludGVybG9jayBpcyByZXRhaW5l ZCBmb3IgcGxhaW4gbm9uLU1WQ0Mgc2NhbnMKYW5kIGZvciBpbmRleC1vbmx5IHNjYW5zLCBhbmQg aXMgZHJvcHBlZCBieSB0aGUgdGFibGUgQU0gdmlhIHRoZSBuZXcKYW11bmd1YXJkYmF0Y2ggY2Fs bGJhY2sgd2hlbiBpdCBpcyBzYWZlIHRvIGRvIHNvLiAoQWN0dWFsbHksIGluZGV4IEFNcwphcmUg dXN1YWxseSBhYmxlIHRvIGRyb3AgdGhlIHBpbiBhdCB0aGUgc2FtZSB0aW1lIHRoYXQgdGhleSBy ZWxlYXNlIHRoZQpsb2NrLiAgSW4gcHJhY3RpY2UsIHRoZSBhbXVuZ3VhcmRiYXRjaCBjYWxsYmFj ayBpcyBvbmx5IHJlYWxseSBuZWVkZWQKZHVyaW5nIGluZGV4LW9ubHkgc2NhbnMsIHdoZXJlIGRy b3BwaW5nIHRoZSBwaW4gaW50ZXJsb2NrIG1pZ2h0IG5lZWQgdG8KYmUgZGVsYXllZCBldmVyIHNv IHNsaWdodGx5LCBhcyBleHBsYWluZWQgYmVsb3cuKQoKVGhpcyBleHRlbmRzIHRoZSBkcm9wUGlu IG1lY2hhbmlzbSBhZGRlZCB0byBuYnRyZWUgYnkgY29tbWl0IDJlZDViODdmLAphbmQgZ2VuZXJh bGl6ZXMgaXQgdG8gd29yayB3aXRoIGFsbCBpbmRleCBBTXMgdGhhdCBzdXBwb3J0IHRoZSBuZXcK YW1nZXRiYXRjaCBpbnRlcmZhY2UgKExQX0RFQUQgbWFya2luZyBvZiBpbmRleCBlbnRyaWVzIG11 c3QgYmUgcGVyZm9ybWVkCmJ5IGltcGxlbWVudGluZyB0aGUgbmV3IGFta2lsbGl0ZW1zYmF0Y2gg Y2FsbGJhY2ssIHdoaWNoIGhhcyBhCmRvY3VtZW50ZWQgY29udHJhY3QgZGVzY3JpYmluZyBob3cg aW5kZXggQU1zIG11c3QgcmVhc29uIGFib3V0CmNvbmN1cnJlbnQgVElEIHJlY3ljbGluZykuICBT Y2FucyBjYW4gYWx3YXlzIHNhZmVseSBkcm9wIGluZGV4IHBhZ2UgcGlucwplYWdlcmx5LCBwcm92 aWRlZCB0aGUgc2NhbiB1c2VzIGFuIE1WQ0Mgc25hcHNob3QgKHVubGlrZSB0aGUgbmJ0cmVlCmRy b3BQaW4gb3B0aW1pemF0aW9uLCB3aGljaCBoYWQgbm8gd2F5IG9mIGRvaW5nIHRoaXMgc2FmZWx5 IGR1cmluZwppbmRleC1vbmx5IHNjYW5zIGR1ZSB0byBob3cgYW1nZXR0dXBsZSB3b3JrcywgYW5k IG9ubHkgZ2FpbmVkIHN1cHBvcnQKZm9yIHNjYW5zIG9mIHVubG9nZ2VkIHJlbGF0aW9ucyBpbiBy ZWNlbnQgY29tbWl0IDhhODc5MTE5KS4KClRoZSBvbGQgYW1tYXJrcG9zIGFuZCBhbXJlc3RycG9z IGluZGV4IEFNIGNhbGxiYWNrcyBhcmUgcmVtb3ZlZC4gIFdpdGgKYW1nZXRiYXRjaCwgbWFyay9y ZXN0b3JlIG9mIHNjYW4gcG9zaXRpb25zIGlzIG1hbmFnZWQgYnkgdGhlIHRhYmxlIEFNLAp3aXRo IGhlbHAgZnJvbSBpbmRleGJhdGNoLmMgdXRpbGl0eSBmdW5jdGlvbnMsIHJhdGhlciB0aGFuIGJl aW5nCmRlbGVnYXRlZCB0byB0aGUgaW5kZXggQU0uICBBbGwgYW1nZXRiYXRjaC1jYXBhYmxlIGlu ZGV4IEFNcyBpbmhlcmVudGx5CnN1cHBvcnQgbWFyay9yZXN0b3JlIHdpdGhvdXQgbmVlZGluZyB0 byBpbXBsZW1lbnQgaXQgdGhlbXNlbHZlcy4gIFRhYmxlCkFNcyBtdXN0IHByb3ZpZGUgdGhlIG5l dyBpbmRleF9mZXRjaF9tYXJrcG9zIGFuZCBpbmRleF9mZXRjaF9yZXN0cnBvcwpjYWxsYmFja3Mg dG8gbWFrZSBhbGwgdGhpcyB3b3JrLgoKQW4gdXBjb21pbmcgY29tbWl0IHRoYXQgd2lsbCBhZGQg aW5kZXggcHJlZmV0Y2hpbmcgd2lsbCB1c2UgYSByZWFkCnN0cmVhbSB0byByZWFkIGhlYXAgcGFn ZXMgZHVyaW5nIGluZGV4IHNjYW5zLiAgUmVhZCBzdHJlYW0gaXMgY2FyZWZ1bCB0bwpsaW1pdCBo b3cgbWFueSB0aGluZ3MgaXQgcGlucywgbGVzdCB3ZSBydW4gaW50byBwcm9ibGVtcyBkdWUgdG8g aGF2aW5nCnRvbyBtYW55IGJ1ZmZlcnMgcGlubmVkLiAgU2ltcGx5IG5ldmVyIGhvbGRpbmcgb24g dG8gaW5kZXggcGFnZSBidWZmZXIKcGlucyBncmVhdGx5IHNpbXBsaWZpZXMgcmVzb3VyY2UgbWFu YWdlbWVudCBmb3IgaW5kZXggcHJlZmV0Y2hpbmc7CnRoZXJlJ3Mgbm8gcmlzayBvZiB1bmludGVu ZGVkIGludGVyYWN0aW9ucyBiZXR3ZWVuIHRoZSByZWFkIHN0cmVhbSBhbmQKaW5kZXggQU0uICBU aGUgb25seSBkb3duc2lkZSBpcyB0aGF0IHdlIGNhbm5vdCBzdXBwb3J0IHByZWZldGNoaW5nCmR1 cmluZyBzY2FucyB0aGF0IHVzZSBhIG5vbi1NVkNDIHNuYXBzaG90LCB3aGljaCBzZWVtcyBxdWl0 ZSBhY2NlcHRhYmxlLgoKSW4gcHJhY3RpY2UsIGhlYXBhbSBkb2Vzbid0IGRyb3AgZWFjaCBiYXRj aCdzIGluZGV4IHBhZ2UgYnVmZmVyIHBpbiBhdAp0aGUgZWFybGllc3Qgb3Bwb3J0dW5pdHkgZHVy aW5nIGluZGV4LW9ubHkgc2NhbnMuICBUaGlzIHdhcyBkZWVtZWQKbmVjZXNzYXJ5IHRvIGF2b2lk IHJlZ3Jlc3NpbmcgaW5kZXgtb25seSBzY2FucyB3aXRoIGEgTElNSVQsIGluCnBhcnRpY3VsYXIg d2l0aCBuZXN0bG9vcCBhbnRpLWpvaW5zIGFuZCBuZXN0bG9vcCBzZW1pLWpvaW5zOyBlYWdlcmx5 CmxvYWRpbmcgYWxsIHRoZSB2aXNpYmlsaXR5IGluZm9ybWF0aW9uIHVwIGZyb250IHJlZ3Jlc3Nl ZCBzdWNoIHF1ZXJpZXMuClRoZSBuZXcgYW1nZXRiYXRjaCBpbnRlcmZhY2UgZ2l2ZXMgdGFibGUg QU1zIHRoZSBhdXRob3JpdHkgdG8gZGVjaWRlCndoZW4gdG8gZHJvcCBpbmRleCBwYWdlIHBpbnMv dW5ndWFyZCBiYXRjaGVzLCBzbyB0aGlzIGNhbiBiZSBjb25zaWRlcmVkCmEgaGVhcGFtIGltcGxl bWVudGF0aW9uIGRldGFpbCAoaW5kZXggQU1zIGRvbid0IG5lZWQgdG8ga25vdyBhYm91dCBpdCku ClRoaXMgc2NoZW1lIHN0aWxsIGFsbG93cyBpbmRleCBwcmVmZXRjaGluZyB0byBjb25zaXN0ZW50 bHkgaG9sZCBubyBtb3JlCnRoYW4gb25lIGJhdGNoIGluZGV4IHBhZ2UgcGluIGF0IGEgdGltZSwg ZXZlbiB3aGVuIGFuIGluZGV4LW9ubHkgc2NhbgoodGhhdCBtdXN0IHBlcmZvcm0gc29tZSBoZWFw IGZldGNoZXMpIGhvbGRzIG9wZW4gc2V2ZXJhbCBpbmRleCBiYXRjaGVzCmF0IG9uY2UgaW4gb3Jk ZXIgdG8gbWFpbnRhaW4gYW4gYWRlcXVhdGUgcHJlZmV0Y2ggZGlzdGFuY2UuCgpJbmRleCBhY2Nl c3MgbWV0aG9kcyB0aGF0IHN1cHBvcnQgcGxhaW4gaW5kZXggc2NhbnMgbXVzdCBub3cgaW1wbGVt ZW50CmVpdGhlciB0aGUgYW1nZXRiYXRjaCBpbnRlcmZhY2Ugb3IgdGhlIGFtZ2V0dHVwbGUgaW50 ZXJmYWNlIChub3QgYm90aCkuCkFuIHVwY29taW5nIHBhdGNoIHdpbGwgYWRkIHN1cHBvcnQgZm9y IGFtZ2V0YmF0Y2ggdG8gdGhlIGhhc2ggaW5kZXggQU0uCkJ1dCB0aGUgYW1nZXR0dXBsZSBpbnRl cmZhY2Ugd2lsbCBzdGlsbCBiZSB1c2VkIGJ5IHRoZSBHaVNUIGFuZCBTUC1HaVNUCmluZGV4IEFN cyBmb3Igbm93LiAgQm90aCBzaGFyZSBhIHNldCBvZiBwcm9ibGVtcyB0aGF0IG1ha2UgaXQgdW5j bGVhcgpob3cgdG8gZ28gYWJvdXQgYWRkaW5nIHN1cHBvcnQuCgpCb3RoIEFNcyByZWNvbnN0cnVj dCBpbmRleCBkYXRhIGFzIEhlYXBUdXBsZXMgdmlhIGhlYXBfZm9ybV90dXBsZSBkdXJpbmcKaW5k ZXgtb25seSBzY2FucywgcGVyZm9ybWluZyByZXRhaWwgcGFsbG9jIGFsbG9jYXRpb25zIHRoYXQg YXJlCmluY29tcGF0aWJsZSB3aXRoIHRoZSBmbGF0LCBmaXhlZC1zaXplLCByZWN5Y2xhYmxlIHBl ci1iYXRjaCBtZW1vcnkKbW9kZWwgdGhhdCBhbWdldGJhdGNoJ3MgY3VyclR1cGxlcyB3b3Jrc3Bh Y2UgcmVxdWlyZXMuICBNb3Jlb3ZlciwgYm90aApBTXMgaGF2ZSBrbm93biBidWdzIGludm9sdmlu ZyBidWZmZXIgcGluIG1hbmFnZW1lbnQgZHVyaW5nIGluZGV4LW9ubHkKc2NhbnM6IHRoZXkgcmVs ZWFzZSBpbmRleCBsZWFmIHBhZ2UgcGlucyBpbW1lZGlhdGVseSwgcmF0aGVyIHRoYW4KaG9sZGlu ZyB0aGVtIGFzIGFuIGludGVybG9jayBhZ2FpbnN0IGNvbmN1cnJlbnQgVElEIHJlY3ljbGluZyBi eSBWQUNVVU0sCmNyZWF0aW5nIGEgcmFjZSBjb25kaXRpb24gaW4gd2hpY2ggVkFDVVVNIGNhbiBy ZW1vdmUgYSBoZWFwIHR1cGxlIGFuZAp0aGVuIG1hcmsgaXRzIHBhZ2UgYWxsLXZpc2libGUgd2hp bGUgdGhlIGluZGV4LW9ubHkgc2NhbiBzdGlsbCBob2xkcyBhCnJlZmVyZW5jZSB0byB0aGUgbm93 LXJlY3ljbGVkIFRJRCBbMV0uICBUaGVzZSBpbmRleCBBTXMgY2Fubm90IGFkb3B0CmFtZ2V0YmF0 Y2ggd2l0aG91dCBmaXJzdCBmaXhpbmcgdGhlIHBpbi1oYW5kbGluZyBkZWZpY2llbmN5IHRoYXQg dGhleQphbHJlYWR5IGhhdmUgdW5kZXIgYW1nZXR0dXBsZSAoaXQncyBub3QgY2xlYXIgaG93IHRv IGZpeCB0aGUgcHJvYmxlbQp3aXRoaW4gdGhlIGNvbmZpbmVzIG9mIHRoZSBjdXJyZW50IGFtZ2V0 dHVwbGUgZGVzaWduLCBsZXQgYWxvbmUgaW4gYSB3YXkKdGhhdCdzIGNvbXBhdGlibGUgd2l0aCBh bWdldGJhdGNoKS4KClsxXSBodHRwczovL3Bvc3Rnci5lcy9tL0NBSDItV3olM0RqamlOTDlGQ2g4 QzFMLUdVSDE1ZjRXRlRXdWIyeCUyQl9OdWNuZ2NERGNIS3clNDBtYWlsLmdtYWlsLmNvbQoKQXV0 aG9yOiBUb21hcyBWb25kcmEgPHRvbWFzQHZvbmRyYS5tZT4KQXV0aG9yOiBQZXRlciBHZW9naGVn YW4gPHBnQGJvd3QuaWU+ClJldmlld2VkLUJ5OiBBbmRyZXMgRnJldW5kIDxhbmRyZXNAYW5hcmF6 ZWwuZGU+ClJldmlld2VkLUJ5OiBUaG9tYXMgTXVucm8gPHRob21hcy5tdW5yb0BnbWFpbC5jb20+ CkRpc2N1c3Npb246IGh0dHBzOi8vcG9zdGdyLmVzL20vY2Y4NWY0NmYtYjAyZi0wNWIyLTUyNDgt NTAwMGI4OTRlYmFiQGVudGVycHJpc2VkYi5jb20KRGlzY3Vzc2lvbjogaHR0cHM6Ly9wb3N0Z3Iu ZXMvbS9lZmFjMzIzOC02ZjM0LTQxZWEtYTM5My0yNmNjMDQ0MWI1MDYlNDB2b25kcmEubWUKLS0t CiBzcmMvaW5jbHVkZS9hY2Nlc3MvYW1hcGkuaCAgICAgICAgICAgICAgICAgICAgfCAgMjcgKy0K IHNyYy9pbmNsdWRlL2FjY2Vzcy9nZW5hbS5oICAgICAgICAgICAgICAgICAgICB8ICAgMSArCiBz cmMvaW5jbHVkZS9hY2Nlc3MvaGVhcGFtLmggICAgICAgICAgICAgICAgICAgfCAgIDYgKwogc3Jj L2luY2x1ZGUvYWNjZXNzL2luZGV4YmF0Y2guaCAgICAgICAgICAgICAgIHwgMjA0ICsrKysrCiBz cmMvaW5jbHVkZS9hY2Nlc3MvbmJ0cmVlLmggICAgICAgICAgICAgICAgICAgfCAxOTAgKystLS0K IHNyYy9pbmNsdWRlL2FjY2Vzcy9yZWxzY2FuLmggICAgICAgICAgICAgICAgICB8IDM0NSArKysr KysrKy0KIHNyYy9pbmNsdWRlL2FjY2Vzcy90YWJsZWFtLmggICAgICAgICAgICAgICAgICB8ICA3 NyArLQogc3JjL2luY2x1ZGUvbm9kZXMvcGF0aG5vZGVzLmggICAgICAgICAgICAgICAgIHwgICA2 ICstCiBzcmMvYmFja2VuZC9hY2Nlc3MvYnJpbi9icmluLmMgICAgICAgICAgICAgICAgfCAgIDYg Ky0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9naW4vZ2luZ2V0LmMgICAgICAgICAgICAgICB8ICAgNiAr LQogc3JjL2JhY2tlbmQvYWNjZXNzL2dpbi9naW51dGlsLmMgICAgICAgICAgICAgIHwgICA2ICst CiBzcmMvYmFja2VuZC9hY2Nlc3MvZ2lzdC9naXN0LmMgICAgICAgICAgICAgICAgfCAgIDYgKy0K IHNyYy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2guYyAgICAgICAgICAgICAgICB8ICAgNiArLQog c3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtX2hhbmRsZXIuYyAgICAgIHwgICAzICsKIHNy Yy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9pbmRleHNjYW4uYyAgICB8IDU0MiArKysrKysr KysrKystCiBzcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvTWFrZWZpbGUgICAgICAgICAgICAgfCAg IDMgKy0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9hbWFwaS5jICAgICAgICAgICAgICB8ICAg NSArCiBzcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvZ2VuYW0uYyAgICAgICAgICAgICAgfCAgIDUg Kwogc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L2luZGV4YW0uYyAgICAgICAgICAgIHwgIDU0ICst CiBzcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvaW5kZXhiYXRjaC5jICAgICAgICAgfCA3MjYgKysr KysrKysrKysrKysrKysrCiBzcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvbWVzb24uYnVpbGQgICAg ICAgICAgfCAgIDEgKwogc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9SRUFETUUgICAgICAgICAg ICAgIHwgIDc0ICstCiBzcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHBhZ2UuYyAgICAgICAg ICAgfCAgMTMgKy0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0cmVhZHBhZ2UuYyAgICAg ICB8IDIwNyArKystLQogc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRyZWUuYyAgICAgICAg ICAgIHwgNDY5ICsrKysrLS0tLS0tCiBzcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHNlYXJj aC5jICAgICAgICAgfCA1NjcgKysrKysrLS0tLS0tLS0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9uYnRy ZWUvbmJ0dXRpbHMuYyAgICAgICAgICB8IDI0NSAtLS0tLS0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9u YnRyZWUvbmJ0eGxvZy5jICAgICAgICAgICB8ICAgNiArLQogc3JjL2JhY2tlbmQvYWNjZXNzL3Nw Z2lzdC9zcGd1dGlscy5jICAgICAgICAgIHwgICA2ICstCiBzcmMvYmFja2VuZC9hY2Nlc3MvdGFi bGUvdGFibGVhbWFwaS5jICAgICAgICAgfCAgIDMgKwogc3JjL2JhY2tlbmQvY29tbWFuZHMvaW5k ZXhjbWRzLmMgICAgICAgICAgICAgIHwgICAyICstCiBzcmMvYmFja2VuZC9leGVjdXRvci9leGVj QW1pLmMgICAgICAgICAgICAgICAgfCAgIDIgKy0KIHNyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVN ZXJnZWpvaW4uYyAgICAgICAgICB8ICAgNCArLQogc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgv aW5keHBhdGguYyAgICAgICAgIHwgICA2ICstCiBzcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9w bGFuY2F0LmMgICAgICAgICAgfCAgIDggKy0KIHNyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2lj YWwvcmVsYXRpb24uYyAgICB8ICAgOSArLQogc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2FtdXRpbHMu YyAgICAgICAgICAgICAgIHwgICA4ICstCiBjb250cmliL2Jsb29tL2JsdXRpbHMuYyAgICAgICAg ICAgICAgICAgICAgICAgfCAgIDYgKy0KIGRvYy9zcmMvc2dtbC9pbmRleGFtLnNnbWwgICAgICAg ICAgICAgICAgICAgICB8IDU3MSArKysrKysrKysrKystLQogZG9jL3NyYy9zZ21sL3JlZi9jcmVh dGVfdGFibGUuc2dtbCAgICAgICAgICAgIHwgIDEzICstCiAuLi4vbW9kdWxlcy9kdW1teV9pbmRl eF9hbS9kdW1teV9pbmRleF9hbS5jICAgfCAgIDYgKy0KIHNyYy90b29scy9wZ2luZGVudC90eXBl ZGVmcy5saXN0ICAgICAgICAgICAgICB8ICAxMiArLQogNDIgZmlsZXMgY2hhbmdlZCwgMzE2NCBp bnNlcnRpb25zKCspLCAxMjk4IGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9p bmNsdWRlL2FjY2Vzcy9pbmRleGJhdGNoLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvYmFja2Vu ZC9hY2Nlc3MvaW5kZXgvaW5kZXhiYXRjaC5jCgpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvYWNj ZXNzL2FtYXBpLmggYi9zcmMvaW5jbHVkZS9hY2Nlc3MvYW1hcGkuaAppbmRleCBlY2ZiZDAxN2Qu LmZkZmQ4ZDYwMCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvYWNjZXNzL2FtYXBpLmgKKysrIGIv c3JjL2luY2x1ZGUvYWNjZXNzL2FtYXBpLmgKQEAgLTE5OCw2ICsxOTgsMTkgQEAgdHlwZWRlZiB2 b2lkICgqYW1yZXNjYW5fZnVuY3Rpb24pIChJbmRleFNjYW5EZXNjIHNjYW4sCiB0eXBlZGVmIGJv b2wgKCphbWdldHR1cGxlX2Z1bmN0aW9uKSAoSW5kZXhTY2FuRGVzYyBzY2FuLAogCQkJCQkJCQkJ IFNjYW5EaXJlY3Rpb24gZGlyZWN0aW9uKTsKIAorLyogbmV4dCBiYXRjaCBvZiB2YWxpZCB0dXBs ZXMgKi8KK3R5cGVkZWYgSW5kZXhTY2FuQmF0Y2ggKCphbWdldGJhdGNoX2Z1bmN0aW9uKSAoSW5k ZXhTY2FuRGVzYyBzY2FuLAorCQkJCQkJCQkJCQkgICBJbmRleFNjYW5CYXRjaCBwcmlvcmJhdGNo LAorCQkJCQkJCQkJCQkgICBTY2FuRGlyZWN0aW9uIGRpcmVjdGlvbik7CisKKy8qIGRyb3AgVElE IHJlY3ljbGluZyBpbnRlcmxvY2sgaGVsZCB0byBwcmV2ZW50IGNvbmN1cnJlbnQgVkFDVVVNIHJl Y3ljbGluZyAqLwordHlwZWRlZiB2b2lkICgqYW11bmd1YXJkYmF0Y2hfZnVuY3Rpb24pIChJbmRl eFNjYW5EZXNjIHNjYW4sCisJCQkJCQkJCQkJIEluZGV4U2NhbkJhdGNoIGJhdGNoKTsKKworLyog bWFyayBkZWFkIGl0ZW1zIGluIGluZGV4IHBhZ2UgKi8KK3R5cGVkZWYgdm9pZCAoKmFta2lsbGl0 ZW1zYmF0Y2hfZnVuY3Rpb24pIChJbmRleFNjYW5EZXNjIHNjYW4sCisJCQkJCQkJCQkJICAgSW5k ZXhTY2FuQmF0Y2ggYmF0Y2gpOworCiAvKiBmZXRjaCBhbGwgdmFsaWQgdHVwbGVzICovCiB0eXBl ZGVmIGludDY0ICgqYW1nZXRiaXRtYXBfZnVuY3Rpb24pIChJbmRleFNjYW5EZXNjIHNjYW4sCiAJ CQkJCQkJCQkgICBUSURCaXRtYXAgKnRibSk7CkBAIC0yMDUsMTEgKzIxOCw5IEBAIHR5cGVkZWYg aW50NjQgKCphbWdldGJpdG1hcF9mdW5jdGlvbikgKEluZGV4U2NhbkRlc2Mgc2NhbiwKIC8qIGVu ZCBpbmRleCBzY2FuICovCiB0eXBlZGVmIHZvaWQgKCphbWVuZHNjYW5fZnVuY3Rpb24pIChJbmRl eFNjYW5EZXNjIHNjYW4pOwogCi0vKiBtYXJrIGN1cnJlbnQgc2NhbiBwb3NpdGlvbiAqLwotdHlw ZWRlZiB2b2lkICgqYW1tYXJrcG9zX2Z1bmN0aW9uKSAoSW5kZXhTY2FuRGVzYyBzY2FuKTsKLQot LyogcmVzdG9yZSBtYXJrZWQgc2NhbiBwb3NpdGlvbiAqLwotdHlwZWRlZiB2b2lkICgqYW1yZXN0 cnBvc19mdW5jdGlvbikgKEluZGV4U2NhbkRlc2Mgc2Nhbik7CisvKiBpbnZhbGlkYXRlIGluZGV4 IEFNIHN0YXRlIHRoYXQgaW5kZXBlbmRlbnRseSB0cmFja3Mgc2NhbidzIHBvc2l0aW9uICovCit0 eXBlZGVmIHZvaWQgKCphbXBvc3Jlc2V0X2Z1bmN0aW9uKSAoSW5kZXhTY2FuRGVzYyBzY2FuLAor CQkJCQkJCQkJIEluZGV4U2NhbkJhdGNoIGJhdGNoKTsKIAogLyoKICAqIENhbGxiYWNrIGZ1bmN0 aW9uIHNpZ25hdHVyZXMgLSBmb3IgcGFyYWxsZWwgaW5kZXggc2NhbnMuCkBAIC0zMDksMTAgKzMy MCwxMiBAQCB0eXBlZGVmIHN0cnVjdCBJbmRleEFtUm91dGluZQogCWFtYmVnaW5zY2FuX2Z1bmN0 aW9uIGFtYmVnaW5zY2FuOwogCWFtcmVzY2FuX2Z1bmN0aW9uIGFtcmVzY2FuOwogCWFtZ2V0dHVw bGVfZnVuY3Rpb24gYW1nZXR0dXBsZTsgLyogY2FuIGJlIE5VTEwgKi8KKwlhbWdldGJhdGNoX2Z1 bmN0aW9uIGFtZ2V0YmF0Y2g7IC8qIGNhbiBiZSBOVUxMICovCisJYW11bmd1YXJkYmF0Y2hfZnVu Y3Rpb24gYW11bmd1YXJkYmF0Y2g7IC8qIGNhbiBiZSBOVUxMICovCisJYW1raWxsaXRlbXNiYXRj aF9mdW5jdGlvbiBhbWtpbGxpdGVtc2JhdGNoOyAvKiBjYW4gYmUgTlVMTCAqLwogCWFtZ2V0Yml0 bWFwX2Z1bmN0aW9uIGFtZ2V0Yml0bWFwOwkvKiBjYW4gYmUgTlVMTCAqLwogCWFtZW5kc2Nhbl9m dW5jdGlvbiBhbWVuZHNjYW47Ci0JYW1tYXJrcG9zX2Z1bmN0aW9uIGFtbWFya3BvczsJLyogY2Fu IGJlIE5VTEwgKi8KLQlhbXJlc3RycG9zX2Z1bmN0aW9uIGFtcmVzdHJwb3M7IC8qIGNhbiBiZSBO VUxMICovCisJYW1wb3NyZXNldF9mdW5jdGlvbiBhbXBvc3Jlc2V0OyAvKiBjYW4gYmUgTlVMTCAq LwogCiAJLyogaW50ZXJmYWNlIGZ1bmN0aW9ucyB0byBzdXBwb3J0IHBhcmFsbGVsIGluZGV4IHNj YW5zICovCiAJYW1lc3RpbWF0ZXBhcmFsbGVsc2Nhbl9mdW5jdGlvbiBhbWVzdGltYXRlcGFyYWxs ZWxzY2FuOyAvKiBjYW4gYmUgTlVMTCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvYWNjZXNz L2dlbmFtLmggYi9zcmMvaW5jbHVkZS9hY2Nlc3MvZ2VuYW0uaAppbmRleCBkYjYyZTBjYTEuLmFl NTg3ZjhkZSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvYWNjZXNzL2dlbmFtLmgKKysrIGIvc3Jj L2luY2x1ZGUvYWNjZXNzL2dlbmFtLmgKQEAgLTk2LDYgKzk2LDcgQEAgdHlwZWRlZiBib29sICgq SW5kZXhCdWxrRGVsZXRlQ2FsbGJhY2spIChJdGVtUG9pbnRlciBpdGVtcHRyLCB2b2lkICpzdGF0 ZSk7CiAKIC8qIHN0cnVjdCBkZWZpbml0aW9ucyBhcHBlYXIgaW4gcmVsc2Nhbi5oICovCiB0eXBl ZGVmIHN0cnVjdCBJbmRleFNjYW5EZXNjRGF0YSAqSW5kZXhTY2FuRGVzYzsKK3R5cGVkZWYgc3Ry dWN0IEluZGV4U2NhbkJhdGNoRGF0YSAqSW5kZXhTY2FuQmF0Y2g7CiB0eXBlZGVmIHN0cnVjdCBT eXNTY2FuRGVzY0RhdGEgKlN5c1NjYW5EZXNjOwogCiB0eXBlZGVmIHN0cnVjdCBQYXJhbGxlbElu ZGV4U2NhbkRlc2NEYXRhICpQYXJhbGxlbEluZGV4U2NhbkRlc2M7CmRpZmYgLS1naXQgYS9zcmMv aW5jbHVkZS9hY2Nlc3MvaGVhcGFtLmggYi9zcmMvaW5jbHVkZS9hY2Nlc3MvaGVhcGFtLmgKaW5k ZXggM2NhNDJlYjkzLi43OTk3NmY1MGYgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9o ZWFwYW0uaAorKysgYi9zcmMvaW5jbHVkZS9hY2Nlc3MvaGVhcGFtLmgKQEAgLTEzMCw2ICsxMzAs NyBAQCB0eXBlZGVmIHN0cnVjdCBJbmRleEZldGNoSGVhcERhdGEKIAogCS8qIEZvciB2aXNpYmls aXR5IG1hcCBjaGVja3MgKGluZGV4LW9ubHkgc2NhbnMgYW5kIG9uLWFjY2VzcyBwcnVuaW5nKSAq LwogCUJ1ZmZlcgkJeHNfdm1idWZmZXI7CS8qIHZpc2liaWxpdHkgbWFwIGJ1ZmZlciAqLworCWlu dAkJCXhzX3ZtX2l0ZW1zOwkvKiAjIGl0ZW1zIHRvIHJlc29sdmUgdmlzaWJpbGl0eSBpbmZvIGZv ciAqLwogfSBJbmRleEZldGNoSGVhcERhdGE7CiAKIC8qIFJlc3VsdCBjb2RlcyBmb3IgSGVhcFR1 cGxlU2F0aXNmaWVzVmFjdXVtICovCkBAIC00MzQsOCArNDM1LDEzIEBAIGV4dGVybiBib29sIGhl YXBhbV9mZXRjaF90aWQoUmVsYXRpb24gcmVsLCBJdGVtUG9pbnRlciB0aWQsIFNuYXBzaG90IHNu YXBzaG90LAogCQkJCQkJCSBUdXBsZVRhYmxlU2xvdCAqc2xvdCwgYm9vbCAqYWxsX2RlYWQpOwog ZXh0ZXJuIEluZGV4RmV0Y2hUYWJsZURhdGEgKmhlYXBhbV9pbmRleF9mZXRjaF9iZWdpbihJbmRl eFNjYW5EZXNjIHNjYW4sCiAJCQkJCQkJCQkJCQkJIHVpbnQzMiBmbGFncyk7CitleHRlcm4gdm9p ZCBoZWFwYW1faW5kZXhfZmV0Y2hfYmF0Y2hfaW5pdChJbmRleFNjYW5EZXNjIHNjYW4sCisJCQkJ CQkJCQkJICBJbmRleFNjYW5CYXRjaCBiYXRjaCwKKwkJCQkJCQkJCQkgIGJvb2wgbmV3X2FsbG9j KTsKIGV4dGVybiB2b2lkIGhlYXBhbV9pbmRleF9mZXRjaF9yZXNldChJbmRleFNjYW5EZXNjIHNj YW4pOwogZXh0ZXJuIHZvaWQgaGVhcGFtX2luZGV4X2ZldGNoX2VuZChJbmRleFNjYW5EZXNjIHNj YW4pOworZXh0ZXJuIHZvaWQgaGVhcGFtX2luZGV4X2ZldGNoX21hcmtwb3MoSW5kZXhTY2FuRGVz YyBzY2FuKTsKK2V4dGVybiB2b2lkIGhlYXBhbV9pbmRleF9mZXRjaF9yZXN0cnBvcyhJbmRleFNj YW5EZXNjIHNjYW4pOwogZXh0ZXJuIGJvb2wgaGVhcF9ob3Rfc2VhcmNoX2J1ZmZlcihJdGVtUG9p bnRlciB0aWQsIFJlbGF0aW9uIHJlbGF0aW9uLAogCQkJCQkJCQkgICBCdWZmZXIgYnVmZmVyLCBT bmFwc2hvdCBzbmFwc2hvdCwgSGVhcFR1cGxlIGhlYXBUdXBsZSwKIAkJCQkJCQkJICAgYm9vbCAq YWxsX2RlYWQsIGJvb2wgZmlyc3RfY2FsbCk7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9hY2Nl c3MvaW5kZXhiYXRjaC5oIGIvc3JjL2luY2x1ZGUvYWNjZXNzL2luZGV4YmF0Y2guaApuZXcgZmls ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAuLjlmODdmYjk2YQotLS0gL2Rldi9udWxsCisr KyBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9pbmRleGJhdGNoLmgKQEAgLTAsMCArMSwyMDQgQEAKKy8q LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIGluZGV4YmF0Y2guaAorICoJICBCYXRjaC1iYXNlZCBp bmRleCBzY2FuIGluZnJhc3RydWN0dXJlIGZvciB0aGUgYW1nZXRiYXRjaCBpbnRlcmZhY2UuCisg KgorICogUHJvdmlkZXMgZnVuY3Rpb25zIHVzZWQgYnkgdGFibGUgQU1zIHRvIG1hbmFnZSBhbiBp bmRleCBzY2FuJ3MgcG9zaXRpb25hbAorICogc3RhdGUgKHN0b3JlZCBpbiBJbmRleFNjYW5EZXNj LmJhdGNocmluZ2J1ZiksIGFuZCB0byBtYW5hZ2UgdW5kZXJseWluZworICogcmVzb3VyY2VzIHN1 Y2ggYXMgbWVtb3J5IGFuZCBidWZmZXIgcGlucy4gIEFsc28gcHJvdmlkZXMgdmFyaW91cyB1dGls aXR5CisgKiBmdW5jdGlvbnMgdXNlZCBieSBpbmRleCBBTXMgZm9yIGJhdGNoIHJlc291cmNlIG1h bmFnZW1lbnQuCisgKgorICogVGhpcyBtb2R1bGUgZG9lcyBub3QgcHJvdmlkZSBlbGVtZW50YXJ5 IG9wZXJhdGlvbnMgZm9yIG1hbmlwdWxhdGluZyB0aGUKKyAqIHNjYW4ncyByaW5nIGJ1ZmZlciAo ZS5nLiwgZm9yIGFwcGVuZGluZyBhIGJhdGNoKS4gIFRob3NlIGFyZSBpbXBsZW1lbnRlZCBhcwor ICogaW5saW5lIGZ1bmN0aW9ucyBkZWZpbmVkIGJlc2lkZSBJbmRleFNjYW5EZXNjIGFuZCBJbmRl eFNjYW5CYXRjaC4KKyAqCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTYtMjAyNiwgUG9z dGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqIFBvcnRpb25zIENvcHlyaWdodCAo YykgMTk5NCwgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhCisgKgorICog c3JjL2luY2x1ZGUvYWNjZXNzL2luZGV4YmF0Y2guaAorICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor ICovCisjaWZuZGVmIElOREVYQkFUQ0hfSAorI2RlZmluZSBJTkRFWEJBVENIX0gKKworI2luY2x1 ZGUgImFjY2Vzcy9hbWFwaS5oIgorI2luY2x1ZGUgImFjY2Vzcy9nZW5hbS5oIgorI2luY2x1ZGUg ImFjY2Vzcy9yZWxzY2FuLmgiCisjaW5jbHVkZSAic3RvcmFnZS9idWYuaCIKKyNpbmNsdWRlICJ1 dGlscy9yZWwuaCIKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogVXRpbGl0aWVzIGNhbGxl ZCBieSB0YWJsZSBBTXMKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworCisvKgorICogU2V0 cyB1cCB0aGUgYmF0Y2ggcmluZyBidWZmZXIgc3RydWN0dXJlIGZvciB1c2UgYnkgYW4gaW5kZXgg c2Nhbi4KKyAqCisgKiBDYWxsZWQgZnJvbSB0YWJsZSBBTSdzIGluZGV4X2ZldGNoX2JlZ2luIGNh bGxiYWNrIGR1cmluZyBhbWdldGJhdGNoIHNjYW5zLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQK K3RhYmxlYW1fdXRpbF9iYXRjaHNjYW5faW5pdChJbmRleFNjYW5EZXNjIHNjYW4pCit7CisJQXNz ZXJ0KHNjYW4tPmluZGV4UmVsYXRpb24tPnJkX2luZGFtLT5hbWdldGJhdGNoICE9IE5VTEwpOwor CisJc2Nhbi0+YmF0Y2hyaW5nYnVmLnNjYW5Qb3MudmFsaWQgPSBmYWxzZTsKKwlzY2FuLT5iYXRj aHJpbmdidWYubWFya1Bvcy52YWxpZCA9IGZhbHNlOworCisJc2Nhbi0+YmF0Y2hyaW5nYnVmLm1h cmtCYXRjaCA9IE5VTEw7CisJc2Nhbi0+YmF0Y2hyaW5nYnVmLmhlYWRCYXRjaCA9IDA7CisJc2Nh bi0+YmF0Y2hyaW5nYnVmLm5leHRCYXRjaCA9IDA7CisKKwlzY2FuLT51c2ViYXRjaHJpbmcgPSB0 cnVlOworfQorCitleHRlcm4gdm9pZCB0YWJsZWFtX3V0aWxfYmF0Y2hzY2FuX3Jlc2V0KEluZGV4 U2NhbkRlc2Mgc2NhbiwgYm9vbCBlbmRzY2FuKTsKK2V4dGVybiB2b2lkIHRhYmxlYW1fdXRpbF9i YXRjaHNjYW5fZW5kKEluZGV4U2NhbkRlc2Mgc2Nhbik7CitleHRlcm4gdm9pZCB0YWJsZWFtX3V0 aWxfYmF0Y2hzY2FuX21hcmtfcG9zKEluZGV4U2NhbkRlc2Mgc2Nhbik7CitleHRlcm4gdm9pZCB0 YWJsZWFtX3V0aWxfYmF0Y2hzY2FuX3Jlc3RvcmVfcG9zKEluZGV4U2NhbkRlc2Mgc2Nhbik7Citl eHRlcm4gdm9pZCB0YWJsZWFtX3V0aWxfc2NhbmJhdGNoX2RpcmNoYW5nZShJbmRleFNjYW5EZXNj IHNjYW4pOworZXh0ZXJuIHZvaWQgdGFibGVhbV91dGlsX3NjYW5wb3Nfa2lsbGl0ZW0oSW5kZXhT Y2FuRGVzYyBzY2FuKTsKK2V4dGVybiB2b2lkIHRhYmxlYW1fdXRpbF9mcmVlX2JhdGNoKEluZGV4 U2NhbkRlc2Mgc2NhbiwgSW5kZXhTY2FuQmF0Y2ggYmF0Y2gpOworZXh0ZXJuIHZvaWQgdGFibGVh bV91dGlsX3VuZ3VhcmRfYmF0Y2goSW5kZXhTY2FuRGVzYyBzY2FuLCBJbmRleFNjYW5CYXRjaCBi YXRjaCk7CisKKy8qCisgKiBGZXRjaCB0aGUgbmV4dCBiYXRjaCBvZiBtYXRjaGluZyBpdGVtcyBm b3IgdGhlIHNjYW4gKG9yIHRoZSBmaXJzdCkuCisgKgorICogQ2FsbGVkIHdoZW4gY2FsbGVyJ3Mg Y3VycmVudCBiYXRjaCAocGFzc2VkIHRvIHVzIGFzIHByaW9yQmF0Y2gpIGhhcyBubyBtb3JlCisg KiBtYXRjaGluZyBpdGVtcyBpbiB0aGUgZ2l2ZW4gc2NhbiBkaXJlY3Rpb24uICBDYWxsZXIgcGFz c2VzIGEgTlVMTAorICogcHJpb3JCYXRjaCBvbiB0aGUgZmlyc3QgY2FsbCBoZXJlIGZvciB0aGUg c2Nhbi4KKyAqCisgKiBSZXR1cm5zIHRoZSBuZXh0IGJhdGNoIHRvIGJlIHByb2Nlc3NlZCBieSBj YWxsZXIgaW4gdGhlIGdpdmVuIHNjYW4KKyAqIGRpcmVjdGlvbiwgb3IgTlVMTCB3aGVuIHRoZXJl IGFyZSBubyBtb3JlIG1hdGNoZXMgaW4gdGhhdCBkaXJlY3Rpb24uCisgKgorICogVGhpcyBpcyB3 aGVyZSBiYXRjaGVzIGFyZSBhcHBlbmRlZCB0byB0aGUgc2NhbidzIHJpbmcgYnVmZmVyLiAgV2Ug ZG9uJ3QKKyAqIGZyZWUgYW55IGJhdGNoZXMgaGVyZSwgdGhvdWdoOyB0aGF0IGlzIGxlZnQgdXAg dG8gdGhlIGNhbGxlci4gIFRoZSBjYWxsZXIKKyAqIGlzIGFsc28gcmVzcG9uc2libGUgZm9yIGFk dmFuY2luZyB0aGVpciBwb3NpdGlvbi4KKyAqLworc3RhdGljIHBnX2F0dHJpYnV0ZV9hbHdheXNf aW5saW5lIEluZGV4U2NhbkJhdGNoCit0YWJsZWFtX3V0aWxfZmV0Y2hfbmV4dF9iYXRjaChJbmRl eFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyZWN0aW9uLAorCQkJCQkJCSAgSW5kZXhT Y2FuQmF0Y2ggcHJpb3JCYXRjaCwgQmF0Y2hSaW5nSXRlbVBvcyAqcG9zKQoreworCUluZGV4U2Nh bkJhdGNoIGJhdGNoID0gTlVMTDsKKwlCYXRjaFJpbmdCdWZmZXIgKmJhdGNocmluZ2J1ZiBQR19V U0VEX0ZPUl9BU1NFUlRTX09OTFkgPSAmc2Nhbi0+YmF0Y2hyaW5nYnVmOworCisJaWYgKCFwcmlv ckJhdGNoKQorCXsKKwkJLyogRmlyc3QgY2FsbCBmb3IgdGhlIHNjYW4gKi8KKwkJQXNzZXJ0KHBv cyA9PSAmYmF0Y2hyaW5nYnVmLT5zY2FuUG9zKTsKKwl9CisJZWxzZSBpZiAodW5saWtlbHkocHJp b3JCYXRjaC0+ZGlyICE9IGRpcmVjdGlvbikpCisJeworCQkvKgorCQkgKiBXZSBkZXRlY3RlZCBh IGNoYW5nZSBpbiBzY2FuIGRpcmVjdGlvbiBhY3Jvc3MgYmF0Y2hlcy4gIFByZXBhcmUKKwkJICog c2NhbidzIGJhdGNocmluZ2J1ZiBzdGF0ZSBmb3IgdXMgdG8gZ2V0IHRoZSBuZXh0IGJhdGNoIGZv ciB0aGUKKwkJICogb3Bwb3NpdGUgc2NhbiBkaXJlY3Rpb24gdG8gdGhlIG9uZSB1c2VkIHdoZW4g cHJpb3JCYXRjaCB3YXMKKwkJICogcmV0dXJuZWQgYnkgYW1nZXRiYXRjaC4KKwkJICovCisJCXRh YmxlYW1fdXRpbF9zY2FuYmF0Y2hfZGlyY2hhbmdlKHNjYW4pOworCisJCS8qIHByaW9yQmF0Y2gg aXMgbm93IGJhdGNocmluZ2J1ZidzIG9ubHkgYmF0Y2ggKi8KKwkJQXNzZXJ0KHBvcy0+YmF0Y2gg PT0gYmF0Y2hyaW5nYnVmLT5oZWFkQmF0Y2gpOworCQlBc3NlcnQoaW5kZXhfc2Nhbl9iYXRjaF9j b3VudChzY2FuKSA9PSAxKTsKKwl9CisJZWxzZSBpZiAoaW5kZXhfc2Nhbl9iYXRjaF9sb2FkZWQo c2NhbiwgcG9zLT5iYXRjaCArIDEpKQorCXsKKwkJLyogTmV4dCBiYXRjaCBhbHJlYWR5IGxvYWRl ZCBmb3IgdXMgKi8KKwkJYmF0Y2ggPSBpbmRleF9zY2FuX2JhdGNoKHNjYW4sIHBvcy0+YmF0Y2gg KyAxKTsKKworCQlBc3NlcnQocHJpb3JCYXRjaC0+ZGlyID09IGRpcmVjdGlvbik7CisJCUFzc2Vy dChiYXRjaC0+ZGlyID09IGRpcmVjdGlvbik7CisJCUFzc2VydChiYXRjaC0+Zmlyc3RJdGVtIDw9 IGJhdGNoLT5sYXN0SXRlbSk7CisJCXJldHVybiBiYXRjaDsKKwl9CisKKwkvKgorCSAqIEFzc2Vy dCBwcmVjb25kaXRpb25zIGZvciBjYWxsaW5nIGFtZ2V0YmF0Y2guCisJICoKKwkgKiBwcmlvckJh dGNoIGhhZCBiZXR0ZXIgYmUgZm9yIHRoZSBsYXN0IHZhbGlkIGJhdGNoIGN1cnJlbnRseSBpbiB0 aGUgcmluZworCSAqIGJ1ZmZlciAoYmF0Y2hlcyBtdXN0IHN0YXkgaW4gc2NhbiBvcmRlcikuICBJ ZiBpdCBpc24ndCB0aGVuIHdlIHNob3VsZAorCSAqIGhhdmUgYWxyZWFkeSByZXR1cm5lZCBzb21l IGV4aXN0aW5nIGxvYWRlZCBiYXRjaCBlYXJsaWVyLgorCSAqLworCUFzc2VydCghaW5kZXhfc2Nh bl9iYXRjaF9mdWxsKHNjYW4pKTsKKwlBc3NlcnQoIXByaW9yQmF0Y2ggfHwKKwkJICAgKGluZGV4 X3NjYW5fYmF0Y2hfY291bnQoc2NhbikgPiAwICYmIHByaW9yQmF0Y2gtPmRpciA9PSBkaXJlY3Rp b24gJiYKKwkJCWluZGV4X3NjYW5fYmF0Y2goc2NhbiwgYmF0Y2hyaW5nYnVmLT5uZXh0QmF0Y2gg LSAxKSA9PSBwcmlvckJhdGNoKSk7CisKKwkvKgorCSAqIEJlZm9yZSB3ZSBjYWxsIGFtZ2V0YmF0 Y2ggYWdhaW4sIGNoZWNrIGlmIHByaW9yQmF0Y2ggaXMgYWxyZWFkeSBrbm93bgorCSAqIHRvIGJl IHRoZSBsYXN0IGJhdGNoIHdpdGggbWF0Y2hpbmcgaXRlbXMgaW4gdGhpcyBzY2FuIGRpcmVjdGlv bgorCSAqLworCWlmIChwcmlvckJhdGNoICYmCisJCShTY2FuRGlyZWN0aW9uSXNGb3J3YXJkKGRp cmVjdGlvbikgPworCQkgcHJpb3JCYXRjaC0+a25vd25FbmRGb3J3YXJkIDoKKwkJIHByaW9yQmF0 Y2gtPmtub3duRW5kQmFja3dhcmQpKQorCQlyZXR1cm4gTlVMTDsKKworCWJhdGNoID0gc2Nhbi0+ aW5kZXhSZWxhdGlvbi0+cmRfaW5kYW0tPmFtZ2V0YmF0Y2goc2NhbiwgcHJpb3JCYXRjaCwKKwkJ CQkJCQkJCQkJCQkgIGRpcmVjdGlvbik7CisJaWYgKGJhdGNoKQorCXsKKwkJLyogV2UgZ290IHRo ZSBiYXRjaCBmcm9tIHRoZSBpbmRleCBBTSAqLworCQlBc3NlcnQoYmF0Y2gtPmRpciA9PSBkaXJl Y3Rpb24pOworCQlBc3NlcnQoYmF0Y2gtPmZpcnN0SXRlbSA8PSBiYXRjaC0+bGFzdEl0ZW0pOwor CisJCS8qIEFwcGVuZCBiYXRjaCB0byB0aGUgZW5kIG9mIHJpbmcgYnVmZmVyL3dyaXRlIGl0IHRv IGJ1ZmZlciBpbmRleCAqLworCQlpbmRleF9zY2FuX2JhdGNoX2FwcGVuZChzY2FuLCBiYXRjaCk7 CisKKwkJLyoKKwkJICogVGhlb3JldGljYWxseSB3ZSBzaG91bGQgc2V0IGtub3duRW5kRm9yd2Fy ZC9rbm93bkVuZEJhY2t3YXJkIHRvCisJCSAqIGZhbHNlICh3aGljaGV2ZXIgaXMgdXNlZCB3aGVu IG1vdmluZyBpbiB0aGUgb3Bwb3NpdGUgZGlyZWN0aW9uKQorCQkgKiB3aGVuIHRoaXMgaXMgdGhl IHNjYW4ncyBmaXJzdCByZXR1cm5lZCBiYXRjaC4gIFdlIGRvbid0IGJvdGhlcgorCQkgKiBiZWNh dXNlIHRoZSBpbmRleCBBTSBzaG91bGQgYWx3YXlzIHJlY29yZCB0aGF0IGZhY3QgaW4gaXRzIG93 bgorCQkgKiBvcGFxdWUgYXJlYS4gIChUaGVzZSBmaWVsZHMgb25seSBleGlzdCBiZWNhdXNlIHdl IGRvbid0IHdhbnQgaW5kZXgKKwkJICogQU1zIHNldHRpbmcgX2FueV8gZmllbGQgZnJvbSBhbnkg cHJpb3JiYXRjaCB0aGF0IHdlIHBhc3MgdG8gdGhlbS4KKwkJICogQmVzaWRlcywgaXQgd291bGQg YmUgY3VtYmVyc29tZSBmb3IgaW5kZXggQU1zIHRvIGtlZXAgdHJhY2sgb2YKKwkJICogd2hpY2gg YmF0Y2ggaXMgdGhlIGN1cnJlbnQgYW1nZXRiYXRjaCBjYWxsJ3Mgb3JpZ2luYWwgcHJpb3JiYXRj aC4pCisJCSAqLworCX0KKwllbHNlCisJeworCQkvKiBhbWdldGJhdGNoIHJldHVybmVkIE5VTEwg Ki8KKwkJaWYgKHByaW9yQmF0Y2gpCisJCXsKKwkJCS8qCisJCQkgKiBUaGVyZSBhcmUgbm8gZnVy dGhlciBtYXRjaGVzIHRvIGJlIGZvdW5kIGluIHRoZSBjdXJyZW50IHNjYW4KKwkJCSAqIGRpcmVj dGlvbiwgZm9sbG93aW5nIHByaW9yQmF0Y2guICBSZW1lbWJlciB0aGF0IHByaW9yQmF0Y2ggaXMK KwkJCSAqIHRoZSBsYXN0IGJhdGNoIHdpdGggbWF0Y2hpbmcgaXRlbXMuCisJCQkgKi8KKwkJCWlm IChTY2FuRGlyZWN0aW9uSXNGb3J3YXJkKGRpcmVjdGlvbikpCisJCQkJcHJpb3JCYXRjaC0+a25v d25FbmRGb3J3YXJkID0gdHJ1ZTsKKwkJCWVsc2UKKwkJCQlwcmlvckJhdGNoLT5rbm93bkVuZEJh Y2t3YXJkID0gdHJ1ZTsKKwkJfQorCX0KKworCS8qIHhzX2hpdHVwIGlzbid0IGN1cnJlbnRseSBz dXBwb3J0ZWQgYnkgYW1nZXRiYXRjaCBzY2FucyAqLworCUFzc2VydCghc2Nhbi0+eHNfaGl0dXAp OworCisJcmV0dXJuIGJhdGNoOworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBVdGls aXRpZXMgY2FsbGVkIGJ5IGluZGV4IEFNcworICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCitl eHRlcm4gdm9pZCBpbmRleGFtX3V0aWxfYmF0Y2hfdW5sb2NrKEluZGV4U2NhbkRlc2Mgc2Nhbiwg SW5kZXhTY2FuQmF0Y2ggYmF0Y2gsCisJCQkJCQkJCQkgIEJ1ZmZlciBidWYpOworZXh0ZXJuIElu ZGV4U2NhbkJhdGNoIGluZGV4YW1fdXRpbF9iYXRjaF9hbGxvYyhJbmRleFNjYW5EZXNjIHNjYW4p OworZXh0ZXJuIHZvaWQgaW5kZXhhbV91dGlsX2JhdGNoX3JlbGVhc2UoSW5kZXhTY2FuRGVzYyBz Y2FuLCBJbmRleFNjYW5CYXRjaCBiYXRjaCk7CisKKy8qCisgKiBVdGlsaXR5IG1hY3JvIGZvciBh Y2Nlc3NpbmcgdGhlIGluZGV4IEFNJ3MgcGVyLWJhdGNoIG9wYXF1ZSBkYXRhLgorICoKKyAqIEVh Y2ggYmF0Y2ggYWxsb2NhdGlvbiBwbGFjZXMgdGhlIGluZGV4IEFNIG9wYXF1ZSBhcmVhIGF0IGEg Zml4ZWQgbmVnYXRpdmUKKyAqIG9mZnNldCBmcm9tIHRoZSBJbmRleFNjYW5CYXRjaCBwb2ludGVy IChzZWUgaW5kZXhhbV91dGlsX2JhdGNoX2FsbG9jKS4KKyAqIFRoaXMgbWFjcm8gcmV0dXJucyBh IHR5cGVkIHBvaW50ZXIgdG8gdGhhdCBhcmVhLCBhc3NlcnRpbmcgdGhhdCBldmVyeWJvZHkKKyAq IGhhcyB0aGUgc2FtZSBpZGVhIGFib3V0IHdoZXJlIHRoZSBpbmRleCBBTSBvcGFxdWUgYXJlYSBp cyBpbiBwYXNzaW5nLgorICovCisjZGVmaW5lIGluZGV4YW1fdXRpbF9iYXRjaF9nZXRfYW1kYXRh KHNjYW4sIGJhdGNoLCB0eXBlKSBcCisJKEFzc2VydE1hY3JvKChzY2FuKS0+YmF0Y2hfaW5kZXhf b3BhcXVlX3NpemUgPT0gTUFYQUxJR04oc2l6ZW9mKHR5cGUpKSksIFwKKwkgKCh0eXBlICopICgo Y2hhciAqKSAoYmF0Y2gpIC0gTUFYQUxJR04oc2l6ZW9mKHR5cGUpKSkpKQorCisjZW5kaWYJCQkJ CQkJLyogSU5ERVhCQVRDSF9IICovCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9hY2Nlc3MvbmJ0 cmVlLmggYi9zcmMvaW5jbHVkZS9hY2Nlc3MvbmJ0cmVlLmgKaW5kZXggZGE3NTAzYzU3Li42OTdj ZDdhNTQgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9uYnRyZWUuaAorKysgYi9zcmMv aW5jbHVkZS9hY2Nlc3MvbmJ0cmVlLmgKQEAgLTE1LDYgKzE1LDcgQEAKICNkZWZpbmUgTkJUUkVF X0gKIAogI2luY2x1ZGUgImFjY2Vzcy9hbWFwaS5oIgorI2luY2x1ZGUgImFjY2Vzcy9pbmRleGJh dGNoLmgiCiAjaW5jbHVkZSAiYWNjZXNzL2l0dXAuaCIKICNpbmNsdWRlICJhY2Nlc3Mvc2Rpci5o IgogI2luY2x1ZGUgImNhdGFsb2cvcGdfYW1fZC5oIgpAQCAtOTI0LDExMiArOTI1LDYgQEAgdHlw ZWRlZiBzdHJ1Y3QgQlRWYWN1dW1Qb3N0aW5nRGF0YQogCiB0eXBlZGVmIEJUVmFjdXVtUG9zdGlu Z0RhdGEgKkJUVmFjdXVtUG9zdGluZzsKIAotLyoKLSAqIEJUU2Nhbk9wYXF1ZURhdGEgaXMgdGhl IGJ0cmVlLXByaXZhdGUgc3RhdGUgbmVlZGVkIGZvciBhbiBpbmRleHNjYW4uCi0gKiBUaGlzIGNv bnNpc3RzIG9mIHByZXByb2Nlc3NlZCBzY2FuIGtleXMgKHNlZSBfYnRfcHJlcHJvY2Vzc19rZXlz KCkgZm9yCi0gKiBkZXRhaWxzIG9mIHRoZSBwcmVwcm9jZXNzaW5nKSwgaW5mb3JtYXRpb24gYWJv dXQgdGhlIGN1cnJlbnQgbG9jYXRpb24KLSAqIG9mIHRoZSBzY2FuLCBhbmQgaW5mb3JtYXRpb24g YWJvdXQgdGhlIG1hcmtlZCBsb2NhdGlvbiwgaWYgYW55LiAgKFdlIHVzZQotICogQlRTY2FuUG9z RGF0YSB0byByZXByZXNlbnQgdGhlIGRhdGEgbmVlZGVkIGZvciBlYWNoIG9mIGN1cnJlbnQgYW5k IG1hcmtlZAotICogbG9jYXRpb25zLikJSW4gYWRkaXRpb24gd2UgY2FuIHJlbWVtYmVyIHNvbWUg a25vd24ta2lsbGVkIGluZGV4IGVudHJpZXMKLSAqIHRoYXQgbXVzdCBiZSBtYXJrZWQgYmVmb3Jl IHdlIGNhbiBtb3ZlIG9mZiB0aGUgY3VycmVudCBwYWdlLgotICoKLSAqIEluZGV4IHNjYW5zIHdv cmsgYSBwYWdlIGF0IGEgdGltZTogd2UgcGluIGFuZCByZWFkLWxvY2sgdGhlIHBhZ2UsIGlkZW50 aWZ5Ci0gKiBhbGwgdGhlIG1hdGNoaW5nIGl0ZW1zIG9uIHRoZSBwYWdlIGFuZCBzYXZlIHRoZW0g aW4gQlRTY2FuUG9zRGF0YSwgdGhlbgotICogcmVsZWFzZSB0aGUgcmVhZC1sb2NrIHdoaWxlIHJl dHVybmluZyB0aGUgaXRlbXMgdG8gdGhlIGNhbGxlciBmb3IKLSAqIHByb2Nlc3NpbmcuICBUaGlz IGFwcHJvYWNoIG1pbmltaXplcyBsb2NrL3VubG9jayB0cmFmZmljLiAgV2UgbXVzdCBhbHdheXMK LSAqIGRyb3AgdGhlIGxvY2sgdG8gbWFrZSBpdCBva2F5IGZvciBjYWxsZXIgdG8gcHJvY2VzcyB0 aGUgcmV0dXJuZWQgaXRlbXMuCi0gKiBXaGV0aGVyIG9yIG5vdCB3ZSBjYW4gYWxzbyByZWxlYXNl IHRoZSBwaW4gZHVyaW5nIHRoaXMgd2luZG93IHdpbGwgdmFyeS4KLSAqIFdlIGRyb3AgdGhlIHBp biAod2hlbiBzby0+ZHJvcFBpbikgdG8gYXZvaWQgYmxvY2tpbmcgcHJvZ3Jlc3MgYnkgVkFDVVVN Ci0gKiAoc2VlIG5idHJlZS9SRUFETUUgc2VjdGlvbiBhYm91dCBtYWtpbmcgY29uY3VycmVudCBU SUQgcmVjeWNsaW5nIHNhZmUpLgotICogV2UnbGwgYWx3YXlzIHJlbGVhc2UgYm90aCB0aGUgbG9j ayBhbmQgdGhlIHBpbiBvbiB0aGUgY3VycmVudCBwYWdlIGJlZm9yZQotICogbW92aW5nIG9uIHRv IGl0cyBzaWJsaW5nIHBhZ2UuCi0gKgotICogSWYgd2UgYXJlIGRvaW5nIGFuIGluZGV4LW9ubHkg c2Nhbiwgd2Ugc2F2ZSB0aGUgZW50aXJlIEluZGV4VHVwbGUgZm9yIGVhY2gKLSAqIG1hdGNoZWQg aXRlbSwgb3RoZXJ3aXNlIG9ubHkgaXRzIGhlYXAgVElEIGFuZCBvZmZzZXQuICBUaGUgSW5kZXhU dXBsZXMgZ28KLSAqIGludG8gYSBzZXBhcmF0ZSB3b3Jrc3BhY2UgYXJyYXk7IGVhY2ggQlRTY2Fu UG9zSXRlbSBzdG9yZXMgaXRzIHR1cGxlJ3MKLSAqIG9mZnNldCB3aXRoaW4gdGhhdCBhcnJheS4g IFBvc3RpbmcgbGlzdCB0dXBsZXMgc3RvcmUgYSAiYmFzZSIgdHVwbGUgb25jZSwKLSAqIGFsbG93 aW5nIHRoZSBzYW1lIGtleSB0byBiZSByZXR1cm5lZCBmb3IgZWFjaCBUSUQgaW4gdGhlIHBvc3Rp bmcgbGlzdAotICogdHVwbGUuCi0gKi8KLQotdHlwZWRlZiBzdHJ1Y3QgQlRTY2FuUG9zSXRlbQkv KiB3aGF0IHdlIHJlbWVtYmVyIGFib3V0IGVhY2ggbWF0Y2ggKi8KLXsKLQlJdGVtUG9pbnRlckRh dGEgaGVhcFRpZDsJLyogVElEIG9mIHJlZmVyZW5jZWQgaGVhcCBpdGVtICovCi0JT2Zmc2V0TnVt YmVyIGluZGV4T2Zmc2V0OwkvKiBpbmRleCBpdGVtJ3MgbG9jYXRpb24gd2l0aGluIHBhZ2UgKi8K LQlMb2NhdGlvbkluZGV4IHR1cGxlT2Zmc2V0OwkvKiBJbmRleFR1cGxlJ3Mgb2Zmc2V0IGluIHdv cmtzcGFjZSwgaWYgYW55ICovCi19IEJUU2NhblBvc0l0ZW07Ci0KLXR5cGVkZWYgc3RydWN0IEJU U2NhblBvc0RhdGEKLXsKLQlCdWZmZXIJCWJ1ZjsJCQkvKiBjdXJyUGFnZSBidWYgKGludmFsaWQg bWVhbnMgdW5waW5uZWQpICovCi0KLQkvKiBwYWdlIGRldGFpbHMgYXMgb2YgdGhlIHNhdmVkIHBv c2l0aW9uJ3MgY2FsbCB0byBfYnRfcmVhZHBhZ2UgKi8KLQlCbG9ja051bWJlciBjdXJyUGFnZTsJ CS8qIHBhZ2UgcmVmZXJlbmNlZCBieSBpdGVtcyBhcnJheSAqLwotCUJsb2NrTnVtYmVyIHByZXZQ YWdlOwkJLyogY3VyclBhZ2UncyBsZWZ0IGxpbmsgKi8KLQlCbG9ja051bWJlciBuZXh0UGFnZTsJ CS8qIGN1cnJQYWdlJ3MgcmlnaHQgbGluayAqLwotCVhMb2dSZWNQdHIJbHNuOwkJCS8qIGN1cnJQ YWdlJ3MgTFNOICh3aGVuIHNvLT5kcm9wUGluKSAqLwotCi0JLyogc2NhbiBkaXJlY3Rpb24gZm9y IHRoZSBzYXZlZCBwb3NpdGlvbidzIGNhbGwgdG8gX2J0X3JlYWRwYWdlICovCi0JU2NhbkRpcmVj dGlvbiBkaXI7Ci0KLQkvKgotCSAqIElmIHdlIGFyZSBkb2luZyBhbiBpbmRleC1vbmx5IHNjYW4s IG5leHRUdXBsZU9mZnNldCBpcyB0aGUgZmlyc3QgZnJlZQotCSAqIGxvY2F0aW9uIGluIHRoZSBh c3NvY2lhdGVkIHR1cGxlIHN0b3JhZ2Ugd29ya3NwYWNlLgotCSAqLwotCWludAkJCW5leHRUdXBs ZU9mZnNldDsKLQotCS8qCi0JICogbW9yZUxlZnQgYW5kIG1vcmVSaWdodCB0cmFjayB3aGV0aGVy IHdlIHRoaW5rIHRoZXJlIG1heSBiZSBtYXRjaGluZwotCSAqIGluZGV4IGVudHJpZXMgdG8gdGhl IGxlZnQgYW5kIHJpZ2h0IG9mIHRoZSBjdXJyZW50IHBhZ2UsIHJlc3BlY3RpdmVseS4KLQkgKi8K LQlib29sCQltb3JlTGVmdDsKLQlib29sCQltb3JlUmlnaHQ7Ci0KLQkvKgotCSAqIFRoZSBpdGVt cyBhcnJheSBpcyBhbHdheXMgb3JkZXJlZCBpbiBpbmRleCBvcmRlciAoaWUsIGluY3JlYXNpbmcK LQkgKiBpbmRleG9mZnNldCkuICBXaGVuIHNjYW5uaW5nIGJhY2t3YXJkcyBpdCBpcyBjb252ZW5p ZW50IHRvIGZpbGwgdGhlCi0JICogYXJyYXkgYmFjay10by1mcm9udCwgc28gd2Ugc3RhcnQgYXQg dGhlIGxhc3Qgc2xvdCBhbmQgZmlsbCBkb3dud2FyZHMuCi0JICogSGVuY2Ugd2UgbmVlZCBib3Ro IGEgZmlyc3QtdmFsaWQtZW50cnkgYW5kIGEgbGFzdC12YWxpZC1lbnRyeSBjb3VudGVyLgotCSAq IGl0ZW1JbmRleCBpcyBhIGN1cnNvciBzaG93aW5nIHdoaWNoIGVudHJ5IHdhcyBsYXN0IHJldHVy bmVkIHRvIGNhbGxlci4KLQkgKi8KLQlpbnQJCQlmaXJzdEl0ZW07CQkvKiBmaXJzdCB2YWxpZCBp bmRleCBpbiBpdGVtc1tdICovCi0JaW50CQkJbGFzdEl0ZW07CQkvKiBsYXN0IHZhbGlkIGluZGV4 IGluIGl0ZW1zW10gKi8KLQlpbnQJCQlpdGVtSW5kZXg7CQkvKiBjdXJyZW50IGluZGV4IGluIGl0 ZW1zW10gKi8KLQotCUJUU2NhblBvc0l0ZW0gaXRlbXNbTWF4VElEc1BlckJUcmVlUGFnZV07CS8q IE1VU1QgQkUgTEFTVCAqLwotfSBCVFNjYW5Qb3NEYXRhOwotCi10eXBlZGVmIEJUU2NhblBvc0Rh dGEgKkJUU2NhblBvczsKLQotI2RlZmluZSBCVFNjYW5Qb3NJc1Bpbm5lZChzY2FucG9zKSBcCi0o IFwKLQlBc3NlcnRNYWNybyhCbG9ja051bWJlcklzVmFsaWQoKHNjYW5wb3MpLmN1cnJQYWdlKSB8 fCBcCi0JCQkJIUJ1ZmZlcklzVmFsaWQoKHNjYW5wb3MpLmJ1ZikpLCBcCi0JQnVmZmVySXNWYWxp ZCgoc2NhbnBvcykuYnVmKSBcCi0pCi0jZGVmaW5lIEJUU2NhblBvc1VucGluKHNjYW5wb3MpIFwK LQlkbyB7IFwKLQkJUmVsZWFzZUJ1ZmZlcigoc2NhbnBvcykuYnVmKTsgXAotCQkoc2NhbnBvcyku YnVmID0gSW52YWxpZEJ1ZmZlcjsgXAotCX0gd2hpbGUgKDApCi0jZGVmaW5lIEJUU2NhblBvc1Vu cGluSWZQaW5uZWQoc2NhbnBvcykgXAotCWRvIHsgXAotCQlpZiAoQlRTY2FuUG9zSXNQaW5uZWQo c2NhbnBvcykpIFwKLQkJCUJUU2NhblBvc1VucGluKHNjYW5wb3MpOyBcCi0JfSB3aGlsZSAoMCkK LQotI2RlZmluZSBCVFNjYW5Qb3NJc1ZhbGlkKHNjYW5wb3MpIFwKLSggXAotCUFzc2VydE1hY3Jv KEJsb2NrTnVtYmVySXNWYWxpZCgoc2NhbnBvcykuY3VyclBhZ2UpIHx8IFwKLQkJCQkhQnVmZmVy SXNWYWxpZCgoc2NhbnBvcykuYnVmKSksIFwKLQlCbG9ja051bWJlcklzVmFsaWQoKHNjYW5wb3Mp LmN1cnJQYWdlKSBcCi0pCi0jZGVmaW5lIEJUU2NhblBvc0ludmFsaWRhdGUoc2NhbnBvcykgXAot CWRvIHsgXAotCQkoc2NhbnBvcykuYnVmID0gSW52YWxpZEJ1ZmZlcjsgXAotCQkoc2NhbnBvcyku Y3VyclBhZ2UgPSBJbnZhbGlkQmxvY2tOdW1iZXI7IFwKLQl9IHdoaWxlICgwKQotCiAvKiBXZSBu ZWVkIG9uZSBvZiB0aGVzZSBmb3IgZWFjaCBlcXVhbGl0eS10eXBlIFNLX1NFQVJDSEFSUkFZIHNj YW4ga2V5ICovCiB0eXBlZGVmIHN0cnVjdCBCVEFycmF5S2V5SW5mbwogewpAQCAtMTA1MCw2ICs5 NDUsNDMgQEAgdHlwZWRlZiBzdHJ1Y3QgQlRBcnJheUtleUluZm8KIAlTY2FuS2V5CQloaWdoX2Nv bXBhcmU7CS8qIGFycmF5J3MgPCBvciA8PSB1cHBlciBib3VuZCAqLwogfSBCVEFycmF5S2V5SW5m bzsKIAorLyogUGVyLWJhdGNoIGRhdGEgcHJpdmF0ZSB0byB0aGUgYnRyZWUgaW5kZXggQU0gKi8K K3R5cGVkZWYgc3RydWN0IEJUQmF0Y2hEYXRhCit7CisJQnVmZmVyCQlidWY7CQkJLyogbGVhZiBw YWdlJ3MgYnVmZmVyIHBpbiAqLworCUJsb2NrTnVtYmVyIGN1cnJQYWdlOwkJLyogbGVhZiBwYWdl J3MgYmxvY2sgbnVtYmVyICovCisJQmxvY2tOdW1iZXIgcHJldlBhZ2U7CQkvKiBsZWFmIHBhZ2Un cyBsZWZ0IHNpYmxpbmcgKi8KKwlCbG9ja051bWJlciBuZXh0UGFnZTsJCS8qIGxlYWYgcGFnZSdz IHJpZ2h0IHNpYmxpbmcgKi8KKwlib29sCQltb3JlTGVmdDsJCS8qIG1vcmUgcGFnZXMgb2YgaW50 ZXJlc3QgdG8gdGhlIGxlZnQ/ICovCisJYm9vbAkJbW9yZVJpZ2h0OwkJLyogbW9yZSBwYWdlcyBv ZiBpbnRlcmVzdCB0byB0aGUgcmlnaHQ/ICovCit9IEJUQmF0Y2hEYXRhOworCisvKiBBY2Nlc3Mg dGhlIGJ0cmVlLXByaXZhdGUgcGVyLWJhdGNoIGRhdGEgZnJvbSBhbiBJbmRleFNjYW5CYXRjaCBw b2ludGVyICovCisjZGVmaW5lIEJUQmF0Y2hHZXREYXRhKHNjYW4sIGJhdGNoKSBcCisJaW5kZXhh bV91dGlsX2JhdGNoX2dldF9hbWRhdGEoc2NhbiwgYmF0Y2gsIEJUQmF0Y2hEYXRhKQorCisvKgor ICogQlRTY2FuT3BhcXVlRGF0YSBpcyB0aGUgYnRyZWUtcHJpdmF0ZSBzdGF0ZSBuZWVkZWQgZm9y IGFuIGluZGV4c2Nhbi4KKyAqIFRoaXMgY29uc2lzdHMgb2YgcHJlcHJvY2Vzc2VkIHNjYW4ga2V5 cyAoc2VlIF9idF9wcmVwcm9jZXNzX2tleXMoKSBmb3IKKyAqIGRldGFpbHMgb2YgdGhlIHByZXBy b2Nlc3NpbmcpLCBhbmQgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGN1cnJlbnQgYXJyYXkKKyAqIGtl eXMuICBUaGVyZSBhcmUgYXNzdW1wdGlvbnMgYWJvdXQgaG93IHRoZSBjdXJyZW50IGFycmF5IGtl eXMgdHJhY2sgdGhlCisgKiBwcm9ncmVzcyBvZiB0aGUgaW5kZXggc2NhbiB0aHJvdWdoIHRoZSBp bmRleCdzIGtleSBzcGFjZSAoc2VlIF9idF9yZWFkcGFnZSwKKyAqIGJ0cG9zcmVzZXQsIGFuZCBf YnRfYWR2YW5jZV9hcnJheV9rZXlzKSwgYnV0IHdlIGRvbid0IHRyYWNrIGFueXRoaW5nIGFib3V0 CisgKiB0aGUgY3VycmVudCBzY2FuIHBvc2l0aW9uL2JhdGNoIGluIHRoaXMgb3BhcXVlIHN0cnVj dC4KKyAqCisgKiBJbmRleCBzY2FucyB3b3JrIGEgcGFnZSBhdCBhIHRpbWUsIGFzIHJlcXVpcmVk IGJ5IHRoZSBhbWdldGJhdGNoIGNvbnRyYWN0OgorICogd2UgcGluIGFuZCByZWFkLWxvY2sgdGhl IHBhZ2UsIGlkZW50aWZ5IGFsbCB0aGUgbWF0Y2hpbmcgaXRlbXMgb24gdGhlIHBhZ2UKKyAqIGFu ZCByZXR1cm4gdGhlbSBpbiBhIG5ld2x5IGFsbG9jYXRlZCBiYXRjaC4gIFdlIHRoZW4gcmVsZWFz ZSB0aGUgcmVhZC1sb2NrCisgKiB1c2luZyBhbWdldGJhdGNoIHV0aWxpdHkgcm91dGluZXMuICBU aGlzIGFwcHJvYWNoIG1pbmltaXplcyBsb2NrL3VubG9jaworICogdHJhZmZpYy4gIF9idF9uZXh0 IGlzIHBhc3NlZCBwcmlvcmJhdGNoLCB3aGljaCBoYXMgYSBCVEJhdGNoRGF0YSBhcmVhIHRoYXQK KyAqIHRlbGxzIHVzIHdoaWNoIHBhZ2UgaXMgbmV4dCBpbiBsaW5lIHRvIGJlIHJlYWQgaW4gdGhl IGdpdmVuIHNjYW4gZGlyZWN0aW9uCisgKiAodGhpcyBpcyBvZnRlbiB0aGUgc2FtZSBwcmlvcmJh dGNoIHBhc3NlZCB0byBidGdldGJhdGNoIGJ5IGNvcmUgY29kZSkuCisgKgorICogSWYgd2UgYXJl IGRvaW5nIGFuIGluZGV4LW9ubHkgc2Nhbiwgd2Ugc2F2ZSB0aGUgZW50aXJlIEluZGV4VHVwbGUg Zm9yIGVhY2gKKyAqIG1hdGNoZWQgaXRlbSwgb3RoZXJ3aXNlIG9ubHkgaXRzIHRhYmxlIFRJRCBh bmQgb2Zmc2V0LiAgUG9zdGluZyBsaXN0IHR1cGxlcworICogc3RvcmUgYSAiYmFzZSIgdHVwbGUg b25jZSwgYWxsb3dpbmcgdGhlIHNhbWUga2V5IHRvIGJlIHVzZWQgZm9yIGVhY2ggVElEIGluCisg KiB0aGUgcG9zdGluZyBsaXN0LgorICovCiB0eXBlZGVmIHN0cnVjdCBCVFNjYW5PcGFxdWVEYXRh CiB7CiAJLyogdGhlc2UgZmllbGRzIGFyZSBzZXQgYnkgX2J0X3ByZXByb2Nlc3Nfa2V5cygpOiAq LwpAQCAtMTA2NiwzMiArOTk4LDYgQEAgdHlwZWRlZiBzdHJ1Y3QgQlRTY2FuT3BhcXVlRGF0YQog CUJUQXJyYXlLZXlJbmZvICphcnJheUtleXM7CS8qIGluZm8gYWJvdXQgZWFjaCBlcXVhbGl0eS10 eXBlIGFycmF5IGtleSAqLwogCUZtZ3JJbmZvICAgKm9yZGVyUHJvY3M7CQkvKiBPUkRFUiBwcm9j cyBmb3IgcmVxdWlyZWQgZXF1YWxpdHkga2V5cyAqLwogCU1lbW9yeUNvbnRleHQgYXJyYXlDb250 ZXh0OyAvKiBzY2FuLWxpZmVzcGFuIGNvbnRleHQgZm9yIGFycmF5IGRhdGEgKi8KLQotCS8qIGlu Zm8gYWJvdXQga2lsbGVkIGl0ZW1zIGlmIGFueSAoa2lsbGVkSXRlbXMgaXMgTlVMTCBpZiBuZXZl ciB1c2VkKSAqLwotCWludAkJICAgKmtpbGxlZEl0ZW1zOwkvKiBjdXJyUG9zLml0ZW1zIGluZGV4 ZXMgb2Yga2lsbGVkIGl0ZW1zICovCi0JaW50CQkJbnVtS2lsbGVkOwkJLyogbnVtYmVyIG9mIGN1 cnJlbnRseSBzdG9yZWQgaXRlbXMgKi8KLQlib29sCQlkcm9wUGluOwkJLyogZHJvcCBsZWFmIHBp biBiZWZvcmUgYnRnZXR0dXBsZSByZXR1cm5zPyAqLwotCi0JLyoKLQkgKiBJZiB3ZSBhcmUgZG9p bmcgYW4gaW5kZXgtb25seSBzY2FuLCB0aGVzZSBhcmUgdGhlIHR1cGxlIHN0b3JhZ2UKLQkgKiB3 b3Jrc3BhY2VzIGZvciB0aGUgY3VyclBvcyBhbmQgbWFya1BvcyByZXNwZWN0aXZlbHkuICBFYWNo IGlzIG9mIHNpemUKLQkgKiBCTENLU1osIHNvIGl0IGNhbiBob2xkIGFzIG11Y2ggYXMgYSBmdWxs IHBhZ2UncyB3b3J0aCBvZiB0dXBsZXMuCi0JICovCi0JY2hhcgkgICAqY3VyclR1cGxlczsJCS8q IHR1cGxlIHN0b3JhZ2UgZm9yIGN1cnJQb3MgKi8KLQljaGFyCSAgICptYXJrVHVwbGVzOwkJLyog dHVwbGUgc3RvcmFnZSBmb3IgbWFya1BvcyAqLwotCi0JLyoKLQkgKiBJZiB0aGUgbWFya2VkIHBv c2l0aW9uIGlzIG9uIHRoZSBzYW1lIHBhZ2UgYXMgY3VycmVudCBwb3NpdGlvbiwgd2UKLQkgKiBk b24ndCB1c2UgbWFya1BvcywgYnV0IGp1c3Qga2VlcCB0aGUgbWFya2VkIGl0ZW1JbmRleCBpbiBt YXJrSXRlbUluZGV4Ci0JICogKGFsbCB0aGUgcmVzdCBvZiBjdXJyUG9zIGlzIHZhbGlkIGZvciB0 aGUgbWFyayBwb3NpdGlvbikuIEhlbmNlLCB0bwotCSAqIGRldGVybWluZSBpZiB0aGVyZSBpcyBh IG1hcmssIGZpcnN0IGxvb2sgYXQgbWFya0l0ZW1JbmRleCwgdGhlbiBhdAotCSAqIG1hcmtQb3Mu Ci0JICovCi0JaW50CQkJbWFya0l0ZW1JbmRleDsJLyogaXRlbUluZGV4LCBvciAtMSBpZiBub3Qg dmFsaWQgKi8KLQotCS8qIGtlZXAgdGhlc2UgbGFzdCBpbiBzdHJ1Y3QgZm9yIGVmZmljaWVuY3kg Ki8KLQlCVFNjYW5Qb3NEYXRhIGN1cnJQb3M7CQkvKiBjdXJyZW50IHBvc2l0aW9uIGRhdGEgKi8K LQlCVFNjYW5Qb3NEYXRhIG1hcmtQb3M7CQkvKiBtYXJrZWQgcG9zaXRpb24sIGlmIGFueSAqLwog fSBCVFNjYW5PcGFxdWVEYXRhOwogCiB0eXBlZGVmIEJUU2Nhbk9wYXF1ZURhdGEgKkJUU2Nhbk9w YXF1ZTsKQEAgLTExNjAsMTQgKzEwNjYsMTcgQEAgZXh0ZXJuIGJvb2wgYnRpbnNlcnQoUmVsYXRp b24gcmVsLCBEYXR1bSAqdmFsdWVzLCBib29sICppc251bGwsCiBleHRlcm4gSW5kZXhTY2FuRGVz YyBidGJlZ2luc2NhbihSZWxhdGlvbiByZWwsIGludCBua2V5cywgaW50IG5vcmRlcmJ5cyk7CiBl eHRlcm4gU2l6ZSBidGVzdGltYXRlcGFyYWxsZWxzY2FuKFJlbGF0aW9uIHJlbCwgaW50IG5rZXlz LCBpbnQgbm9yZGVyYnlzKTsKIGV4dGVybiB2b2lkIGJ0aW5pdHBhcmFsbGVsc2Nhbih2b2lkICp0 YXJnZXQpOwotZXh0ZXJuIGJvb2wgYnRnZXR0dXBsZShJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5E aXJlY3Rpb24gZGlyKTsKK2V4dGVybiBJbmRleFNjYW5CYXRjaCBidGdldGJhdGNoKEluZGV4U2Nh bkRlc2Mgc2NhbiwKKwkJCQkJCQkJIEluZGV4U2NhbkJhdGNoIHByaW9yYmF0Y2gsCisJCQkJCQkJ CSBTY2FuRGlyZWN0aW9uIGRpcik7CiBleHRlcm4gaW50NjQgYnRnZXRiaXRtYXAoSW5kZXhTY2Fu RGVzYyBzY2FuLCBUSURCaXRtYXAgKnRibSk7CiBleHRlcm4gdm9pZCBidHJlc2NhbihJbmRleFNj YW5EZXNjIHNjYW4sIFNjYW5LZXkgc2NhbmtleSwgaW50IG5zY2Fua2V5cywKIAkJCQkJIFNjYW5L ZXkgb3JkZXJieXMsIGludCBub3JkZXJieXMpOworZXh0ZXJuIHZvaWQgYnR1bmd1YXJkYmF0Y2go SW5kZXhTY2FuRGVzYyBzY2FuLCBJbmRleFNjYW5CYXRjaCBiYXRjaCk7CitleHRlcm4gdm9pZCBi dGtpbGxpdGVtc2JhdGNoKEluZGV4U2NhbkRlc2Mgc2NhbiwgSW5kZXhTY2FuQmF0Y2ggYmF0Y2gp OwogZXh0ZXJuIHZvaWQgYnRwYXJhbGxlbHJlc2NhbihJbmRleFNjYW5EZXNjIHNjYW4pOwogZXh0 ZXJuIHZvaWQgYnRlbmRzY2FuKEluZGV4U2NhbkRlc2Mgc2Nhbik7Ci1leHRlcm4gdm9pZCBidG1h cmtwb3MoSW5kZXhTY2FuRGVzYyBzY2FuKTsKLWV4dGVybiB2b2lkIGJ0cmVzdHJwb3MoSW5kZXhT Y2FuRGVzYyBzY2FuKTsKK2V4dGVybiB2b2lkIGJ0cG9zcmVzZXQoSW5kZXhTY2FuRGVzYyBzY2Fu LCBJbmRleFNjYW5CYXRjaCBiYXRjaCk7CiBleHRlcm4gSW5kZXhCdWxrRGVsZXRlUmVzdWx0ICpi dGJ1bGtkZWxldGUoSW5kZXhWYWN1dW1JbmZvICppbmZvLAogCQkJCQkJCQkJCSAgIEluZGV4QnVs a0RlbGV0ZVJlc3VsdCAqc3RhdHMsCiAJCQkJCQkJCQkJICAgSW5kZXhCdWxrRGVsZXRlQ2FsbGJh Y2sgY2FsbGJhY2ssCkBAIC0xMjcxLDggKzExODAsOSBAQCBleHRlcm4gdm9pZCBfYnRfcHJlcHJv Y2Vzc19rZXlzKEluZGV4U2NhbkRlc2Mgc2Nhbik7CiAvKgogICogcHJvdG90eXBlcyBmb3IgZnVu Y3Rpb25zIGluIG5idHJlYWRwYWdlLmMKICAqLwotZXh0ZXJuIGJvb2wgX2J0X3JlYWRwYWdlKElu ZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIsCi0JCQkJCQkgT2Zmc2V0TnVtYmVy IG9mZm51bSwgYm9vbCBmaXJzdHBhZ2UpOworZXh0ZXJuIGJvb2wgX2J0X3JlYWRwYWdlKEluZGV4 U2NhbkRlc2Mgc2NhbiwgSW5kZXhTY2FuQmF0Y2ggbmV3YmF0Y2gsCisJCQkJCQkgU2NhbkRpcmVj dGlvbiBkaXIsIE9mZnNldE51bWJlciBvZmZudW0sCisJCQkJCQkgYm9vbCBmaXJzdHBhZ2UpOwog ZXh0ZXJuIHZvaWQgX2J0X3N0YXJ0X2FycmF5X2tleXMoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2Fu RGlyZWN0aW9uIGRpcik7CiBleHRlcm4gaW50CV9idF9iaW5zcmNoX2FycmF5X3NrZXkoRm1ncklu Zm8gKm9yZGVycHJvYywKIAkJCQkJCQkJICAgYm9vbCBjdXJfZWxlbV90cmlnLCBTY2FuRGlyZWN0 aW9uIGRpciwKQEAgLTEyODcsMTUgKzExOTcsMTUgQEAgZXh0ZXJuIEJUU3RhY2sgX2J0X3NlYXJj aChSZWxhdGlvbiByZWwsIFJlbGF0aW9uIGhlYXByZWwsIEJUU2Nhbkluc2VydCBrZXksCiAJCQkJ CQkgIEJ1ZmZlciAqYnVmUCwgaW50IGFjY2VzcywgYm9vbCByZXR1cm5zdGFjayk7CiBleHRlcm4g T2Zmc2V0TnVtYmVyIF9idF9iaW5zcmNoX2luc2VydChSZWxhdGlvbiByZWwsIEJUSW5zZXJ0U3Rh dGUgaW5zZXJ0c3RhdGUpOwogZXh0ZXJuIGludDMyIF9idF9jb21wYXJlKFJlbGF0aW9uIHJlbCwg QlRTY2FuSW5zZXJ0IGtleSwgUGFnZSBwYWdlLCBPZmZzZXROdW1iZXIgb2ZmbnVtKTsKLWV4dGVy biBib29sIF9idF9maXJzdChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyKTsK LWV4dGVybiBib29sIF9idF9uZXh0KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBk aXIpOworZXh0ZXJuIEluZGV4U2NhbkJhdGNoIF9idF9maXJzdChJbmRleFNjYW5EZXNjIHNjYW4s IFNjYW5EaXJlY3Rpb24gZGlyKTsKK2V4dGVybiBJbmRleFNjYW5CYXRjaCBfYnRfbmV4dChJbmRl eFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyLAorCQkJCQkJCSAgIEluZGV4U2NhbkJh dGNoIHByaW9yYmF0Y2gpOwogZXh0ZXJuIEJ1ZmZlciBfYnRfZ2V0X2VuZHBvaW50KFJlbGF0aW9u IHJlbCwgdWludDMyIGxldmVsLCBib29sIHJpZ2h0bW9zdCk7CiAKIC8qCiAgKiBwcm90b3R5cGVz IGZvciBmdW5jdGlvbnMgaW4gbmJ0dXRpbHMuYwogICovCiBleHRlcm4gQlRTY2FuSW5zZXJ0IF9i dF9ta3NjYW5rZXkoUmVsYXRpb24gcmVsLCBJbmRleFR1cGxlIGl0dXApOwotZXh0ZXJuIHZvaWQg X2J0X2tpbGxpdGVtcyhJbmRleFNjYW5EZXNjIHNjYW4pOwogZXh0ZXJuIEJUQ3ljbGVJZCBfYnRf dmFjdXVtX2N5Y2xlaWQoUmVsYXRpb24gcmVsKTsKIGV4dGVybiBCVEN5Y2xlSWQgX2J0X3N0YXJ0 X3ZhY3V1bShSZWxhdGlvbiByZWwpOwogZXh0ZXJuIHZvaWQgX2J0X2VuZF92YWN1dW0oUmVsYXRp b24gcmVsKTsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9yZWxzY2FuLmggYi9zcmMv aW5jbHVkZS9hY2Nlc3MvcmVsc2Nhbi5oCmluZGV4IDk4NmI0ZjVmMy4uMzQyMWM4M2MxIDEwMDY0 NAotLS0gYS9zcmMvaW5jbHVkZS9hY2Nlc3MvcmVsc2Nhbi5oCisrKyBiL3NyYy9pbmNsdWRlL2Fj Y2Vzcy9yZWxzY2FuLmgKQEAgLTEyNiw2ICsxMjYsMTIgQEAgdHlwZWRlZiBzdHJ1Y3QgUGFyYWxs ZWxCbG9ja1RhYmxlU2NhbldvcmtlckRhdGEgKlBhcmFsbGVsQmxvY2tUYWJsZVNjYW5Xb3JrZXI7 CiAgKi8KIHR5cGVkZWYgc3RydWN0IEluZGV4RmV0Y2hUYWJsZURhdGEKIHsKKwkvKiBUYWJsZSBB TSBwZXItYmF0Y2ggb3BhcXVlIGFyZWEgc2l6ZSAoTUFYQUxJR04nZCksIHNldCBieSBBTSAqLwor CXVpbnQxNgkJYmF0Y2hfb3BhcXVlX3NpemU7CisKKwkvKiBQZXItaXRlbSB0cmFpbGluZyBkYXRh IHNpemUgaW4gZWFjaCBiYXRjaCAqLworCXVpbnQxNgkJYmF0Y2hfcGVyX2l0ZW1fc2l6ZTsKKwog CS8qCiAJICogQml0bWFzayBvZiBTY2FuT3B0aW9ucyBhZmZlY3RpbmcgdGhlIHJlbGF0aW9uLiBO byBTT19JTlRFUk5BTF9GTEFHUyBhcmUKIAkgKiBwZXJtaXR0ZWQuCkBAIC0xMzMsMTMgKzEzOSwx ODQgQEAgdHlwZWRlZiBzdHJ1Y3QgSW5kZXhGZXRjaFRhYmxlRGF0YQogCXVpbnQzMgkJZmxhZ3M7 CiB9IEluZGV4RmV0Y2hUYWJsZURhdGE7CiAKKy8qCisgKiBMb2NhdGlvbiBvZiBhIEJhdGNoTWF0 Y2hpbmdJdGVtIHdpdGhpbiB0aGUgc2NhbidzIHJpbmcgYnVmZmVyCisgKi8KK3R5cGVkZWYgc3Ry dWN0IEJhdGNoUmluZ0l0ZW1Qb3MKK3sKKwkvKiBQb3NpdGlvbiByZWZlcmVuY2VzIGEgdmFsaWQg SW5kZXhTY2FuRGVzY0RhdGEuYmF0Y2hidWZbXSBlbnRyeT8gKi8KKwlib29sCQl2YWxpZDsKKwor CS8qIEluZGV4U2NhbkRlc2NEYXRhLmJhdGNoYnVmW10td2lzZSBpbmRleCB0byByZWxldmFudCBJ bmRleFNjYW5CYXRjaCAqLworCXVpbnQ4CQliYXRjaDsKKworCS8qIEluZGV4U2NhbkJhdGNoLml0 ZW1zW10td2lzZSBpbmRleCB0byByZWxldmFudCBCYXRjaE1hdGNoaW5nSXRlbSAqLworCWludAkJ CWl0ZW07CisKK30gQmF0Y2hSaW5nSXRlbVBvczsKKworLyoKKyAqIE1hdGNoaW5nIGl0ZW0gcmV0 dXJuZWQgYnkgYW1nZXRiYXRjaCAoaW4gcmV0dXJuZWQgSW5kZXhTY2FuQmF0Y2gpIGR1cmluZyBh bgorICogaW5kZXggc2Nhbi4gIFVzZWQgYnkgdGFibGUgQU0gdG8gbG9jYXRlIHJlbGV2YW50IG1h dGNoaW5nIHRhYmxlIHR1cGxlLgorICovCit0eXBlZGVmIHN0cnVjdCBCYXRjaE1hdGNoaW5nSXRl bQoreworCUl0ZW1Qb2ludGVyRGF0YSB0YWJsZVRpZDsJLyogVElEIG9mIHJlZmVyZW5jZWQgdGFi bGUgaXRlbSAqLworCU9mZnNldE51bWJlciBpbmRleE9mZnNldDsJLyogaW5kZXggaXRlbSdzIGxv Y2F0aW9uIHdpdGhpbiBwYWdlICovCisJTG9jYXRpb25JbmRleCB0dXBsZU9mZnNldDsJLyogaW5k ZXggdHVwbGUncyBjdXJyVHVwbGVzIG9mZnNldCwgaWYgYW55ICovCit9IEJhdGNoTWF0Y2hpbmdJ dGVtOworCisvKgorICogRGF0YSBhYm91dCBvbmUgYmF0Y2ggb2YgaXRlbXMgcmV0dXJuZWQgYnkg KGFuZCBwYXNzZWQgdG8pIGFtZ2V0YmF0Y2ggZHVyaW5nCisgKiBpbmRleCBzY2Fucy4KKyAqCisg KiBFYWNoIGJhdGNoIGFsbG9jYXRpb24gaGFzIHRoZSBmb2xsb3dpbmcgbWVtb3J5IGxheW91dDoK KyAqCisgKiAgIFt0YWJsZSBBTSBvcGFxdWUgYXJlYV0gICAgPC0gYWxsb2NhdGlvbiBiYXNlLCBh dCAtKGJhdGNoX3RhYmxlX29mZnNldCkKKyAqICAgW2luZGV4IEFNIG9wYXF1ZSBhcmVhXSAgICA8 LSBhdCAtKGJhdGNoX2luZGV4X29wYXF1ZV9zaXplKQorICogICBbSW5kZXhTY2FuQmF0Y2hEYXRh XSAgICAgIDwtIGJhdGNoIHBvaW50ZXIsIHJldHVybmVkIGJ5IGFtZ2V0YmF0Y2gKKyAqICAgW2l0 ZW1zW21heGl0ZW1zYmF0Y2hdXQorICogICBbdGFibGUgQU0gdHJhaWxpbmcgZGF0YV0gIDwtIHBl ci1pdGVtIGFyZWEgKGUuZy4sIGZvciB2aXNpYmlsaXR5IGluZm8pCisgKiAgIFtjdXJyVHVwbGVz IHdvcmtzcGFjZV0gICAgPC0gaW5kZXggQU0gc3RvcmVzIGluZGV4IHR1cGxlcyBoZXJlIGZvcgor ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4LW9ubHkgc2NhbnMgKGJhdGNo X3R1cGxlc193b3Jrc3BhY2UpCisgKgorICogYmF0Y2hfdGFibGVfb2Zmc2V0IGNvbWJpbmVzIGJv dGggQU0gb3BhcXVlIHNpemVzIGludG8gYSBzaW5nbGUgb2Zmc2V0IGZyb20KKyAqIHRoZSBiYXRj aCBwb2ludGVyIHRvIHRoZSB0cnVlIGFsbG9jYXRpb24gYmFzZS4gIFRoZSBpbmRleGJhdGNoLmMg dXRpbGl0aWVzCisgKiBwZnJlZSBhIGJhdGNoIGJ5IHBhc3NpbmcgcGZyZWUgYSBwb2ludGVyIHJl dHVybmVkIGJ5IGluZGV4X3NjYW5fYmF0Y2hfYmFzZS4KKyAqIFdlIHJlbHkgb24gdGhlIGFzc3Vt cHRpb24gdGhhdCBiYXRjaGVzIGhhdmUgYSBmaXhlZCBsYXlvdXQgZm9yIHRoZSBkdXJhdGlvbgor ICogb2YgYW4gaW5kZXggc2NhbiAoYmF0Y2hlcyBhcmUgY2FjaGVkIGZvciByZXVzZSB0byBhdm9p ZCBwYWxsb2MgY2h1cm4pLgorICoKKyAqIFRoZSB0YWJsZSBBTSBjYW4gb3ZlcmxheSBhIHNtYWxs IGZpeGVkLXNpemUgc3RydWN0IGF0IHRoZSBzdGFydCBvZiB0aGUKKyAqIGFsbG9jYXRlZCBzcGFj ZSwgd2hpY2ggaXQgYWNjZXNzZXMgdXNpbmcgYSBpbmRleF9zY2FuX2JhdGNoX2Jhc2Ugc2hpbQor ICogYWNjZXNzb3IgZnVuY3Rpb24uICBDb252ZW50aW9uIGZvciB0YWJsZSBBTXMgaXMgdG8gc3Rv cmUgYSBwb2ludGVyIHRvIGl0cworICogcGVyLWl0ZW0gYXJlYSBpbiB0aGlzIGZpeGVkLXNpemUg YXJlYSAoZS5nLiwgaGVhcGFtIHN0b3JlcyBhIHZpc0luZm8KKyAqIHBvaW50ZXIgaGVyZSksIGlu IGFkZGl0aW9uIHRvIG90aGVyIGluZm9ybWF0aW9uIHRyYWNrZWQgYXQgdGhlIGJhdGNoIGxldmVs LgorICoKKyAqIFRoZSBpbmRleCBBTSBvcGFxdWUgYXJlYSBpcyBhY2Nlc3NlZCB2aWEgYSBjdXN0 b20gYWNjZXNzb3IgdGhhdCB1c2VzIGEKKyAqIGZpeGVkIGNvbXBpbGUtdGltZSBjb25zdGFudCBv ZmZzZXQgZm9yIGVmZmljaWVuY3kgKGEgY29uc3RhbnQgdGhhdCBpcworICogdHJhY2tlZCBpbiB0 aGUgc2NhbiBkZXNjcmlwdG9yIGFzIGJhdGNoX2luZGV4X29wYXF1ZV9zaXplKS4KKyAqLwordHlw ZWRlZiBzdHJ1Y3QgSW5kZXhTY2FuQmF0Y2hEYXRhCit7CisJLyogSW5kZXggcGFnZSdzIExTTiwg b3B0aW9uYWxseSB1c2VkIGJ5IGFta2lsbGl0ZW1zYmF0Y2ggcm91dGluZXMgKi8KKwlYTG9nUmVj UHRyCWxzbjsKKworCS8qIHNjYW4gZGlyZWN0aW9uIHdoZW4gdGhlIGluZGV4IHBhZ2Ugd2FzIHJl YWQgKi8KKwlTY2FuRGlyZWN0aW9uIGRpcjsKKworCS8qCisJICoga25vd25FbmRCYWNrd2FyZCBh bmQga25vd25FbmRGb3J3YXJkIGluZGljYXRlIHRoYXQgdGhpcyBiYXRjaCBpcyB0aGUKKwkgKiBs YXN0IG9uZSB3aXRoIG1hdGNoaW5nIGl0ZW1zIGluIHRoZSByZWxldmFudCBzY2FuIGRpcmVjdGlv bi4gIFdoZW4KKwkgKiBhbWdldGJhdGNoIHJldHVybnMgTlVMTCBmb3IgYSBnaXZlbiBkaXJlY3Rp b24sIHRoZSBjb3JyZXNwb25kaW5nIGZsYWcKKwkgKiBpcyBzZXQgb24gdGhlIHByaW9yYmF0Y2gg dGhhdCB3YXMgcGFzc2VkIHRvIHRoYXQgY2FsbC4gIFdlIGNhbm5vdCBrbm93CisJICogdGhpcyB3 aGVuIGEgYmF0Y2ggaXMgZmlyc3QgcmV0dXJuZWQgYnkgYW1nZXRiYXRjaDsgaXQgb25seSBiZWNv bWVzCisJICogYXBwYXJlbnQgd2hlbiB3ZSB0cnkgYW5kIGZhaWwgdG8gY29udGludWUgdGhlIHNj YW4gcGFzdCBpdC4KKwkgKgorCSAqIFRoaXMgYWxsb3dzIHRhYmxlIEFNcyB0byBhdm9pZCByZWR1 bmRhbnQgYW1nZXRiYXRjaCBjYWxscyB3aXRoIHRoZSBzYW1lCisJICogcHJpb3JiYXRjaCAtLSB0 aGUgaW5kZXggQU0gbWlnaHQgbmVlZCB0byByZWFkIGFkZGl0aW9uYWwgaW5kZXggcGFnZXMgdG8K KwkgKiBkZXRlcm1pbmUgdGhlcmUgYXJlIG5vIG1vcmUgbWF0Y2hpbmcgaXRlbXMgYmV5b25kIGNh bGxlcidzIHByaW9yYmF0Y2guCisJICovCisJYm9vbAkJa25vd25FbmRCYWNrd2FyZDsKKwlib29s CQlrbm93bkVuZEZvcndhcmQ7CisKKwkvKgorCSAqIEJhdGNoIHN0aWxsIGhvbGRzIFRJRCByZWN5 Y2xpbmcgaW50ZXJsb2NrPworCSAqLworCWJvb2wJCWlzR3VhcmRlZDsKKworCS8qCisJICogTWF0 Y2hpbmcgaXRlbXMgc3RhdGUgZm9yIHRoaXMgYmF0Y2guICBPdXRwdXQgYnkgaW5kZXggQU0gZm9y IHRhYmxlIEFNLgorCSAqCisJICogVGhlIGl0ZW1zIGFycmF5IGlzIGFsd2F5cyBvcmRlcmVkIGlu IGluZGV4IG9yZGVyIChpZSwgYnkgaW5jcmVhc2luZworCSAqIGluZGV4b2Zmc2V0KS4gIFdoZW4g c2Nhbm5pbmcgYmFja3dhcmRzIGl0IGlzIGNvbnZlbmllbnQgZm9yIGluZGV4IEFNcworCSAqIHRv IGZpbGwgdGhlIGFycmF5IGJhY2stdG8tZnJvbnQsIHN0YXJ0aW5nIGF0IHRoZSBsYXN0IGl0ZW0g c2xvdCBhbmQKKwkgKiBmaWxsaW5nIGRvd253YXJkcy4gIFRoaXMgaXMgd2h5IHdlIG5lZWQgYm90 aCBhIGZpcnN0LXZhbGlkLWVudHJ5IGFuZCBhCisJICogbGFzdC12YWxpZC1lbnRyeSBjb3VudGVy LgorCSAqCisJICogTm90ZTogdGhlc2UgYXJlIHNpZ25lZCBiZWNhdXNlIGl0J3Mgc29tZXRpbWVz IGNvbnZlbmllbnQgdG8gdXNlIC0xIHRvCisJICogcmVwcmVzZW50IGFuIG91dC1vZi1ib3VuZHMg c3BhY2UganVzdCBiZWZvcmUgZmlyc3RJdGVtICh3aGVuIGl0J3MgMCkuCisJICovCisJaW50CQkJ Zmlyc3RJdGVtOwkJLyogZmlyc3QgdmFsaWQgaW5kZXggaW4gaXRlbXNbXSAqLworCWludAkJCWxh c3RJdGVtOwkJLyogbGFzdCB2YWxpZCBpbmRleCBpbiBpdGVtc1tdICovCisKKwkvKiBpbmZvIGFi b3V0IGRlYWQgaXRlbXMsIGlmIGFueSAocGFsbG9jJ2Qgc2VwYXJhdGVseSwgTlVMTCBpZiB1bnVz ZWQpICovCisJaW50CQkJbnVtRGVhZDsJCS8qIG51bWJlciBvZiBjdXJyZW50bHkgc3RvcmVkIGl0 ZW1zICovCisJaW50CQkgICAqZGVhZEl0ZW1zOwkJLyogaXRlbXNbXS13aXNlIGluZGV4ZXMgb2Yg ZGVhZCBpdGVtcyAqLworCisJLyoKKwkgKiBJZiB3ZSBhcmUgZG9pbmcgYW4gaW5kZXgtb25seSBz Y2FuLCB0aGlzIGlzIHRoZSB0dXBsZSBzdG9yYWdlIHdvcmtzcGFjZQorCSAqIGZvciB0aGUgbWF0 Y2hpbmcgdHVwbGVzICh0dXBsZXMgcmVmZXJlbmNlZCBieSBpdGVtc1tdKS4gIFRoZSB3b3Jrc3Bh Y2UKKwkgKiBzaXplIGlzIGRldGVybWluZWQgYnkgdGhlIGluZGV4IEFNIChiYXRjaF90dXBsZXNf d29ya3NwYWNlKS4KKwkgKgorCSAqIGN1cnJUdXBsZXMgcG9pbnRzIGludG8gdGhlIHRyYWlsaW5n IHBvcnRpb24gb2YgdGhpcyBhbGxvY2F0aW9uLCBwYXN0CisJICogaXRlbXNbXSBhbmQgYW55IHRh YmxlIEFNIHRyYWlsaW5nIGRhdGEuICBJdCBpcyBOVUxMIGZvciBwbGFpbiBpbmRleAorCSAqIHNj YW5zLgorCSAqLworCWNoYXIJICAgKmN1cnJUdXBsZXM7CQkvKiB0dXBsZSBzdG9yYWdlIGZvciBp dGVtc1tdICovCisJQmF0Y2hNYXRjaGluZ0l0ZW0gaXRlbXNbRkxFWElCTEVfQVJSQVlfTUVNQkVS XTsgLyogbWF0Y2hpbmcgaXRlbXMgKi8KK30gSW5kZXhTY2FuQmF0Y2hEYXRhOworCit0eXBlZGVm IHN0cnVjdCBJbmRleFNjYW5CYXRjaERhdGEgKkluZGV4U2NhbkJhdGNoOworCisvKgorICogU3Rh dGUgdXNlZCBieSB0YWJsZSBBTXMgdG8gbWFuYWdlIGFuIGluZGV4IHNjYW4gdGhhdCB1c2VzIHRo ZSBhbWdldGJhdGNoCisgKiBpbnRlcmZhY2UuICBTY2FucyB1c2UgYSByaW5nIGJ1ZmZlciBvZiBi YXRjaGVzIHJldHVybmVkIGJ5IGFtZ2V0YmF0Y2guCisgKgorICogVGhpcyBkYXRhIHN0cnVjdHVy ZSBwcm92aWRlcyB0YWJsZSBBTXMgd2l0aCBhIHdheSB0byByZWFkIGFoZWFkIG9mIHRoZQorICog Y3VycmVudCByZWFkIHBvc2l0aW9uIGJ5IF9tdWx0aXBsZV8gYmF0Y2hlcy9pbmRleCBwYWdlcy4g IFRoZSBmdXJ0aGVyIG91dAorICogdGhlIHRhYmxlIEFNIHJlYWRzIGFoZWFkIGxpa2UgdGhpcywg dGhlIGZ1cnRoZXIgaXQgY2FuIHNlZSBpbnRvIHRoZSBmdXR1cmUuCisgKiBUaGF0IHdheSB0aGUg dGFibGUgQU0gaXMgYWJsZSB0byByZW9yZGVyIHdvcmsgYXMgYWdncmVzc2l2ZWx5IGFzIGRlc2ly ZWQuCisgKi8KK3R5cGVkZWYgc3RydWN0IEJhdGNoUmluZ0J1ZmZlcgoreworCS8qIGN1cnJlbnQg cG9zaXRpb25zIGluIEluZGV4U2NhbkRlc2NEYXRhLmJhdGNoYnVmW10gZm9yIHNjYW4gKi8KKwlC YXRjaFJpbmdJdGVtUG9zIHNjYW5Qb3M7CS8qIHNjYW4ncyByZWFkIHBvc2l0aW9uICovCisJQmF0 Y2hSaW5nSXRlbVBvcyBtYXJrUG9zOwkvKiBtYXJrL3Jlc3RvcmUgcG9zaXRpb24gKi8KKworCS8q IG1hcmtQb3MncyBiYXRjaCAobm90IGluIHJpbmcgYnVmZmVyIHdoZW4gbWFya0JhdGNoICE9IHNj YW5CYXRjaCkgKi8KKwlJbmRleFNjYW5CYXRjaCBtYXJrQmF0Y2g7CisKKwkvKgorCSAqIGhlYWRC YXRjaCBpcyBhbiBpbmRleCB0byB0aGUgZWFybGllc3Qgc3RpbGwtdmFsaWQgcmluZyBidWZmZXIg YmF0Y2gKKwkgKiBzbG90IGluIGJhdGNoYnVmW10uICBUaGUgYWN0dWFsIGFycmF5IHBvc2l0aW9u IGZvciBpdHMgSW5kZXhTY2FuQmF0Y2gKKwkgKiBpcyBoZWFkQmF0Y2ggJiAoSU5ERVhfU0NBTl9N QVhfQkFUQ0hFUyAtIDEpLCBzaW5jZSB0aGVzZSBpbmRleGVzIHVzZQorCSAqIHVuc2lnbmVkIHdy YXBwaW5nIGFyaXRobWV0aWMuICBoZWFkQmF0Y2ggbXVzdCBiZSB0aGUgc2NhbidzIGN1cnJlbnQK KwkgKiBzY2FuQmF0Y2ggKGkuZS4gdGhlIGN1cnJlbnQgc2NhblBvcyBiYXRjaCkuCisJICovCisJ dWludDgJCWhlYWRCYXRjaDsKKworCS8qCisJICogbmV4dEJhdGNoIGlzIGFuIGluZGV4IHRvIHRo ZSBuZXh0IF9lbXB0eV8gcmluZyBidWZmZXIgYmF0Y2ggc2xvdCBpbgorCSAqIGJhdGNoYnVmW10u ICBBcyB3aXRoIGhlYWRCYXRjaCwgdGhlIGFjdHVhbCBiYXRjaGJ1ZltdIGFycmF5IHBvc2l0aW9u IGlzCisJICogbmV4dEJhdGNoICYgKElOREVYX1NDQU5fTUFYX0JBVENIRVMgLSAxKS4gIEEgbmV3 IGJhdGNoIGNhbiBvbmx5IGJlCisJICogYXBwZW5kZWQgdG8gdGhpcyBwb3NpdGlvbi9zbG90IHdo ZW4gIWluZGV4X3NjYW5fYmF0Y2hfZnVsbCgpLgorCSAqCisJICogTm90ZTogdGhlIHNjYW4ncyBt b3N0IHJlY2VudGx5IGFwcGVuZGVkIGJhdGNoIChpdHMgdGFpbCBiYXRjaCkgaXMKKwkgKiBhbHdh eXMgbG9jYXRlZCBhdCAobmV4dEJhdGNoIC0gMSkgJiAoSU5ERVhfU0NBTl9NQVhfQkFUQ0hFUyAt IDEpLgorCSAqLworCXVpbnQ4CQluZXh0QmF0Y2g7Cit9IEJhdGNoUmluZ0J1ZmZlcjsKKwogc3Ry dWN0IEluZGV4U2Nhbkluc3RydW1lbnRhdGlvbjsKIAogLyoKICAqIFdlIHVzZSB0aGUgc2FtZSBJ bmRleFNjYW5EZXNjRGF0YSBzdHJ1Y3R1cmUgZm9yIGJvdGggYW1nZXR0dXBsZS1iYXNlZAogICog YW5kIGFtZ2V0Yml0bWFwLWJhc2VkIGluZGV4IHNjYW5zLiAgU29tZSBmaWVsZHMgYXJlIG9ubHkg cmVsZXZhbnQgaW4KLSAqIGFtZ2V0dHVwbGUtYmFzZWQgc2NhbnMuCisgKiBhbWdldHR1cGxlLWJh c2VkIHNjYW5zLiAgT3RoZXJzIGFyZSBvbmx5IHVzZWQgaW4gYW1nZXRiYXRjaC1iYXNlZCBzY2Fu cy4KKyAqCisgKiBUaGUgcmluZyBidWZmZXIgdXNlZCBieSBhbWdldGJhdGNoIHNjYW5zIGlzIHN0 b3JlZCBoZXJlIGFzIGEgZml4ZWQgYXJyYXkgb2YKKyAqIHBvaW50ZXJzIHRvIGJhdGNoZXMuICBX ZSBuZWVkIGEgbWluaW11bSBvZiB0d28gcmluZyBidWZmZXIgYmF0Y2hlcyAoYnV0IHVzZQorICog SU5ERVhfU0NBTl9NQVhfQkFUQ0hFUyksIHNpbmNlIHRhYmxlIEFNcyBvbmx5IHJlbW92ZSBhIGJh dGNoIGFmdGVyIHRoZXkndmUKKyAqIGFscmVhZHkgY2FsbGVkIGFtZ2V0YmF0Y2ggYWdhaW4gYW5k IGFwcGVuZGVkIHRoZSByZXR1cm5lZCBiYXRjaC4KICAqLworI2RlZmluZSBJTkRFWF9TQ0FOX0NB Q0hFX0JBVENIRVMJMgorI2RlZmluZSBJTkRFWF9TQ0FOX01BWF9CQVRDSEVTCQk2NAorCitTdGF0 aWNBc3NlcnREZWNsKElOREVYX1NDQU5fTUFYX0JBVENIRVMgPD0gUEdfSU5UOF9NQVggKyAxLAor CQkJCSAiaW5kZXhfc2Nhbl9iYXRjaF9sb2FkZWQgcmVsaWVzIG9uIGludDggcmluZyBidWZmZXIg YXJpdGhtZXRpYyIpOworU3RhdGljQXNzZXJ0RGVjbCgoSU5ERVhfU0NBTl9NQVhfQkFUQ0hFUyAm IChJTkRFWF9TQ0FOX01BWF9CQVRDSEVTIC0gMSkpID09IDAsCisJCQkJICJJTkRFWF9TQ0FOX01B WF9CQVRDSEVTIG11c3QgYmUgYSBwb3dlciBvZiAyIik7CisKIHR5cGVkZWYgc3RydWN0IEluZGV4 U2NhbkRlc2NEYXRhCiB7CiAJLyogc2NhbiBwYXJhbWV0ZXJzICovCkBAIC0xNTAsNiArMzI3LDI2 IEBAIHR5cGVkZWYgc3RydWN0IEluZGV4U2NhbkRlc2NEYXRhCiAJaW50CQkJbnVtYmVyT2ZPcmRl ckJ5czsJLyogbnVtYmVyIG9mIG9yZGVyaW5nIG9wZXJhdG9ycyAqLwogCXN0cnVjdCBTY2FuS2V5 RGF0YSAqa2V5RGF0YTsJLyogYXJyYXkgb2YgaW5kZXggcXVhbGlmaWVyIGRlc2NyaXB0b3JzICov CiAJc3RydWN0IFNjYW5LZXlEYXRhICpvcmRlckJ5RGF0YTsJLyogYXJyYXkgb2Ygb3JkZXJpbmcg b3AgZGVzY3JpcHRvcnMgKi8KKworCS8qIGluZGV4IGFjY2VzcyBtZXRob2QncyBwcml2YXRlIHN0 YXRlICovCisJdm9pZAkgICAqb3BhcXVlOwkJCS8qIGFjY2Vzcy1tZXRob2Qtc3BlY2lmaWMgaW5m byAqLworCisJLyogc2NhbidzIGFtZ2V0YmF0Y2ggc3RhdGUgKG9ubHkgdXNlZCBieSBhbWdldGJh dGNoL3VzZWJhdGNocmluZyBzY2FucykgKi8KKwlCYXRjaFJpbmdCdWZmZXIgYmF0Y2hyaW5nYnVm OworCisJLyoKKwkgKiBBcnJheSBvZiBwb2ludGVycyB0byByZWN5Y2xhYmxlIGJhdGNoZXMsIHVz ZWQgYnkgYWxsIGFtZ2V0YmF0Y2ggc2NhbnMKKwkgKiBhbmQgYnkgYW1nZXRiaXRtYXAgc2NhbnMg b2YgYW4gaW5kZXggQU0gdGhhdCBzdXBwb3J0cyBhbWdldGJhdGNoCisJICovCisJSW5kZXhTY2Fu QmF0Y2ggYmF0Y2hjYWNoZVtJTkRFWF9TQ0FOX0NBQ0hFX0JBVENIRVNdOworCisJLyogQXJyYXkg b2YgcG9pbnRlcnMgdG8gYmF0Y2hlcywgcmVmZXJlbmNlZCB3aXRoaW4gYmF0Y2hyaW5nYnVmICov CisJSW5kZXhTY2FuQmF0Y2ggYmF0Y2hidWZbSU5ERVhfU0NBTl9NQVhfQkFUQ0hFU107CisKKwli b29sCQl1c2ViYXRjaHJpbmc7CS8qIHNjYW4gdXNlcyBhbWdldGJhdGNoL2JhdGNocmluZ2J1Zj8g Ki8KKwlib29sCQliYXRjaEltbWVkaWF0ZVVuZ3VhcmQ7CS8qIGVhZ2VybHkgZHJvcCBUSUQgcmVj eWNsaW5nCisJCQkJCQkJCQkJICogaW50ZXJsb2NrPyAqLworCiAJYm9vbAkJeHNfd2FudF9pdHVw OwkvKiBjYWxsZXIgcmVxdWVzdHMgaW5kZXggdHVwbGVzICovCiAJYm9vbAkJeHNfdGVtcF9zbmFw OwkvKiB1bnJlZ2lzdGVyIHNuYXBzaG90IGF0IHNjYW4gZW5kPyAqLwogCkBAIC0xNTgsOSArMzU1 LDggQEAgdHlwZWRlZiBzdHJ1Y3QgSW5kZXhTY2FuRGVzY0RhdGEKIAlib29sCQlpZ25vcmVfa2ls bGVkX3R1cGxlczsJLyogZG8gbm90IHJldHVybiBraWxsZWQgZW50cmllcyAqLwogCWJvb2wJCXhh Y3RTdGFydGVkSW5SZWNvdmVyeTsJLyogcHJldmVudHMga2lsbGluZy9zZWVpbmcga2lsbGVkCiAJ CQkJCQkJCQkJICogdHVwbGVzICovCi0KLQkvKiBpbmRleCBhY2Nlc3MgbWV0aG9kJ3MgcHJpdmF0 ZSBzdGF0ZSAqLwotCXZvaWQJICAgKm9wYXF1ZTsJCQkvKiBhY2Nlc3MtbWV0aG9kLXNwZWNpZmlj IGluZm8gKi8KKwkvKiB4c19zbmFwc2hvdCB1c2VzIGFuIE1WQ0Mgc25hcHNob3Q/ICovCisJYm9v bAkJTVZDQ1NjYW47CiAKIAkvKgogCSAqIEluc3RydW1lbnRhdGlvbiBjb3VudGVycyBtYWludGFp bmVkIGJ5IGFsbCBpbmRleCBBTXMgZHVyaW5nIGJvdGgKQEAgLTE4Niw3ICszODIsNyBAQCB0eXBl ZGVmIHN0cnVjdCBJbmRleFNjYW5EZXNjRGF0YQogCiAJLyoKIAkgKiBSZXNvbHZlZCB0YWJsZV9p bmRleF9nZXRuZXh0X3Nsb3QgY2FsbGJhY2ssIHdoaWNoIGlzIHNldCBieQotCSAqIHRhYmxlX2lu ZGV4X2ZldGNoX2JlZ2luIGF0IHRoZSBzdGFydCBvZiBhbWdldHR1cGxlIHNjYW5zCisJICogdGFi bGVfaW5kZXhfZmV0Y2hfYmVnaW4gYXQgdGhlIHN0YXJ0IG9mIGFtZ2V0YmF0Y2gvYW1nZXR0dXBs ZSBzY2FucwogCSAqLwogCWJvb2wJCSgqeHNfZ2V0bmV4dF9zbG90KSAoc3RydWN0IEluZGV4U2Nh bkRlc2NEYXRhICpzY2FuLAogCQkJCQkJCQkJU2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24sCkBAIC0x OTQsNiArMzkwLDE0IEBAIHR5cGVkZWYgc3RydWN0IEluZGV4U2NhbkRlc2NEYXRhCiAKIAlib29s CQl4c19yZWNoZWNrOwkJLyogVCBtZWFucyBzY2FuIGtleXMgbXVzdCBiZSByZWNoZWNrZWQgKi8K IAorCS8qIGJhdGNoIHNpemUgaW5mb3JtYXRpb24sIHNldCBvbmNlIGJ5IGluZGV4IEFNIGluIGFt YmVnaW5zY2FuICovCisJdWludDE2CQltYXhpdGVtc2JhdGNoOwkvKiBzaXplIG9mIGVhY2ggYmF0 Y2gncyBpdGVtc1tdIGFycmF5ICovCisJdWludDE2CQliYXRjaF9pbmRleF9vcGFxdWVfc2l6ZTsJ LyogTUFYQUxJR04nZCBpbmRleCBBTSBvcGFxdWUgc2l6ZSAqLworCXVpbnQxNgkJYmF0Y2hfdHVw bGVzX3dvcmtzcGFjZTsgLyogY3VyclR1cGxlcyB3b3Jrc3BhY2Ugc2l6ZSAqLworCisJLyogQ29t cHV0ZWQgb2Zmc2V0LCB1c2VkIHRvIGdldCB0YWJsZSBBTSdzIG9wYXF1ZSBhcmVhIGZyb20gYSBi YXRjaCAqLworCXVpbnQxNgkJYmF0Y2hfdGFibGVfb2Zmc2V0OworCiAJLyoKIAkgKiBXaGVuIGZl dGNoaW5nIHdpdGggYW4gb3JkZXJpbmcgb3BlcmF0b3IsIHRoZSB2YWx1ZXMgb2YgdGhlIE9SREVS IEJZCiAJICogZXhwcmVzc2lvbnMgb2YgdGhlIGxhc3QgcmV0dXJuZWQgdHVwbGUsIGFjY29yZGlu ZyB0byB0aGUgaW5kZXguICBJZgpAQCAtMjM3LDQgKzQ0MSwxMzUgQEAgdHlwZWRlZiBzdHJ1Y3Qg U3lzU2NhbkRlc2NEYXRhCiAJc3RydWN0IFR1cGxlVGFibGVTbG90ICpzbG90OwogfSBTeXNTY2Fu RGVzY0RhdGE7CiAKKy8qCisgKiBIb3cgbWFueSBiYXRjaGVzIGFyZSBjdXJyZW50bHkgbG9hZGVk IGluIHRoZSByaW5nIGJ1ZmZlcj8KKyAqLworc3RhdGljIGlubGluZSB1aW50OAoraW5kZXhfc2Nh bl9iYXRjaF9jb3VudChJbmRleFNjYW5EZXNjRGF0YSAqc2NhbikKK3sKKwlyZXR1cm4gKHVpbnQ4 KSAoc2Nhbi0+YmF0Y2hyaW5nYnVmLm5leHRCYXRjaCAtCisJCQkJCXNjYW4tPmJhdGNocmluZ2J1 Zi5oZWFkQmF0Y2gpOworfQorCisvKgorICogRG8gd2UgYWxyZWFkeSBoYXZlIGEgYmF0Y2ggbG9h ZGVkIGF0ICdpZHgnIG9mZnNldCBpbiBzY2FuJ3MgcmluZyBidWZmZXI/CisgKgorICogTk9URTog YSBzdGFsZSBiYXRjaCBpZHggY2FuIGFsaWFzIGEgY3VycmVudGx5LWxvYWRlZCByYW5nZSBkdWUg dG8KKyAqIHdyYXBhcm91bmQsIHByb2R1Y2luZyBhIGZhbHNlIHBvc2l0aXZlLiAgRmFsc2UgbmVn YXRpdmVzIGFyZSBub3QgcG9zc2libGUuCisgKi8KK3N0YXRpYyBpbmxpbmUgYm9vbAoraW5kZXhf c2Nhbl9iYXRjaF9sb2FkZWQoSW5kZXhTY2FuRGVzY0RhdGEgKnNjYW4sIHVpbnQ4IGlkeCkKK3sK KwlyZXR1cm4gKGludDgpIChpZHggLSBzY2FuLT5iYXRjaHJpbmdidWYuaGVhZEJhdGNoKSA+PSAw ICYmCisJCShpbnQ4KSAoaWR4IC0gc2Nhbi0+YmF0Y2hyaW5nYnVmLm5leHRCYXRjaCkgPCAwOwor fQorCisvKgorICogSGF2ZSB3ZSBsb2FkZWQgdGhlIG1heGltdW0gbnVtYmVyIG9mIGJhdGNoZXM/ CisgKi8KK3N0YXRpYyBpbmxpbmUgYm9vbAoraW5kZXhfc2Nhbl9iYXRjaF9mdWxsKEluZGV4U2Nh bkRlc2NEYXRhICpzY2FuKQoreworCXJldHVybiBpbmRleF9zY2FuX2JhdGNoX2NvdW50KHNjYW4p ID09IElOREVYX1NDQU5fTUFYX0JBVENIRVM7Cit9CisKKy8qCisgKiBSZXR1cm4gYmF0Y2ggZm9y IHRoZSBwcm92aWRlZCBpbmRleC4KKyAqLworc3RhdGljIGlubGluZSBJbmRleFNjYW5CYXRjaAor aW5kZXhfc2Nhbl9iYXRjaChJbmRleFNjYW5EZXNjRGF0YSAqc2NhbiwgdWludDggaWR4KQorewor CUFzc2VydChpbmRleF9zY2FuX2JhdGNoX2xvYWRlZChzY2FuLCBpZHgpKTsKKworCXJldHVybiBz Y2FuLT5iYXRjaGJ1ZltpZHggJiAoSU5ERVhfU0NBTl9NQVhfQkFUQ0hFUyAtIDEpXTsKK30KKwor LyoKKyAqIEFwcGVuZCBnaXZlbiBiYXRjaCB0byBzY2FuJ3MgYmF0Y2ggcmluZyBidWZmZXIuCisg Ki8KK3N0YXRpYyBpbmxpbmUgdm9pZAoraW5kZXhfc2Nhbl9iYXRjaF9hcHBlbmQoSW5kZXhTY2Fu RGVzY0RhdGEgKnNjYW4sIEluZGV4U2NhbkJhdGNoIGJhdGNoKQoreworCUJhdGNoUmluZ0J1ZmZl ciAqcmluZ2J1ZiA9ICZzY2FuLT5iYXRjaHJpbmdidWY7CisJdWludDgJCW5leHRCYXRjaCA9IHJp bmdidWYtPm5leHRCYXRjaDsKKworCUFzc2VydCghaW5kZXhfc2Nhbl9iYXRjaF9mdWxsKHNjYW4p KTsKKworCXNjYW4tPmJhdGNoYnVmW25leHRCYXRjaCAmIChJTkRFWF9TQ0FOX01BWF9CQVRDSEVT IC0gMSldID0gYmF0Y2g7CisJcmluZ2J1Zi0+bmV4dEJhdGNoKys7Cit9CisKKy8qCisgKiBSZXR1 cm4gdGhlIHRydWUgYWxsb2NhdGlvbiBiYXNlIG9mIGEgYmF0Y2ggKHVzZWQgdG8gcGZyZWUgYmF0 Y2hlcykKKyAqLworc3RhdGljIGlubGluZSB2b2lkICoKK2luZGV4X3NjYW5fYmF0Y2hfYmFzZShJ bmRleFNjYW5EZXNjRGF0YSAqc2NhbiwgSW5kZXhTY2FuQmF0Y2ggYmF0Y2gpCit7CisJcmV0dXJu IChjaGFyICopIGJhdGNoIC0gc2Nhbi0+YmF0Y2hfdGFibGVfb2Zmc2V0OworfQorCisvKgorICog QWR2YW5jZSBwb3NpdGlvbiB0byBpdHMgbmV4dCBpdGVtIGluIHRoZSBiYXRjaC4KKyAqCisgKiBB ZHZhbmNlIHRvIHRoZSBuZXh0IGl0ZW0gd2l0aGluIHRoZSBwcm92aWRlZCBiYXRjaCAob3IgdG8g dGhlIHByZXZpb3VzIGl0ZW0sCisgKiB3aGVuIHNjYW5uaW5nIGJhY2t3YXJkcykuCisgKgorICog UmV0dXJucyB0cnVlIGlmIHRoZSBwb3NpdGlvbiBjb3VsZCBiZSBhZHZhbmNlZC4gIFJldHVybnMg ZmFsc2Ugd2hlbiB0aGVyZQorICogYXJlIG5vIG1vcmUgaXRlbXMgZnJvbSB0aGUgYmF0Y2ggcmVt YWluaW5nIGluIHRoZSBnaXZlbiBzY2FuIGRpcmVjdGlvbi4KKyAqLworc3RhdGljIGlubGluZSBi b29sCitpbmRleF9zY2FuX3Bvc19hZHZhbmNlKFNjYW5EaXJlY3Rpb24gZGlyZWN0aW9uLAorCQkJ CQkgICBJbmRleFNjYW5CYXRjaCBiYXRjaCwgQmF0Y2hSaW5nSXRlbVBvcyAqcG9zKQoreworCUFz c2VydChwb3MtPnZhbGlkKTsKKworCWlmIChTY2FuRGlyZWN0aW9uSXNGb3J3YXJkKGRpcmVjdGlv bikpCisJeworCQlpZiAoKytwb3MtPml0ZW0gPiBiYXRjaC0+bGFzdEl0ZW0pCisJCQlyZXR1cm4g ZmFsc2U7CisJfQorCWVsc2UJCQkJCQkvKiBTY2FuRGlyZWN0aW9uSXNCYWNrd2FyZCAqLworCXsK KwkJaWYgKC0tcG9zLT5pdGVtIDwgYmF0Y2gtPmZpcnN0SXRlbSkKKwkJCXJldHVybiBmYWxzZTsK Kwl9CisKKwkvKiBBZHZhbmNlZCB3aXRoaW4gYmF0Y2ggKi8KKwlyZXR1cm4gdHJ1ZTsKK30KKwor LyoKKyAqIEFkdmFuY2UgYmF0Y2ggcG9zaXRpb24gdG8gdGhlIHN0YXJ0IG9mIGl0cyBuZXcgYmF0 Y2guCisgKgorICogV2hlbiB3ZSdyZSBjYWxsZWQsIHRoaXMgcG9zaXRpb24gc2hvdWxkIHBvaW50 IHRvIGEgYmF0Y2ggdGhhdCBjYWxsZXIganVzdAorICogZmluaXNoZWQgY29uc3VtaW5nIGZyb20u ICBXaGVuIHdlIHJldHVybiwgdGhpcyBwb3NpdGlvbiB3aWxsIHBvaW50IHRvCisgKiBuZXh0QmF0 Y2gsIHRoZSBuZXh0IGJhdGNoIGZyb20gdGhlIHJpbmcgYnVmZmVyLiAgV2UnbGwgaGF2ZSBhbHNv IHNldCB0aGUKKyAqIHBvc2l0aW9uJ3MgaXRlbSBvZmZzZXQgdG8gbmV4dEJhdGNoJ3MgZmlyc3Qg aXRlbSBpbiB0aGUgZ2l2ZW4gZGlyZWN0aW9uCisgKiAod2hpY2ggaXMgYWN0dWFsbHkgbmV4dEJh dGNoJ3MgX2xhc3RfIGl0ZW0gd2hlbiBzY2FubmluZyBiYWNrd2FyZHMpLgorICoKKyAqIG5leHRC YXRjaCBkb2Vzbid0IGhhdmUgdG8gYmUgKGFuZCBvZnRlbiBpc24ndCkgdGhlIG1vc3QgcmVjZW50 bHkgYXBwZW5kZWQKKyAqIGJhdGNoIGluIHRoZSBzY2FuJ3MgcmluZyBidWZmZXIuICBJdCBpcyBt ZXJlbHkgdGhlIG5leHQgYmF0Y2ggaW4gbGluZSB0byBiZQorICogY29uc3VtZWQgZnJvbSB0aGUg cG9pbnQgb2YgdmlldyBvZiBvdXIgY2FsbGVyLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQKK2lu ZGV4X3NjYW5fcG9zX25leHRiYXRjaChTY2FuRGlyZWN0aW9uIGRpcmVjdGlvbiwKKwkJCQkJCSBJ bmRleFNjYW5CYXRjaCBuZXh0QmF0Y2gsIEJhdGNoUmluZ0l0ZW1Qb3MgKnBvcykKK3sKKwlBc3Nl cnQobmV4dEJhdGNoLT5kaXIgPT0gZGlyZWN0aW9uKTsKKwlBc3NlcnQobmV4dEJhdGNoLT5maXJz dEl0ZW0gPD0gbmV4dEJhdGNoLT5sYXN0SXRlbSk7CisKKwkvKiBJbmNyZW1lbnQgYmF0Y2ggKG1p Z2h0IHdyYXApLCBvciBpbml0aWFsaXplIGl0IHRvIHplcm8gKi8KKwlpZiAocG9zLT52YWxpZCkK KwkJcG9zLT5iYXRjaCsrOworCWVsc2UKKwkJcG9zLT5iYXRjaCA9IDA7CisKKwlwb3MtPnZhbGlk ID0gdHJ1ZTsKKworCWlmIChTY2FuRGlyZWN0aW9uSXNGb3J3YXJkKGRpcmVjdGlvbikpCisJCXBv cy0+aXRlbSA9IG5leHRCYXRjaC0+Zmlyc3RJdGVtOworCWVsc2UKKwkJcG9zLT5pdGVtID0gbmV4 dEJhdGNoLT5sYXN0SXRlbTsKK30KKwogI2VuZGlmCQkJCQkJCS8qIFJFTFNDQU5fSCAqLwpkaWZm IC0tZ2l0IGEvc3JjL2luY2x1ZGUvYWNjZXNzL3RhYmxlYW0uaCBiL3NyYy9pbmNsdWRlL2FjY2Vz cy90YWJsZWFtLmgKaW5kZXggNjIwMTZmZDBiLi4yZTIzYTJlYjUgMTAwNjQ0Ci0tLSBhL3NyYy9p bmNsdWRlL2FjY2Vzcy90YWJsZWFtLmgKKysrIGIvc3JjL2luY2x1ZGUvYWNjZXNzL3RhYmxlYW0u aApAQCAtNDUyLDEwICs0NTIsMTEgQEAgdHlwZWRlZiBzdHJ1Y3QgVGFibGVBbVJvdXRpbmUKIAkg KiBmbGFncyBpcyBhIGJpdG1hc2sgb2YgU2Nhbk9wdGlvbnMgYWZmZWN0aW5nIHVuZGVybHlpbmcg dGFibGUgc2NhbgogCSAqIGJlaGF2aW9yLiBTZWUgc2Nhbl9iZWdpbigpIGZvciBtb3JlIGluZm9y bWF0aW9uIG9uIHBhc3NpbmcgdGhlc2UuCiAJICoKLQkgKiBDYWxsYmFjayBpcyByZXNwb25zaWJs ZSBmb3Igc2V0dGluZyBJbmRleFNjYW5EZXNjLnhzX2dldG5leHRfc2xvdCB0bwotCSAqIHRoZSBh cHByb3ByaWF0ZSBzbG90LWJhc2VkIGNhbGxiYWNrLiAgVHVwbGVzIGNhbiB0aGVuIGJlIGZldGNo ZWQgdmlhCi0JICogdGFibGVfaW5kZXhfZ2V0bmV4dF9zbG90KCkuICBObyBzZXBhcmF0ZSBzbG90 LWJhc2VkIGNhbGxiYWNrIGV4aXN0cyBpbgotCSAqIHRoaXMgc3RydWN0IQorCSAqIENhbGxiYWNr IGlzIHJlc3BvbnNpYmxlIGZvciBpbml0aWFsaXppbmcgdGhlIHNjYW4ncyBiYXRjaCByaW5nIGJ1 ZmZlcgorCSAqICh3aGVuIHRoZSBzY2FuJ3MgaW5kZXggQU0gc3VwcG9ydHMgdGhlIGFtZ2V0YmF0 Y2ggaW50ZXJmYWNlKSwgYW5kIGZvcgorCSAqIHNldHRpbmcgSW5kZXhTY2FuRGVzYy54c19nZXRu ZXh0X3Nsb3QgdG8gdGhlIGFwcHJvcHJpYXRlIHNsb3QtYmFzZWQKKwkgKiBjYWxsYmFjay4gIFR1 cGxlcyBjYW4gdGhlbiBiZSBmZXRjaGVkIHZpYSB0YWJsZV9pbmRleF9nZXRuZXh0X3Nsb3QoKS4K KwkgKiBObyBzZXBhcmF0ZSBzbG90LWJhc2VkIGNhbGxiYWNrIGV4aXN0cyBpbiB0aGlzIHN0cnVj dCEKIAkgKgogCSAqIEluIHByaW5jaXBsZSBhIHNpbmdsZSBnZW5lcmFsLXB1cnBvc2UgY2FsbGJh Y2sgKHN0b3JlZCBoZXJlKSB3b3VsZAogCSAqIHN1ZmZpY2UsIGJ1dCB1c2luZyBzcGVjaWFsaXpl ZCB2YXJpYW50cyBhbGxvd3MgdGhlIHRhYmxlIEFNIHRvIHByb3ZpZGUKQEAgLTQ2NywxMCArNDY4 LDMxIEBAIHR5cGVkZWYgc3RydWN0IFRhYmxlQW1Sb3V0aW5lCiAJICogY29sdW1ucyBkbyBub3Qg Y2hhbmdlLCBuZWVkIHRvIHJldHVybiB0aGUgY3VycmVudC9jb3JyZWN0IHZlcnNpb24gb2YKIAkg KiB0aGUgdHVwbGUgdGhhdCBpcyB2aXNpYmxlIHRvIHRoZSBzbmFwc2hvdCwgZXZlbiBpZiB0aGUg dGlkIHBvaW50cyB0byBhbgogCSAqIG9sZGVyIHZlcnNpb24gb2YgdGhlIHR1cGxlLgorCSAqCisJ ICogQ2FsbGJhY2sgYWxzbyBpbml0aWFsaXplcyB0aGUgYmF0Y2hfb3BhcXVlX3NpemUgYW5kIGJh dGNoX3Blcl9pdGVtX3NpemUKKwkgKiBmaWVsZHMgaW4gdGhlIHJldHVybmVkIHN0cnVjdCwgdG8g bGV0IHRoZSBjb3JlIGNvZGUga25vdyBob3cgbXVjaAorCSAqIG1lbW9yeSB3aWxsIGJlIHJlcXVp cmVkIGluIHRoZSBvcGFxdWUgdGFibGUgQU0gcG9ydGlvbnMgb2YgZWFjaCBiYXRjaAorCSAqIGFs bG9jYXRpb24gKGR1cmluZyBhbWdldGJhdGNoIGluZGV4IHNjYW5zKS4gIFRhYmxlIEFNcyBjYW4g c3RvcmUgdGhpbmdzCisJICogbGlrZSBwZXItaXRlbSB2aXNpYmlsaXR5IGluZm9ybWF0aW9uIGlu IGVhY2ggYWxsb2NhdGVkIGJhdGNoLiAgU2VlCisJICogcmVsc2Nhbi5oIGZvciBkZXRhaWxzLgog CSAqLwogCXN0cnVjdCBJbmRleEZldGNoVGFibGVEYXRhICooKmluZGV4X2ZldGNoX2JlZ2luKSAo SW5kZXhTY2FuRGVzYyBzY2FuLAogCQkJCQkJCQkJCQkJCSAgdWludDMyIGZsYWdzKTsKIAorCS8q CisJICogSW5pdGlhbGl6ZSB0YWJsZSBBTSdzIHBlci1iYXRjaCBvcGFxdWUgYXJlYSB3aXRoaW4g YSBiYXRjaCBhbGxvY2F0aW9uLgorCSAqCisJICogQ2FsbGVkIGJ5IGluZGV4YW1fdXRpbF9iYXRj aF9hbGxvYyBmb3IgZWFjaCBuZXcgb3IgcmVjeWNsZWQgYmF0Y2guCisJICogVGFibGUgQU1zIHNo b3VsZCBzZXQgdXAgaXRzIG9wYXF1ZSBhcmVhIChhdCBhIG5lZ2F0aXZlIG9mZnNldCBmcm9tIHRo ZQorCSAqIGJhdGNoIHBvaW50ZXIpIGFuZCBhbnkgdHJhaWxpbmcgcGVyLWl0ZW0gZGF0YSAoZS5n LiB2aXNpYmlsaXR5IGZsYWdzKS4KKwkgKgorCSAqICduZXdfYWxsb2MnIGlzIHRydWUgZm9yIGZy ZXNobHkgcGFsbG9jJ2QgYmF0Y2hlcywgZmFsc2UgZm9yIGJhdGNoZXMKKwkgKiByZWN5Y2xlZCBm cm9tIHRoZSBjYWNoZS4KKwkgKi8KKwl2b2lkCQkoKmluZGV4X2ZldGNoX2JhdGNoX2luaXQpIChJ bmRleFNjYW5EZXNjIHNjYW4sCisJCQkJCQkJCQkJICAgSW5kZXhTY2FuQmF0Y2ggYmF0Y2gsCisJ CQkJCQkJCQkJICAgYm9vbCBuZXdfYWxsb2MpOworCiAJLyoKIAkgKiBSZXNldCBpbmRleCBzY2Fu IGZvciBhIHJlc2Nhbi4gIFJlc2V0cyB0YWJsZS1vd25lZCByZXNvdXJjZXMuCiAJICovCkBAIC00 ODEsNiArNTAzLDE2IEBAIHR5cGVkZWYgc3RydWN0IFRhYmxlQW1Sb3V0aW5lCiAJICovCiAJdm9p ZAkJKCppbmRleF9mZXRjaF9lbmQpIChJbmRleFNjYW5EZXNjIHNjYW4pOwogCisJLyoKKwkgKiBN YXJrIHRoZSBjdXJyZW50IHNjYW4gcG9zaXRpb24gc28gaXQgY2FuIGJlIHJlc3RvcmVkIGxhdGVy CisJICovCisJdm9pZAkJKCppbmRleF9mZXRjaF9tYXJrcG9zKSAoSW5kZXhTY2FuRGVzYyBzY2Fu KTsKKworCS8qCisJICogUmVzdG9yZSBhIHByZXZpb3VzbHkgbWFya2VkIHNjYW4gcG9zaXRpb24K KwkgKi8KKwl2b2lkCQkoKmluZGV4X2ZldGNoX3Jlc3RycG9zKSAoSW5kZXhTY2FuRGVzYyBzY2Fu KTsKKwogCS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCSAqIENhbGxiYWNrcyBmb3Igbm9uLW1vZGlmeWlu ZyBvcGVyYXRpb25zIG9uIGluZGl2aWR1YWwgdHVwbGVzCiAJICogLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBA IC0xMjczLDYgKzEzMDUsMjggQEAgdGFibGVfaW5kZXhfZmV0Y2hfcmVzZXQoSW5kZXhTY2FuRGVz YyBzY2FuKQogCXNjYW4tPmhlYXBSZWxhdGlvbi0+cmRfdGFibGVhbS0+aW5kZXhfZmV0Y2hfcmVz ZXQoc2Nhbik7CiB9CiAKKy8qCisgKiBNYXJrIHRoZSBjdXJyZW50IHNjYW4gcG9zaXRpb24gc28g aXQgY2FuIGJlIHJlc3RvcmVkIGxhdGVyCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZAordGFibGVf aW5kZXhfZmV0Y2hfbWFya3BvcyhJbmRleFNjYW5EZXNjIHNjYW4pCit7CisJQXNzZXJ0KHNjYW4t PnhzX2hlYXBmZXRjaCk7CisKKwlzY2FuLT5oZWFwUmVsYXRpb24tPnJkX3RhYmxlYW0tPmluZGV4 X2ZldGNoX21hcmtwb3Moc2Nhbik7Cit9CisKKy8qCisgKiBSZXN0b3JlIGEgcHJldmlvdXNseSBt YXJrZWQgc2NhbiBwb3NpdGlvbgorICovCitzdGF0aWMgaW5saW5lIHZvaWQKK3RhYmxlX2luZGV4 X2ZldGNoX3Jlc3RycG9zKEluZGV4U2NhbkRlc2Mgc2NhbikKK3sKKwlBc3NlcnQoc2Nhbi0+eHNf aGVhcGZldGNoKTsKKworCXNjYW4tPmhlYXBSZWxhdGlvbi0+cmRfdGFibGVhbS0+aW5kZXhfZmV0 Y2hfcmVzdHJwb3Moc2Nhbik7Cit9CisKIC8qCiAgKiBSZWxlYXNlIHJlc291cmNlcyBhbmQgZGVh bGxvY2F0ZSB0aGUgSW5kZXhGZXRjaFRhYmxlRGF0YSBpbiB0aGUgc2Nhbi4KICAqLwpAQCAtMTI4 NCw2ICsxMzM4LDIxIEBAIHRhYmxlX2luZGV4X2ZldGNoX2VuZChJbmRleFNjYW5EZXNjIHNjYW4p CiAJc2Nhbi0+aGVhcFJlbGF0aW9uLT5yZF90YWJsZWFtLT5pbmRleF9mZXRjaF9lbmQoc2Nhbik7 CiB9CiAKKy8qCisgKiBJbml0aWFsaXplIHRhYmxlIEFNJ3MgcGVyLWJhdGNoIG9wYXF1ZSBhcmVh IHdpdGhpbiBhIGJhdGNoIGFsbG9jYXRpb24uCisgKgorICogQ2FsbGVkIGJ5IGluZGV4YW1fdXRp bF9iYXRjaF9hbGxvYyBmb3IgZWFjaCBuZXcgb3IgcmVjeWNsZWQgYmF0Y2guCisgKi8KK3N0YXRp YyBpbmxpbmUgdm9pZAordGFibGVfaW5kZXhfZmV0Y2hfYmF0Y2hfaW5pdChJbmRleFNjYW5EZXNj IHNjYW4sIEluZGV4U2NhbkJhdGNoIGJhdGNoLAorCQkJCQkJCSBib29sIG5ld19hbGxvYykKK3sK KwlBc3NlcnQoc2Nhbi0+eHNfaGVhcGZldGNoKTsKKworCXNjYW4tPmhlYXBSZWxhdGlvbi0+cmRf dGFibGVhbS0+aW5kZXhfZmV0Y2hfYmF0Y2hfaW5pdChzY2FuLCBiYXRjaCwKKwkJCQkJCQkJCQkJ CQkJICAgbmV3X2FsbG9jKTsKK30KKwogLyoKICAqIEZldGNoIHRoZSBuZXh0IHR1cGxlIGZyb20g YW4gaW5kZXggc2NhbiBpbnRvIGBzbG90YCwgc2Nhbm5pbmcgaW4gdGhlCiAgKiBzcGVjaWZpZWQg ZGlyZWN0aW9uLiAgUmV0dXJucyB0cnVlIGlmIGEgdHVwbGUgc2F0aXNmeWluZyB0aGUgc2NhbiBr ZXlzIGFuZApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvbm9kZXMvcGF0aG5vZGVzLmggYi9zcmMv aW5jbHVkZS9ub2Rlcy9wYXRobm9kZXMuaAppbmRleCA2OTNiODc5ZjcuLjg1OTkxZDQ0NyAxMDA2 NDQKLS0tIGEvc3JjL2luY2x1ZGUvbm9kZXMvcGF0aG5vZGVzLmgKKysrIGIvc3JjL2luY2x1ZGUv bm9kZXMvcGF0aG5vZGVzLmgKQEAgLTE0MzcsMTIgKzE0MzcsMTIgQEAgdHlwZWRlZiBzdHJ1Y3Qg SW5kZXhPcHRJbmZvCiAJYm9vbAkJYW1vcHRpb25hbGtleTsKIAlib29sCQlhbXNlYXJjaGFycmF5 OwogCWJvb2wJCWFtc2VhcmNobnVsbHM7Ci0JLyogZG9lcyBBTSBoYXZlIGFtZ2V0dHVwbGUgaW50 ZXJmYWNlPyAqLwotCWJvb2wJCWFtaGFzZ2V0dHVwbGU7CisJLyogZG9lcyBBTSBoYXZlIGFtZ2V0 YmF0Y2ggKG9yIGdldHR1cGxlKSBpbnRlcmZhY2U/ICovCisJYm9vbAkJYW1jYW5wbGFpbnNjYW47 CiAJLyogZG9lcyBBTSBoYXZlIGFtZ2V0Yml0bWFwIGludGVyZmFjZT8gKi8KIAlib29sCQlhbWhh c2dldGJpdG1hcDsKIAlib29sCQlhbWNhbnBhcmFsbGVsOwotCS8qIGRvZXMgQU0gaGF2ZSBhbW1h cmtwb3MgaW50ZXJmYWNlPyAqLworCS8qIGlzIEFNIHByZXBhcmVkIGZvciB1cyB0byByZXN0b3Jl IGEgbWFyaz8gKi8KIAlib29sCQlhbWNhbm1hcmtwb3M7CiAJLyogQU0ncyBjb3N0IGVzdGltYXRv ciAqLwogCS8qIFJhdGhlciB0aGFuIGluY2x1ZGUgYW1hcGkuaCBoZXJlLCB3ZSBkZWNsYXJlIGFt Y29zdGVzdGltYXRlIGxpa2UgdGhpcyAqLwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNz L2JyaW4vYnJpbi5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2JyaW4vYnJpbi5jCmluZGV4IGJkYjMw NzUyZS4uOWY0NGNmMzFlIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvYnJpbi9icmlu LmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2JyaW4vYnJpbi5jCkBAIC0yOTgsMTAgKzI5OCwx MiBAQCBicmluaGFuZGxlcihQR19GVU5DVElPTl9BUkdTKQogCQkuYW1iZWdpbnNjYW4gPSBicmlu YmVnaW5zY2FuLAogCQkuYW1yZXNjYW4gPSBicmlucmVzY2FuLAogCQkuYW1nZXR0dXBsZSA9IE5V TEwsCisJCS5hbWdldGJhdGNoID0gTlVMTCwKKwkJLmFtdW5ndWFyZGJhdGNoID0gTlVMTCwKKwkJ LmFta2lsbGl0ZW1zYmF0Y2ggPSBOVUxMLAogCQkuYW1nZXRiaXRtYXAgPSBicmluZ2V0Yml0bWFw LAogCQkuYW1lbmRzY2FuID0gYnJpbmVuZHNjYW4sCi0JCS5hbW1hcmtwb3MgPSBOVUxMLAotCQku YW1yZXN0cnBvcyA9IE5VTEwsCisJCS5hbXBvc3Jlc2V0ID0gTlVMTCwKIAkJLmFtZXN0aW1hdGVw YXJhbGxlbHNjYW4gPSBOVUxMLAogCQkuYW1pbml0cGFyYWxsZWxzY2FuID0gTlVMTCwKIAkJLmFt cGFyYWxsZWxyZXNjYW4gPSBOVUxMLApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2dp bi9naW5nZXQuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9naW4vZ2luZ2V0LmMKaW5kZXggNmIxNDhl NjlhLi44ZjcwMzNkNjIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9naW4vZ2luZ2V0 LmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2dpbi9naW5nZXQuYwpAQCAtMTk1Myw5ICsxOTUz LDkgQEAgZ2luZ2V0Yml0bWFwKEluZGV4U2NhbkRlc2Mgc2NhbiwgVElEQml0bWFwICp0Ym0pCiAJ ICogaW50byB0aGUgbWFpbiBpbmRleCwgYW5kIHNvIHdlIG1pZ2h0IHZpc2l0IGl0IGEgc2Vjb25k IHRpbWUgZHVyaW5nIHRoZQogCSAqIG1haW4gc2Nhbi4gIFRoaXMgaXMgb2theSBiZWNhdXNlIHdl J2xsIGp1c3QgcmUtc2V0IHRoZSBzYW1lIGJpdCBpbiB0aGUKIAkgKiBiaXRtYXAuICAoVGhlIHBv c3NpYmlsaXR5IG9mIGR1cGxpY2F0ZSB2aXNpdHMgaXMgYSBtYWpvciByZWFzb24gd2h5IEdJTgot CSAqIGNhbid0IHN1cHBvcnQgdGhlIGFtZ2V0dHVwbGUgQVBJLCBob3dldmVyLikgTm90ZSB0aGF0 IGl0IHdvdWxkIG5vdCBkbwotCSAqIHRvIHNjYW4gdGhlIG1haW4gaW5kZXggYmVmb3JlIHRoZSBw ZW5kaW5nIGxpc3QsIHNpbmNlIGNvbmN1cnJlbnQKLQkgKiBjbGVhbnVwIGNvdWxkIHRoZW4gbWFr ZSB1cyBtaXNzIGVudHJpZXMgZW50aXJlbHkuCisJICogY2FuJ3Qgc3VwcG9ydCBlaXRoZXIgdGhl IGFtZ2V0dHVwbGUgb3IgYW1nZXRiYXRjaCBBUEkuKSBOb3RlIHRoYXQgaXQKKwkgKiB3b3VsZCBu b3QgZG8gdG8gc2NhbiB0aGUgbWFpbiBpbmRleCBiZWZvcmUgdGhlIHBlbmRpbmcgbGlzdCwgc2lu Y2UKKwkgKiBjb25jdXJyZW50IGNsZWFudXAgY291bGQgdGhlbiBtYWtlIHVzIG1pc3MgZW50cmll cyBlbnRpcmVseS4KIAkgKi8KIAlzY2FuUGVuZGluZ0luc2VydChzY2FuLCB0Ym0sICZudGlkcyk7 CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9naW4vZ2ludXRpbC5jIGIvc3JjL2Jh Y2tlbmQvYWNjZXNzL2dpbi9naW51dGlsLmMKaW5kZXggZmU3Yjk4NGZmLi4zMjQyMjg2NWIgMTAw NjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9naW4vZ2ludXRpbC5jCisrKyBiL3NyYy9iYWNr ZW5kL2FjY2Vzcy9naW4vZ2ludXRpbC5jCkBAIC04MiwxMCArODIsMTIgQEAgZ2luaGFuZGxlcihQ R19GVU5DVElPTl9BUkdTKQogCQkuYW1iZWdpbnNjYW4gPSBnaW5iZWdpbnNjYW4sCiAJCS5hbXJl c2NhbiA9IGdpbnJlc2NhbiwKIAkJLmFtZ2V0dHVwbGUgPSBOVUxMLAorCQkuYW1nZXRiYXRjaCA9 IE5VTEwsCisJCS5hbXVuZ3VhcmRiYXRjaCA9IE5VTEwsCisJCS5hbWtpbGxpdGVtc2JhdGNoID0g TlVMTCwKIAkJLmFtZ2V0Yml0bWFwID0gZ2luZ2V0Yml0bWFwLAogCQkuYW1lbmRzY2FuID0gZ2lu ZW5kc2NhbiwKLQkJLmFtbWFya3BvcyA9IE5VTEwsCi0JCS5hbXJlc3RycG9zID0gTlVMTCwKKwkJ LmFtcG9zcmVzZXQgPSBOVUxMLAogCQkuYW1lc3RpbWF0ZXBhcmFsbGVsc2NhbiA9IE5VTEwsCiAJ CS5hbWluaXRwYXJhbGxlbHNjYW4gPSBOVUxMLAogCQkuYW1wYXJhbGxlbHJlc2NhbiA9IE5VTEws CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvZ2lzdC9naXN0LmMgYi9zcmMvYmFja2Vu ZC9hY2Nlc3MvZ2lzdC9naXN0LmMKaW5kZXggODU2NWUyMjViLi5hNThjNTIyMmYgMTAwNjQ0Ci0t LSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9naXN0L2dpc3QuYworKysgYi9zcmMvYmFja2VuZC9hY2Nl c3MvZ2lzdC9naXN0LmMKQEAgLTEwMywxMCArMTAzLDEyIEBAIGdpc3RoYW5kbGVyKFBHX0ZVTkNU SU9OX0FSR1MpCiAJCS5hbWJlZ2luc2NhbiA9IGdpc3RiZWdpbnNjYW4sCiAJCS5hbXJlc2NhbiA9 IGdpc3RyZXNjYW4sCiAJCS5hbWdldHR1cGxlID0gZ2lzdGdldHR1cGxlLAorCQkuYW1nZXRiYXRj aCA9IE5VTEwsCisJCS5hbXVuZ3VhcmRiYXRjaCA9IE5VTEwsCisJCS5hbWtpbGxpdGVtc2JhdGNo ID0gTlVMTCwKIAkJLmFtZ2V0Yml0bWFwID0gZ2lzdGdldGJpdG1hcCwKIAkJLmFtZW5kc2NhbiA9 IGdpc3RlbmRzY2FuLAotCQkuYW1tYXJrcG9zID0gTlVMTCwKLQkJLmFtcmVzdHJwb3MgPSBOVUxM LAorCQkuYW1wb3NyZXNldCA9IE5VTEwsCiAJCS5hbWVzdGltYXRlcGFyYWxsZWxzY2FuID0gTlVM TCwKIAkJLmFtaW5pdHBhcmFsbGVsc2NhbiA9IE5VTEwsCiAJCS5hbXBhcmFsbGVscmVzY2FuID0g TlVMTCwKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2guYyBiL3NyYy9i YWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2guYwppbmRleCA4ZDhjZDMwZGMuLjlhZTlmMDQ0OCAxMDA2 NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFzaC5jCisrKyBiL3NyYy9iYWNrZW5k L2FjY2Vzcy9oYXNoL2hhc2guYwpAQCAtMTE0LDEwICsxMTQsMTIgQEAgaGFzaGhhbmRsZXIoUEdf RlVOQ1RJT05fQVJHUykKIAkJLmFtYmVnaW5zY2FuID0gaGFzaGJlZ2luc2NhbiwKIAkJLmFtcmVz Y2FuID0gaGFzaHJlc2NhbiwKIAkJLmFtZ2V0dHVwbGUgPSBoYXNoZ2V0dHVwbGUsCisJCS5hbWdl dGJhdGNoID0gTlVMTCwKKwkJLmFtdW5ndWFyZGJhdGNoID0gTlVMTCwKKwkJLmFta2lsbGl0ZW1z YmF0Y2ggPSBOVUxMLAogCQkuYW1nZXRiaXRtYXAgPSBoYXNoZ2V0Yml0bWFwLAogCQkuYW1lbmRz Y2FuID0gaGFzaGVuZHNjYW4sCi0JCS5hbW1hcmtwb3MgPSBOVUxMLAotCQkuYW1yZXN0cnBvcyA9 IE5VTEwsCisJCS5hbXBvc3Jlc2V0ID0gTlVMTCwKIAkJLmFtZXN0aW1hdGVwYXJhbGxlbHNjYW4g PSBOVUxMLAogCQkuYW1pbml0cGFyYWxsZWxzY2FuID0gTlVMTCwKIAkJLmFtcGFyYWxsZWxyZXNj YW4gPSBOVUxMLApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtX2hh bmRsZXIuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9oYW5kbGVyLmMKaW5kZXgg NjU3YWU0NDE0Li4xZjk3YjZlMTQgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFw L2hlYXBhbV9oYW5kbGVyLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtX2hh bmRsZXIuYwpAQCAtMjU1NSw4ICsyNTU1LDExIEBAIHN0YXRpYyBjb25zdCBUYWJsZUFtUm91dGlu ZSBoZWFwYW1fbWV0aG9kcyA9IHsKIAkucGFyYWxsZWxzY2FuX3JlaW5pdGlhbGl6ZSA9IHRhYmxl X2Jsb2NrX3BhcmFsbGVsc2Nhbl9yZWluaXRpYWxpemUsCiAKIAkuaW5kZXhfZmV0Y2hfYmVnaW4g PSBoZWFwYW1faW5kZXhfZmV0Y2hfYmVnaW4sCisJLmluZGV4X2ZldGNoX2JhdGNoX2luaXQgPSBo ZWFwYW1faW5kZXhfZmV0Y2hfYmF0Y2hfaW5pdCwKIAkuaW5kZXhfZmV0Y2hfcmVzZXQgPSBoZWFw YW1faW5kZXhfZmV0Y2hfcmVzZXQsCiAJLmluZGV4X2ZldGNoX2VuZCA9IGhlYXBhbV9pbmRleF9m ZXRjaF9lbmQsCisJLmluZGV4X2ZldGNoX21hcmtwb3MgPSBoZWFwYW1faW5kZXhfZmV0Y2hfbWFy a3BvcywKKwkuaW5kZXhfZmV0Y2hfcmVzdHJwb3MgPSBoZWFwYW1faW5kZXhfZmV0Y2hfcmVzdHJw b3MsCiAKIAkudHVwbGVfaW5zZXJ0ID0gaGVhcGFtX3R1cGxlX2luc2VydCwKIAkudHVwbGVfaW5z ZXJ0X3NwZWN1bGF0aXZlID0gaGVhcGFtX3R1cGxlX2luc2VydF9zcGVjdWxhdGl2ZSwKZGlmZiAt LWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9pbmRleHNjYW4uYyBiL3NyYy9i YWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9pbmRleHNjYW4uYwppbmRleCBlMWJhMTlkOGEuLjVm ZjlkOGJlYSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtX2luZGV4 c2Nhbi5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9pbmRleHNjYW4uYwpA QCAtMTYsMTIgKzE2LDQ5IEBACiAKICNpbmNsdWRlICJhY2Nlc3MvYW1hcGkuaCIKICNpbmNsdWRl ICJhY2Nlc3MvaGVhcGFtLmgiCisjaW5jbHVkZSAiYWNjZXNzL2luZGV4YmF0Y2guaCIKICNpbmNs dWRlICJhY2Nlc3MvcmVsc2Nhbi5oIgogI2luY2x1ZGUgImFjY2Vzcy92aXNpYmlsaXR5bWFwLmgi CiAjaW5jbHVkZSAic3RvcmFnZS9wcmVkaWNhdGUuaCIKICNpbmNsdWRlICJ1dGlscy9wZ3N0YXRf aW50ZXJuYWwuaCIKIAogCisvKgorICogUGVyLWJhdGNoIGRhdGEgcHJpdmF0ZSB0byB0aGUgaGVh cCB0YWJsZSBBTS4KKyAqCisgKiBTdG9yZWQgYXQgYSBuZWdhdGl2ZSBvZmZzZXQgZnJvbSB0aGUg SW5kZXhTY2FuQmF0Y2ggcG9pbnRlciwgaW4gdGhlCisgKiBmaXhlZC1zaXplIHRhYmxlIEFNIG9w YXF1ZSBhcmVhIG9mIGVhY2ggYmF0Y2ggYWxsb2NhdGlvbi4KKyAqLwordHlwZWRlZiBzdHJ1Y3Qg SGVhcEJhdGNoRGF0YQoreworCXVpbnQ4CSAgICp2aXNJbmZvOwkJLyogcGVyLWl0ZW0gdmlzaWJp bGl0eSBmbGFncywgb3IgTlVMTCAqLworfSBIZWFwQmF0Y2hEYXRhOworCisvKgorICogUGVyLWl0 ZW0gdmlzaWJpbGl0eSBmbGFncyBzdG9yZWQgaW4gSGVhcEJhdGNoRGF0YS52aXNJbmZvIGFycmF5 CisgKi8KKyNkZWZpbmUgSEVBUF9CQVRDSF9WSVNfQ0hFQ0tFRAkJMHgwMQkvKiBjaGVja2VkIGl0 ZW0gaW4gVk0/ICovCisjZGVmaW5lIEhFQVBfQkFUQ0hfVklTX0FMTF9WSVNJQkxFCTB4MDIJLyog YmxvY2sgaXMga25vd24gYWxsLXZpc2libGU/ICovCisKK3N0YXRpYyBpbmxpbmUgSGVhcEJhdGNo RGF0YSAqaGVhcGFtX2luZGV4X2JhdGNoX2RhdGEoSW5kZXhTY2FuRGVzYyBzY2FuLAorCQkJCQkJ CQkJCQkJCSBJbmRleFNjYW5CYXRjaCBiYXRjaCk7CitzdGF0aWMgaW5saW5lIEl0ZW1Qb2ludGVy IGhlYXBhbV9pbmRleF9yZXR1cm5fc2NhbnBvc190aWQoSW5kZXhTY2FuRGVzYyBzY2FuLAorCQkJ CQkJCQkJCQkJCQkgIEluZGV4RmV0Y2hIZWFwRGF0YSAqaHNjYW4sCisJCQkJCQkJCQkJCQkJCSAg U2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24sCisJCQkJCQkJCQkJCQkJCSAgSW5kZXhTY2FuQmF0Y2gg c2NhbkJhdGNoLAorCQkJCQkJCQkJCQkJCQkgIEJhdGNoUmluZ0l0ZW1Qb3MgKnNjYW5Qb3MsCisJ CQkJCQkJCQkJCQkJCSAgYm9vbCAqYWxsX3Zpc2libGUpOworc3RhdGljIHZvaWQgaGVhcGFtX2lu ZGV4X2JhdGNoX3Bvc192aXNpYmlsaXR5KEluZGV4U2NhbkRlc2Mgc2NhbiwKKwkJCQkJCQkJCQkJ ICBTY2FuRGlyZWN0aW9uIGRpcmVjdGlvbiwKKwkJCQkJCQkJCQkJICBJbmRleFNjYW5CYXRjaCBi YXRjaCwKKwkJCQkJCQkJCQkJICBIZWFwQmF0Y2hEYXRhICpoYmF0Y2gsCisJCQkJCQkJCQkJCSAg QmF0Y2hSaW5nSXRlbVBvcyAqcG9zKTsKK3N0YXRpYyBib29sIGhlYXBhbV9pbmRleF9wbGFpbl9i YXRjaF9nZXRuZXh0X3Nsb3QoSW5kZXhTY2FuRGVzYyBzY2FuLAorCQkJCQkJCQkJCQkJICBTY2Fu RGlyZWN0aW9uIGRpcmVjdGlvbiwKKwkJCQkJCQkJCQkJCSAgVHVwbGVUYWJsZVNsb3QgKnNsb3Qp Oworc3RhdGljIGJvb2wgaGVhcGFtX2luZGV4X29ubHlfYmF0Y2hfZ2V0bmV4dF9zbG90KEluZGV4 U2NhbkRlc2Mgc2NhbiwKKwkJCQkJCQkJCQkJCSBTY2FuRGlyZWN0aW9uIGRpcmVjdGlvbiwKKwkJ CQkJCQkJCQkJCSBUdXBsZVRhYmxlU2xvdCAqc2xvdCk7CiBzdGF0aWMgYm9vbCBoZWFwYW1faW5k ZXhfcGxhaW5fdHVwbGVfZ2V0bmV4dF9zbG90KEluZGV4U2NhbkRlc2Mgc2NhbiwKIAkJCQkJCQkJ CQkJCSAgU2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24sCiAJCQkJCQkJCQkJCQkgIFR1cGxlVGFibGVT bG90ICpzbG90KTsKQEAgLTc3LDI2ICsxMTQsOTIgQEAgaGVhcGFtX2luZGV4X2ZldGNoX2JlZ2lu KEluZGV4U2NhbkRlc2Mgc2NhbiwgdWludDMyIGZsYWdzKQogewogCUluZGV4RmV0Y2hIZWFwRGF0 YSAqaHNjYW4gPSBwYWxsb2MwX29iamVjdChJbmRleEZldGNoSGVhcERhdGEpOwogCisJaHNjYW4t PnhzX2Jhc2UuYmF0Y2hfb3BhcXVlX3NpemUgPSBNQVhBTElHTihzaXplb2YoSGVhcEJhdGNoRGF0 YSkpOworCWhzY2FuLT54c19iYXNlLmJhdGNoX3Blcl9pdGVtX3NpemUgPSBzaXplb2YodWludDgp OyAvKiB2aXNJbmZvIGVsZW1lbnQgc2l6ZSAqLwogCWhzY2FuLT54c19iYXNlLmZsYWdzID0gZmxh Z3M7Ci0JaHNjYW4tPnhzX2NidWYgPSBJbnZhbGlkQnVmZmVyOwotCWhzY2FuLT54c19ibGsgPSBJ bnZhbGlkQmxvY2tOdW1iZXI7Ci0JaHNjYW4tPnhzX3ZtYnVmZmVyID0gSW52YWxpZEJ1ZmZlcjsK IAotCS8qIFJlc29sdmUgd2hpY2ggZ2V0bmV4dF9zbG90IGltcGxlbWVudGF0aW9uIHRvIHVzZSBm b3IgdGhpcyBzY2FuICovCi0JaWYgKHNjYW4tPnhzX3dhbnRfaXR1cCkKLQkJc2Nhbi0+eHNfZ2V0 bmV4dF9zbG90ID0gaGVhcGFtX2luZGV4X29ubHlfdHVwbGVfZ2V0bmV4dF9zbG90OworCS8qIEN1 cnJlbnQgaGVhcCBibG9jayBzdGF0ZSAqLworCUFzc2VydChoc2Nhbi0+eHNfY2J1ZiA9PSBJbnZh bGlkQnVmZmVyKTsKKwloc2Nhbi0+eHNfYmxrID0gSW52YWxpZEJsb2NrTnVtYmVyOworCisJLyog Vk0gcmVsYXRlZCBzdGF0ZSAqLworCUFzc2VydChoc2Nhbi0+eHNfdm1idWZmZXIgPT0gSW52YWxp ZEJ1ZmZlcik7CisJaHNjYW4tPnhzX3ZtX2l0ZW1zID0gMTsKKworCS8qIFJlc29sdmUgd2hpY2gg eHNfZ2V0bmV4dF9zbG90IGltcGxlbWVudGF0aW9uIHRvIHVzZSBmb3IgdGhpcyBzY2FuICovCisJ aWYgKHNjYW4tPmluZGV4UmVsYXRpb24tPnJkX2luZGFtLT5hbWdldGJhdGNoICE9IE5VTEwpCisJ eworCQkvKiBhbWdldGJhdGNoIGluZGV4IEFNICovCisJCWlmIChzY2FuLT54c193YW50X2l0dXAp CisJCQlzY2FuLT54c19nZXRuZXh0X3Nsb3QgPSBoZWFwYW1faW5kZXhfb25seV9iYXRjaF9nZXRu ZXh0X3Nsb3Q7CisJCWVsc2UKKwkJCXNjYW4tPnhzX2dldG5leHRfc2xvdCA9IGhlYXBhbV9pbmRl eF9wbGFpbl9iYXRjaF9nZXRuZXh0X3Nsb3Q7CisKKwkJLyogU2V0IHVwIHNjYW4ncyBiYXRjaCBy aW5nIGJ1ZmZlciBpbiBwYXNzaW5nICovCisJCXRhYmxlYW1fdXRpbF9iYXRjaHNjYW5faW5pdChz Y2FuKTsKKwl9CiAJZWxzZQotCQlzY2FuLT54c19nZXRuZXh0X3Nsb3QgPSBoZWFwYW1faW5kZXhf cGxhaW5fdHVwbGVfZ2V0bmV4dF9zbG90OworCXsKKwkJLyogYW1nZXR0dXBsZSBpbmRleCBBTSAq LworCQlpZiAoc2Nhbi0+eHNfd2FudF9pdHVwKQorCQkJc2Nhbi0+eHNfZ2V0bmV4dF9zbG90ID0g aGVhcGFtX2luZGV4X29ubHlfdHVwbGVfZ2V0bmV4dF9zbG90OworCQllbHNlCisJCQlzY2FuLT54 c19nZXRuZXh0X3Nsb3QgPSBoZWFwYW1faW5kZXhfcGxhaW5fdHVwbGVfZ2V0bmV4dF9zbG90Owor CX0KIAogCXJldHVybiAmaHNjYW4tPnhzX2Jhc2U7CiB9CiAKKy8qCisgKiBJbml0aWFsaXplIHRo ZSBoZWFwIHRhYmxlIEFNJ3MgcGVyLWJhdGNoIG9wYXF1ZSBhcmVhIChIZWFwQmF0Y2hEYXRhKS4K KyAqIENhbGxlZCBieSBpbmRleGFtX3V0aWxfYmF0Y2hfYWxsb2MgZm9yIGVhY2ggbmV3IG9yIHJl Y3ljbGVkIGJhdGNoLgorICovCit2b2lkCitoZWFwYW1faW5kZXhfZmV0Y2hfYmF0Y2hfaW5pdChJ bmRleFNjYW5EZXNjIHNjYW4sIEluZGV4U2NhbkJhdGNoIGJhdGNoLAorCQkJCQkJCSAgYm9vbCBu ZXdfYWxsb2MpCit7CisJSGVhcEJhdGNoRGF0YSAqaGJhdGNoID0gaGVhcGFtX2luZGV4X2JhdGNo X2RhdGEoc2NhbiwgYmF0Y2gpOworCisJaWYgKHNjYW4tPnhzX3dhbnRfaXR1cCkKKwl7CisJCWlm IChuZXdfYWxsb2MpCisJCXsKKwkJCS8qCisJCQkgKiBUaGUgdmlzSW5mbyBwb2ludGVyIGlzIHN0 b3JlZCBhdCB0aGUgdmVyeSBzdGFydCBvZiB0aGUgcGFsbG9jJ2QKKwkJCSAqIHNwYWNlLCBpbiB0 aGUgZml4ZWQtc2l6ZWQgdGFibGUgQU0gb3BhcXVlIGFyZWEuICB2aXNJbmZvIHBvaW50cworCQkJ ICogdG8ganVzdCBwYXN0IHRoZSBlbmQgb2YgdGhlIHZhcmlhYmxlLXNpemVkIGl0ZW1zW21heGl0 ZW1zYmF0Y2hdCisJCQkgKiBhcnJheSAodG8gYSBzcGFjZSB0aGF0IGlzIGFsc28gc2l6ZWQgYWNj b3JkaW5nIHRvIHdoYXRldmVyIHRoZQorCQkJICogaW5kZXggQU0gc2V0IG1heGl0ZW1zYmF0Y2gg dG8pLgorCQkJICovCisJCQlTaXplCQlpdGVtc0VuZDsKKworCQkJaXRlbXNFbmQgPSBNQVhBTElH TihvZmZzZXRvZihJbmRleFNjYW5CYXRjaERhdGEsIGl0ZW1zKSArCisJCQkJCQkJCXNpemVvZihC YXRjaE1hdGNoaW5nSXRlbSkgKiBzY2FuLT5tYXhpdGVtc2JhdGNoKTsKKwkJCWhiYXRjaC0+dmlz SW5mbyA9ICh1aW50OCAqKSAoKGNoYXIgKikgYmF0Y2ggKyBpdGVtc0VuZCk7CisJCX0KKworCQkv KiBDbGVhciB2aXNpYmlsaXR5IGZsYWdzIChuZWVkZWQgZm9yIGJvdGggbmV3IGFuZCByZWN5Y2xl ZCBiYXRjaGVzKSAqLworCQltZW1zZXQoaGJhdGNoLT52aXNJbmZvLCAwLCBzY2FuLT5tYXhpdGVt c2JhdGNoKTsKKwl9CisJZWxzZQorCXsKKwkJaGJhdGNoLT52aXNJbmZvID0gTlVMTDsKKwl9Cit9 CisKIHZvaWQKIGhlYXBhbV9pbmRleF9mZXRjaF9yZXNldChJbmRleFNjYW5EZXNjIHNjYW4pCiB7 CisJSW5kZXhGZXRjaEhlYXBEYXRhICpoc2NhbiA9IChJbmRleEZldGNoSGVhcERhdGEgKikgc2Nh bi0+eHNfaGVhcGZldGNoOworCisJLyogUmVzY2FucyBzaG91bGQgYXZvaWQgYW4gZXhjZXNzaXZl IG51bWJlciBvZiBWTSBsb29rdXBzICovCisJaHNjYW4tPnhzX3ZtX2l0ZW1zID0gMTsKKworCS8q IFJlc2V0IGJhdGNoIHJpbmcgYnVmZmVyIHN0YXRlICovCisJaWYgKHNjYW4tPnVzZWJhdGNocmlu ZykKKwkJdGFibGVhbV91dGlsX2JhdGNoc2Nhbl9yZXNldChzY2FuLCBmYWxzZSk7CisKIAkvKgot CSAqIFJlc2V0cyBhcmUgYSBuby1vcC4KLQkgKgogCSAqIERlbGliZXJhdGVseSBhdm9pZCBkcm9w cGluZyBwaW5zIG5vdyBoZWxkIGluIHhzX2NidWYgYW5kIHhzX3ZtYnVmZmVyLgogCSAqIFRoaXMg c2F2ZXMgY3ljbGVzIGR1cmluZyBjZXJ0YWluIHRpZ2h0IG5lc3RlZCBsb29wIGpvaW5zIChpdCBj YW4gYXZvaWQKIAkgKiByZXBlYXRlZCBwaW5uaW5nIGFuZCB1bnBpbm5pbmcgb2YgdGhlIHNhbWUg YnVmZmVyIGFjcm9zcyByZXNjYW5zKS4KQEAgLTExNiw5ICsyMTksMzUgQEAgaGVhcGFtX2luZGV4 X2ZldGNoX2VuZChJbmRleFNjYW5EZXNjIHNjYW4pCiAJaWYgKEJ1ZmZlcklzVmFsaWQoaHNjYW4t PnhzX3ZtYnVmZmVyKSkKIAkJUmVsZWFzZUJ1ZmZlcihoc2Nhbi0+eHNfdm1idWZmZXIpOwogCisJ LyogRnJlZSBhbGwgYmF0Y2ggcmVsYXRlZCByZXNvdXJjZXMgKi8KKwlpZiAoc2Nhbi0+dXNlYmF0 Y2hyaW5nKQorCQl0YWJsZWFtX3V0aWxfYmF0Y2hzY2FuX2VuZChzY2FuKTsKKwogCXBmcmVlKGhz Y2FuKTsKIH0KIAorLyoKKyAqIFNhdmUgYmF0Y2ggcmluZyBidWZmZXIncyBjdXJyZW50IHNjYW5Q b3MgYXMgaXRzIG1hcmtQb3MKKyAqLwordm9pZAoraGVhcGFtX2luZGV4X2ZldGNoX21hcmtwb3Mo SW5kZXhTY2FuRGVzYyBzY2FuKQoreworCUFzc2VydChzY2FuLT51c2ViYXRjaHJpbmcpOworCisJ dGFibGVhbV91dGlsX2JhdGNoc2Nhbl9tYXJrX3BvcyhzY2FuKTsKK30KKworLyoKKyAqIFJlc3Rv cmUgYmF0Y2ggcmluZyBidWZmZXIncyBtYXJrUG9zIGludG8gaXRzIHNjYW5Qb3MKKyAqLwordm9p ZAoraGVhcGFtX2luZGV4X2ZldGNoX3Jlc3RycG9zKEluZGV4U2NhbkRlc2Mgc2NhbikKK3sKKwlB c3NlcnQoc2Nhbi0+dXNlYmF0Y2hyaW5nKTsKKworCXRhYmxlYW1fdXRpbF9iYXRjaHNjYW5fcmVz dG9yZV9wb3Moc2Nhbik7Cit9CisKIC8qCiAgKgloZWFwX2hvdF9zZWFyY2hfYnVmZmVyCS0gc2Vh cmNoIEhPVCBjaGFpbiBmb3IgdHVwbGUgc2F0aXNmeWluZyBzbmFwc2hvdAogICoKQEAgLTM2Nyw3 ICs0OTYsOCBAQCBoZWFwYW1faW5kZXhfZmV0Y2hfdHVwbGUoUmVsYXRpb24gcmVsLAogICovCiBz dGF0aWMgcGdfYXR0cmlidXRlX2Fsd2F5c19pbmxpbmUgYm9vbAogaGVhcGFtX2luZGV4X2ZldGNo X2hlYXBfaXRlbShJbmRleFNjYW5EZXNjIHNjYW4sIEluZGV4RmV0Y2hIZWFwRGF0YSAqaHNjYW4s Ci0JCQkJCQkJIFR1cGxlVGFibGVTbG90ICpzbG90LCBib29sICpoZWFwX2NvbnRpbnVlKQorCQkJ CQkJCSBUdXBsZVRhYmxlU2xvdCAqc2xvdCwgYm9vbCAqaGVhcF9jb250aW51ZSwKKwkJCQkJCQkg Ym9vbCBhbWdldGJhdGNoKQogewogCWJvb2wJCWFsbF9kZWFkID0gZmFsc2U7CiAJYm9vbAkJZm91 bmQ7CkBAIC0zODEsMjAgKzUxMSwzMzkgQEAgaGVhcGFtX2luZGV4X2ZldGNoX2hlYXBfaXRlbShJ bmRleFNjYW5EZXNjIHNjYW4sIEluZGV4RmV0Y2hIZWFwRGF0YSAqaHNjYW4sCiAJCXBnc3RhdF9j b3VudF9oZWFwX2ZldGNoKHNjYW4tPmluZGV4UmVsYXRpb24pOwogCiAJLyoKLQkgKiBJZiB3ZSBz Y2FubmVkIGEgd2hvbGUgSE9UIGNoYWluIGFuZCBmb3VuZCBvbmx5IGRlYWQgdHVwbGVzLCB0ZWxs IGluZGV4Ci0JICogQU0gdG8ga2lsbCBpdHMgZW50cnkgZm9yIHRoYXQgVElEICh0aGlzIHdpbGwg dGFrZSBlZmZlY3QgaW4gdGhlIG5leHQKLQkgKiBhbWdldHR1cGxlIGNhbGwsIGluIGluZGV4X2dl dG5leHRfdGlkKS4gIFdlIGRvIG5vdCBkbyB0aGlzIHdoZW4gaW4KLQkgKiByZWNvdmVyeSBiZWNh dXNlIGl0IG1heSB2aW9sYXRlIE1WQ0MgdG8gZG8gc28uICBTZWUgY29tbWVudHMgaW4KLQkgKiBS ZWxhdGlvbkdldEluZGV4U2NhbigpLgorCSAqIElmIHdlIHNjYW5uZWQgYSB3aG9sZSBIT1QgY2hh aW4gYW5kIGZvdW5kIG9ubHkgZGVhZCB0dXBsZXMsIHJlbWVtYmVyIGl0CisJICogZm9yIGxhdGVy LiAgV2UgZG8gbm90IGRvIHRoaXMgd2hlbiBpbiByZWNvdmVyeSBiZWNhdXNlIGl0IG1heSB2aW9s YXRlCisJICogTVZDQyB0byBkbyBzby4gIFNlZSBjb21tZW50cyBpbiBSZWxhdGlvbkdldEluZGV4 U2NhbigpLgogCSAqLwogCWlmICghc2Nhbi0+eGFjdFN0YXJ0ZWRJblJlY292ZXJ5KQotCQlzY2Fu LT5raWxsX3ByaW9yX3R1cGxlID0gYWxsX2RlYWQ7CisJeworCQlpZiAoYW1nZXRiYXRjaCkKKwkJ eworCQkJaWYgKGFsbF9kZWFkKQorCQkJCXRhYmxlYW1fdXRpbF9zY2FucG9zX2tpbGxpdGVtKHNj YW4pOworCQl9CisJCWVsc2UKKwkJeworCQkJLyoKKwkJCSAqIFRlbGwgYW1nZXR0dXBsZS1iYXNl ZCBpbmRleCBBTSB0byBraWxsIGl0cyBlbnRyeSBmb3IgdGhhdCBUSUQKKwkJCSAqICh0aGlzIHdp bGwgdGFrZSBlZmZlY3QgaW4gdGhlIG5leHQgY2FsbCwgaW4gaW5kZXhfZ2V0bmV4dF90aWQpCisJ CQkgKi8KKwkJCXNjYW4tPmtpbGxfcHJpb3JfdHVwbGUgPSBhbGxfZGVhZDsKKwkJfQorCX0KIAog CXJldHVybiBmb3VuZDsKIH0KIAogLyoKLSAqIENvbW1vbiBpbXBsZW1lbnRhdGlvbiBmb3IgYm90 aCBoZWFwYW1faW5kZXhfKl9nZXRuZXh0X3Nsb3QgdmFyaWFudHMuCisgKiBHZXQgbmV4dCBUSUQg ZnJvbSBiYXRjaCByaW5nIGJ1ZmZlciwgbW92aW5nIGluIHRoZSBnaXZlbiBzY2FuIGRpcmVjdGlv bi4KKyAqIEFsc28gc2V0cyAqYWxsX3Zpc2libGUgZm9yIGl0ZW0gd2hlbiBjYWxsZXIgcGFzc2Vz IGEgbm9uLU5VTEwgYXJnLgorICovCitzdGF0aWMgcGdfYXR0cmlidXRlX2Fsd2F5c19pbmxpbmUg SXRlbVBvaW50ZXIKK2hlYXBhbV9pbmRleF9nZXRuZXh0X3NjYW5iYXRjaF9wb3MoSW5kZXhTY2Fu RGVzYyBzY2FuLCBJbmRleEZldGNoSGVhcERhdGEgKmhzY2FuLAorCQkJCQkJCQkgICBTY2FuRGly ZWN0aW9uIGRpcmVjdGlvbiwgYm9vbCAqYWxsX3Zpc2libGUpCit7CisJQmF0Y2hSaW5nQnVmZmVy ICpiYXRjaHJpbmdidWYgPSAmc2Nhbi0+YmF0Y2hyaW5nYnVmOworCUJhdGNoUmluZ0l0ZW1Qb3Mg KnNjYW5Qb3MgPSAmYmF0Y2hyaW5nYnVmLT5zY2FuUG9zOworCUluZGV4U2NhbkJhdGNoIHNjYW5C YXRjaCA9IE5VTEw7CisJYm9vbAkJaGFkRXhpc3RpbmdTY2FuQmF0Y2g7CisKKwlBc3NlcnQoIXNj YW5Qb3MtPnZhbGlkIHx8IGJhdGNocmluZ2J1Zi0+aGVhZEJhdGNoID09IHNjYW5Qb3MtPmJhdGNo KTsKKwlBc3NlcnQoc2NhblBvcy0+dmFsaWQgfHwgaW5kZXhfc2Nhbl9iYXRjaF9jb3VudChzY2Fu KSA9PSAwKTsKKwlBc3NlcnQoYWxsX3Zpc2libGUgPT0gTlVMTCB8fCBzY2FuLT54c193YW50X2l0 dXApOworCisJLyoKKwkgKiBDaGVjayBpZiB0aGVyZSdzIGFuIGV4aXN0aW5nIGxvYWRlZCBzY2Fu QmF0Y2ggZm9yIHVzIHRvIHJldHVybiB0aGUgbmV4dAorCSAqIG1hdGNoaW5nIGl0ZW0ncyBUSUQv aW5kZXggdHVwbGUgZnJvbQorCSAqLworCWhhZEV4aXN0aW5nU2NhbkJhdGNoID0gc2NhblBvcy0+ dmFsaWQ7CisJaWYgKHNjYW5Qb3MtPnZhbGlkKQorCXsKKwkJLyoKKwkJICogc2NhblBvcyBpcyB2 YWxpZCwgc28gc2NhbkJhdGNoIG11c3QgYWxyZWFkeSBiZSBsb2FkZWQgaW4gYmF0Y2ggcmluZwor CQkgKiBidWZmZXIuICBXZSByZWx5IG9uIHRoYXQgaGVyZS4KKwkJICovCisJCXBnX2Fzc3VtZShi YXRjaHJpbmdidWYtPmhlYWRCYXRjaCA9PSBzY2FuUG9zLT5iYXRjaCk7CisKKwkJc2NhbkJhdGNo ID0gaW5kZXhfc2Nhbl9iYXRjaChzY2FuLCBzY2FuUG9zLT5iYXRjaCk7CisKKwkJaWYgKGluZGV4 X3NjYW5fcG9zX2FkdmFuY2UoZGlyZWN0aW9uLCBzY2FuQmF0Y2gsIHNjYW5Qb3MpKQorCQkJcmV0 dXJuIGhlYXBhbV9pbmRleF9yZXR1cm5fc2NhbnBvc190aWQoc2NhbiwgaHNjYW4sIGRpcmVjdGlv biwKKwkJCQkJCQkJCQkJCSAgIHNjYW5CYXRjaCwgc2NhblBvcywKKwkJCQkJCQkJCQkJCSAgIGFs bF92aXNpYmxlKTsKKwl9CisKKwkvKgorCSAqIEVpdGhlciByYW4gb3V0IG9mIGl0ZW1zIGZyb20g b3VyIGV4aXN0aW5nIHNjYW5CYXRjaCwgb3IgaXQgaGFzbid0IGJlZW4KKwkgKiBsb2FkZWQgeWV0 IChiZWNhdXNlIHRoaXMgaXMgdGhlIGZpcnN0IGNhbGwgaGVyZSBmb3IgdGhlIGVudGlyZSBzY2Fu KS4KKwkgKiBUcnkgdG8gYWR2YW5jZSBzY2FuQmF0Y2ggdG8gdGhlIG5leHQgYmF0Y2ggKG9yIGdl dCB0aGUgZmlyc3QgYmF0Y2gpLgorCSAqLworCXNjYW5CYXRjaCA9IHRhYmxlYW1fdXRpbF9mZXRj aF9uZXh0X2JhdGNoKHNjYW4sIGRpcmVjdGlvbiwKKwkJCQkJCQkJCQkJICBzY2FuQmF0Y2gsIHNj YW5Qb3MpOworCisJaWYgKCFzY2FuQmF0Y2gpCisJeworCQkvKgorCQkgKiBXZSdyZSBkb25lOyBu byBtb3JlIGJhdGNoZXMgaW4gdGhlIGN1cnJlbnQgc2NhbiBkaXJlY3Rpb24uCisJCSAqCisJCSAq IE5vdGU6IHNjYW5Qb3MgaXMgZ2VuZXJhbGx5IHN0aWxsIHZhbGlkIGF0IHRoaXMgcG9pbnQuICBU aGUgc2NhbgorCQkgKiBtaWdodCBzdGlsbCBiYWNrIHVwIGluIHRoZSBvdGhlciBkaXJlY3Rpb24u CisJCSAqLworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwkvKgorCSAqIEFkdmFuY2VkIHNjYW5CYXRj aC4gIE5vdyBwb3NpdGlvbiBzY2FuUG9zIHRvIHRoZSBzdGFydCBvZiBuZXcKKwkgKiBzY2FuQmF0 Y2guCisJICovCisJaW5kZXhfc2Nhbl9wb3NfbmV4dGJhdGNoKGRpcmVjdGlvbiwgc2NhbkJhdGNo LCBzY2FuUG9zKTsKKwlBc3NlcnQoaW5kZXhfc2Nhbl9iYXRjaChzY2FuLCBzY2FuUG9zLT5iYXRj aCkgPT0gc2NhbkJhdGNoKTsKKworCS8qCisJICogUmVtb3ZlIHRoZSBoZWFkIGJhdGNoIGZyb20g dGhlIGJhdGNoIHJpbmcgYnVmZmVyIChleGNlcHQgd2hlbiB0aGlzIG5ldworCSAqIHNjYW5CYXRj aCBpcyBvdXIgb25seSBvbmUpCisJICovCisJaWYgKGhhZEV4aXN0aW5nU2NhbkJhdGNoKQorCXsK KwkJSW5kZXhTY2FuQmF0Y2ggaGVhZEJhdGNoID0gaW5kZXhfc2Nhbl9iYXRjaChzY2FuLAorCQkJ CQkJCQkJCQkJCWJhdGNocmluZ2J1Zi0+aGVhZEJhdGNoKTsKKworCQlBc3NlcnQoaGVhZEJhdGNo ICE9IHNjYW5CYXRjaCk7CisJCUFzc2VydChiYXRjaHJpbmdidWYtPmhlYWRCYXRjaCAhPSBzY2Fu UG9zLT5iYXRjaCk7CisKKwkJLyogZnJlZSBvYnNvbGVzY2VudCBoZWFkIGJhdGNoICh1bmxlc3Mg aXQgaXMgc2NhbidzIG1hcmtCYXRjaCkgKi8KKwkJdGFibGVhbV91dGlsX2ZyZWVfYmF0Y2goc2Nh biwgaGVhZEJhdGNoKTsKKworCQkvKiBSZW1vdmUgdGhlIGJhdGNoIGZyb20gdGhlIHJpbmcgYnVm ZmVyIChldmVuIGlmIGl0J3MgbWFya0JhdGNoKSAqLworCQliYXRjaHJpbmdidWYtPmhlYWRCYXRj aCsrOworCX0KKworCS8qIEluIHByYWN0aWNlIHNjYW5CYXRjaCB3aWxsIGFsd2F5cyBiZSB0aGUg cmluZyBidWZmZXIncyBoZWFkQmF0Y2ggKi8KKwlBc3NlcnQoYmF0Y2hyaW5nYnVmLT5oZWFkQmF0 Y2ggPT0gc2NhblBvcy0+YmF0Y2gpOworCisJcmV0dXJuIGhlYXBhbV9pbmRleF9yZXR1cm5fc2Nh bnBvc190aWQoc2NhbiwgaHNjYW4sIGRpcmVjdGlvbiwKKwkJCQkJCQkJCQkgICBzY2FuQmF0Y2gs IHNjYW5Qb3MsIGFsbF92aXNpYmxlKTsKK30KKworLyoKKyAqIEFjY2VzcyB0aGUgaGVhcC1wcml2 YXRlIGZpeGVkLXNpemUgZGF0YSBmcm9tIHRoZSBiZWdpbm5pbmcgb2YgYW4gYWxsb2NhdGVkCisg KiBJbmRleFNjYW5CYXRjaCwgdXNpbmcgY2FsbGVyJ3MgSW5kZXhTY2FuQmF0Y2ggcG9pbnRlcgor ICovCitzdGF0aWMgaW5saW5lIEhlYXBCYXRjaERhdGEgKgoraGVhcGFtX2luZGV4X2JhdGNoX2Rh dGEoSW5kZXhTY2FuRGVzYyBzY2FuLCBJbmRleFNjYW5CYXRjaCBiYXRjaCkKK3sKKwkvKiBoZWFw YW0ncyBmaXhlZC1zaXplIHNwYWNlIGlzIGF0IHRoZSBzdGFydCBvZiB0aGUgcGFsbG9jJ2QgYXJl YSAqLworCXJldHVybiAoSGVhcEJhdGNoRGF0YSAqKSBpbmRleF9zY2FuX2JhdGNoX2Jhc2Uoc2Nh biwgYmF0Y2gpOworfQorCisvKgorICogU2F2ZSB0aGUgY3VycmVudCBzY2FuUG9zL3NjYW5CYXRj aCBpdGVtJ3MgVElEIGluIHNjYW4ncyB4c19oZWFwdGlkLCBhbmQKKyAqIHJldHVybiBhIHBvaW50 ZXIgdG8gdGhhdCBUSUQuICBXaGVuIGFsbF92aXNpYmxlIGlzbid0IE5VTEwgKGR1cmluZyBhbgor ICogaW5kZXgtb25seSBzY2FuKSwgYWxzbyBzZXRzIGl0ZW0ncyB2aXNpYmlsaXR5IHN0YXR1cyBp biAqYWxsX3Zpc2libGUuCisgKgorICogaGVhcGFtX2luZGV4X2dldG5leHRfc2NhbmJhdGNoX3Bv cyBoZWxwZXIgZnVuY3Rpb24uCisgKi8KK3N0YXRpYyBpbmxpbmUgSXRlbVBvaW50ZXIKK2hlYXBh bV9pbmRleF9yZXR1cm5fc2NhbnBvc190aWQoSW5kZXhTY2FuRGVzYyBzY2FuLCBJbmRleEZldGNo SGVhcERhdGEgKmhzY2FuLAorCQkJCQkJCQlTY2FuRGlyZWN0aW9uIGRpcmVjdGlvbiwKKwkJCQkJ CQkJSW5kZXhTY2FuQmF0Y2ggc2NhbkJhdGNoLAorCQkJCQkJCQlCYXRjaFJpbmdJdGVtUG9zICpz Y2FuUG9zLAorCQkJCQkJCQlib29sICphbGxfdmlzaWJsZSkKK3sKKwlIZWFwQmF0Y2hEYXRhICpo YmF0Y2g7CisKKwlwZ3N0YXRfY291bnRfaW5kZXhfdHVwbGVzKHNjYW4tPmluZGV4UmVsYXRpb24s IDEpOworCisJLyogU2V0IHhzX2hlYXB0aWQsIHdoaWNoIGNhbGxlciAoYW5kIGNvcmUgZXhlY3V0 b3IpIHdpbGwgbmVlZCAqLworCXNjYW4tPnhzX2hlYXB0aWQgPSBzY2FuQmF0Y2gtPml0ZW1zW3Nj YW5Qb3MtPml0ZW1dLnRhYmxlVGlkOworCisJaWYgKGFsbF92aXNpYmxlID09IE5VTEwpCisJewor CQkvKgorCQkgKiBQbGFpbiBpbmRleCBzY2FuLgorCQkgKi8KKwkJQXNzZXJ0KCFzY2FuLT54c193 YW50X2l0dXApOworCQlyZXR1cm4gJnNjYW4tPnhzX2hlYXB0aWQ7CisJfQorCisJLyoKKwkgKiBJ bmRleC1vbmx5IHNjYW4uCisJICoKKwkgKiBBbHNvIHNldCB4c19pdHVwLCB3aGljaCBjYWxsZXIg YWxzbyBuZWVkcy4KKwkgKi8KKwlBc3NlcnQoc2Nhbi0+eHNfd2FudF9pdHVwKTsKKwlzY2FuLT54 c19pdHVwID0gKEluZGV4VHVwbGUpIChzY2FuQmF0Y2gtPmN1cnJUdXBsZXMgKworCQkJCQkJCQkg IHNjYW5CYXRjaC0+aXRlbXNbc2NhblBvcy0+aXRlbV0udHVwbGVPZmZzZXQpOworCisJLyoKKwkg KiBTZXQgdmlzaWJpbGl0eSBpbmZvIGZvciB0aGUgY3VycmVudCBzY2FuUG9zIGl0ZW0gKHBsdXMg cG9zc2libHkgc29tZQorCSAqIGFkZGl0aW9uYWwgaXRlbXMgaW4gdGhlIGN1cnJlbnQgc2NhbiBk aXJlY3Rpb24pIGFzIG5lZWRlZAorCSAqLworCWhiYXRjaCA9IGhlYXBhbV9pbmRleF9iYXRjaF9k YXRhKHNjYW4sIHNjYW5CYXRjaCk7CisJaWYgKCEoaGJhdGNoLT52aXNJbmZvW3NjYW5Qb3MtPml0 ZW1dICYgSEVBUF9CQVRDSF9WSVNfQ0hFQ0tFRCkpCisJCWhlYXBhbV9pbmRleF9iYXRjaF9wb3Nf dmlzaWJpbGl0eShzY2FuLCBkaXJlY3Rpb24sIHNjYW5CYXRjaCwgaGJhdGNoLAorCQkJCQkJCQkJ CSAgc2NhblBvcyk7CisKKwkvKiBGaW5hbGx5LCBzZXQgYWxsX3Zpc2libGUgZm9yIGNhbGxlciAq LworCSphbGxfdmlzaWJsZSA9CisJCShoYmF0Y2gtPnZpc0luZm9bc2NhblBvcy0+aXRlbV0gJiBI RUFQX0JBVENIX1ZJU19BTExfVklTSUJMRSkgIT0gMDsKKworCXJldHVybiAmc2Nhbi0+eHNfaGVh cHRpZDsKK30KKworLyoKKyAqIE9idGFpbiB2aXNpYmlsaXR5IGluZm9ybWF0aW9uIGZvciBhIFRJ RCBmcm9tIGNhbGxlcidzIGJhdGNoLgorICoKKyAqIENhbGxlZCBkdXJpbmcgYW1nZXRiYXRjaCBp bmRleC1vbmx5IHNjYW5zLiAgV2UgYWx3YXlzIGNoZWNrIHRoZSB2aXNpYmlsaXR5CisgKiBvZiBj YWxsZXIncyBpdGVtIChhbiBvZmZzZXQgaW50byBjYWxsZXIncyBiYXRjaC0+aXRlbXNbXSBhcnJh eSkuICBXZSBtaWdodAorICogYWxzbyBzZXQgdmlzaWJpbGl0eSBpbmZvIGZvciBvdGhlciBpdGVt cyBmcm9tIGNhbGxlcidzIGJhdGNoIG1vcmUKKyAqIHByb2FjdGl2ZWx5IHdoZW4gdGhhdCBtYWtl cyBzZW5zZS4KKyAqCisgKiBXZSBrZWVwIHR3byBjb21wZXRpbmcgY29uc2lkZXJhdGlvbnMgaW4g YmFsYW5jZSB3aGVuIGRldGVybWluaW5nIHdoZXRoZXIgdG8KKyAqIGNoZWNrIGFkZGl0aW9uYWwg aXRlbXM6IHRoZSBuZWVkIHRvIGtlZXAgdGhlIGNvc3Qgb2YgdmlzaWJpbGl0eSBtYXAgYWNjZXNz CisgKiB1bmRlciBjb250cm9sIHdoZW4gbW9zdCBpdGVtcyB3aWxsIG5ldmVyIGJlIHJldHVybmVk IGJ5IHRoZSBzY2FuIGFueXdheQorICogKGltcG9ydGFudCBmb3IgaW5uZXIgaW5kZXggc2NhbnMg b2YgYW50aS1qb2lucyBhbmQgc2VtaS1qb2lucyksIGFuZCB0aGUKKyAqIG5lZWQgdG8gdW5ndWFy ZCBiYXRjaGVzIHByb21wdGx5LgorICoKKyAqIE9uY2Ugd2UndmUgcmVzb2x2ZWQgdmlzaWJpbGl0 eSBmb3IgYWxsIGl0ZW1zIGluIGEgYmF0Y2gsIHdlIGNhbiBzYWZlbHkKKyAqIHVuZ3VhcmQgaXQg YnkgY2FsbGluZyBhbXVuZ3VhcmRiYXRjaC4gIFRoaXMgaXMgc2FmZSB3aXRoIHJlc3BlY3QgdG8K KyAqIGNvbmN1cnJlbnQgVkFDVVVNIGJlY2F1c2UgdGhlIGJhdGNoJ3MgZ3VhcmQgKHR5cGljYWxs eSBhIGJ1ZmZlciBwaW4gb24gdGhlCisgKiBvcmlnaW5hdGluZyBpbmRleCBwYWdlKSBibG9ja3Mg VkFDVVVNIGZyb20gYWNxdWlyaW5nIGEgY29uZmxpY3RpbmcgY2xlYW51cAorICogbG9jayBvbiB0 aGF0IHBhZ2UuICBDb3B5aW5nIHRoZSByZWxldmFudCB2aXNpYmlsaXR5IG1hcCBkYXRhIGludG8g b3VyIGxvY2FsCisgKiBjYWNoZSBzdWZmaWNlcyB0byBwcmV2ZW50IHVuc2FmZSBjb25jdXJyZW50 IFRJRCByZWN5Y2xpbmc6IGlmIGFueSBvZiB0aGVzZQorICogVElEcyBwb2ludCB0byBkZWFkIGhl YXAgdHVwbGVzLCBWQUNVVU0gY2Fubm90IHBvc3NpYmx5IHJldHVybiBmcm9tCisgKiBhbWJ1bGtk ZWxldGUgYW5kIG1hcmsgdGhlIHBvaW50ZWQtdG8gaGVhcCBwYWdlcyBhcyBhbGwtdmlzaWJsZS4g IFZBQ1VVTQorICogX2Nhbl8gZG8gc28gb25jZSB0aGUgYmF0Y2ggaXMgdW5ndWFyZGVkLCBidXQg dGhhdCdzIG9rYXk7IHdlJ2xsIGJlIHdvcmtpbmcKKyAqIG9mZiBvZiBjYWNoZWQgdmlzaWJpbGl0 eSBpbmZvIHRoYXQgaW5kaWNhdGVzIHRoYXQgdGhlIGRlYWQgVElEcyBhcmUgTk9UCisgKiBhbGwt dmlzaWJsZS4KKyAqCisgKiBXaGF0IGFib3V0IHRoZSBvcHBvc2l0ZSBjYXNlLCB3aGVyZSBhIHBh Z2Ugd2FzIGFsbC12aXNpYmxlIHdoZW4gd2UgY2FjaGVkCisgKiB0aGUgVk0gYml0cyBidXQgdHVw bGVzIG9uIGl0IGFyZSBkZWxldGVkIGFmdGVyd2FyZHM/ICBUaGF0IGlzIHNhZmUgdG9vOiBhbnkK KyAqIHR1cGxlIHRoYXQgd2FzIHZpc2libGUgdG8gYWxsIHdoZW4gd2UgcmVhZCB0aGUgVk0gbXVz dCBhbHNvIGJlIHZpc2libGUgdG8KKyAqIG91ciBNVkNDIHNuYXBzaG90LCBzbyBpdCBpcyBjb3Jy ZWN0IHRvIHNraXAgdGhlIGhlYXAgZmV0Y2ggZm9yIHRob3NlIFRJRHMuCisgKi8KK3N0YXRpYyB2 b2lkCitoZWFwYW1faW5kZXhfYmF0Y2hfcG9zX3Zpc2liaWxpdHkoSW5kZXhTY2FuRGVzYyBzY2Fu LCBTY2FuRGlyZWN0aW9uIGRpcmVjdGlvbiwKKwkJCQkJCQkJICBJbmRleFNjYW5CYXRjaCBiYXRj aCwgSGVhcEJhdGNoRGF0YSAqaGJhdGNoLAorCQkJCQkJCQkgIEJhdGNoUmluZ0l0ZW1Qb3MgKnBv cykKK3sKKwlJbmRleEZldGNoSGVhcERhdGEgKmhzY2FuID0gKEluZGV4RmV0Y2hIZWFwRGF0YSAq KSBzY2FuLT54c19oZWFwZmV0Y2g7CisJaW50CQkJcG9zSXRlbSA9IHBvcy0+aXRlbTsKKwlib29s CQlhbGxiYXRjaGl0ZW1zdmlzaWJsZTsKKwlCbG9ja051bWJlciBjdXJ2bWhlYXBibGtubyA9IElu dmFsaWRCbG9ja051bWJlcjsKKwl1aW50OAkJY3Vydm1oZWFwYmxrZmxhZ3MgPSAwOworCisJQXNz ZXJ0KGhiYXRjaCA9PSBoZWFwYW1faW5kZXhfYmF0Y2hfZGF0YShzY2FuLCBiYXRjaCkpOworCisJ LyoKKwkgKiBUaGUgYmF0Y2ggbXVzdCBzdGlsbCBiZSBndWFyZGVkIHdoZW5ldmVyIHdlJ3JlIGNh bGxlZC4KKwkgKgorCSAqIGFtdW5ndWFyZGJhdGNoIGNhbid0IGJlIGNhbGxlZCB1bnRpbCB3ZSd2 ZSBhbHJlYWR5IHNldCBfZXZlcnlfIGJhdGNoCisJICogaXRlbSdzIHZpc0luZm9bXSBzdGF0dXMs IGJ1dCBpZiB3ZSd2ZSBhbHJlYWR5IGRvbmUgc28gZm9yIHRoaXMgYmF0Y2gKKwkgKiB0aGVuIGl0 IHNob3VsZG4ndCBldmVyIGdldCBwYXNzZWQgdG8gdXMgYWdhaW4gYnkgc29tZSBzdWJzZXF1ZW50 IGNhbGwuCisJICogKFRoaXMgcmVsaWVzIG9uIGluZGV4LW9ubHkgc2NhbnMgYWx3YXlzIGJlaW5n ICFiYXRjaEltbWVkaWF0ZVVuZ3VhcmQuKQorCSAqLworCUFzc2VydChiYXRjaC0+aXNHdWFyZGVk ICYmICFzY2FuLT5iYXRjaEltbWVkaWF0ZVVuZ3VhcmQpOworCisJLyoKKwkgKiBTZXQgdmlzaWJp bGl0eSBpbmZvIGZvciBhIHJhbmdlIG9mIGl0ZW1zLCBpbiBzY2FuIG9yZGVyLgorCSAqCisJICog Tm90ZTogdmlzaWJpbGl0eW1hcF9nZXRfc3RhdHVzIGRvZXMgbm90IGxvY2sgdGhlIHZpc2liaWxp dHkgbWFwIGJ1ZmZlciwKKwkgKiBzbyB0aGUgcmVzdWx0IGNvdWxkIGJlIHNsaWdodGx5IHN0YWxl LiAgU2VlIHRoZSAiTWVtb3J5IG9yZGVyaW5nCisJICogZWZmZWN0cyIgZGlzY3Vzc2lvbiBhYm92 ZSB2aXNpYmlsaXR5bWFwX2dldF9zdGF0dXMgZm9yIGFuIGV4cGxhbmF0aW9uCisJICogb2Ygd2h5 IHRoaXMgaXMgb2theS4KKwkgKi8KKwlpZiAoU2NhbkRpcmVjdGlvbklzRm9yd2FyZChkaXJlY3Rp b24pKQorCXsKKwkJaW50CQkJbGFzdFNldEl0ZW0gPSBNaW4oYmF0Y2gtPmxhc3RJdGVtLAorCQkJ CQkJCQkJICBwb3NJdGVtICsgaHNjYW4tPnhzX3ZtX2l0ZW1zIC0gMSk7CisKKwkJZm9yIChpbnQg c2V0SXRlbSA9IHBvc0l0ZW07IHNldEl0ZW0gPD0gbGFzdFNldEl0ZW07IHNldEl0ZW0rKykKKwkJ eworCQkJSXRlbVBvaW50ZXIgdGlkID0gJmJhdGNoLT5pdGVtc1tzZXRJdGVtXS50YWJsZVRpZDsK KwkJCUJsb2NrTnVtYmVyIGhlYXBibGtubyA9IEl0ZW1Qb2ludGVyR2V0QmxvY2tOdW1iZXIodGlk KTsKKwkJCXVpbnQ4CQlmbGFnczsKKworCQkJaWYgKGhlYXBibGtubyA9PSBjdXJ2bWhlYXBibGtu bykKKwkJCXsKKwkJCQloYmF0Y2gtPnZpc0luZm9bc2V0SXRlbV0gPSBjdXJ2bWhlYXBibGtmbGFn czsKKwkJCQljb250aW51ZTsKKwkJCX0KKworCQkJZmxhZ3MgPSBIRUFQX0JBVENIX1ZJU19DSEVD S0VEOworCQkJaWYgKFZNX0FMTF9WSVNJQkxFKHNjYW4tPmhlYXBSZWxhdGlvbiwgaGVhcGJsa25v LCAmaHNjYW4tPnhzX3ZtYnVmZmVyKSkKKwkJCQlmbGFncyB8PSBIRUFQX0JBVENIX1ZJU19BTExf VklTSUJMRTsKKworCQkJaGJhdGNoLT52aXNJbmZvW3NldEl0ZW1dID0gY3Vydm1oZWFwYmxrZmxh Z3MgPSBmbGFnczsKKwkJCWN1cnZtaGVhcGJsa25vID0gaGVhcGJsa25vOworCQl9CisKKwkJYWxs YmF0Y2hpdGVtc3Zpc2libGUgPSBsYXN0U2V0SXRlbSA+PSBiYXRjaC0+bGFzdEl0ZW0gJiYKKwkJ CShwb3NJdGVtID09IGJhdGNoLT5maXJzdEl0ZW0gfHwKKwkJCSAoaGJhdGNoLT52aXNJbmZvW2Jh dGNoLT5maXJzdEl0ZW1dICYgSEVBUF9CQVRDSF9WSVNfQ0hFQ0tFRCkpOworCX0KKwllbHNlCisJ eworCQlpbnQJCQlsYXN0U2V0SXRlbSA9IE1heChiYXRjaC0+Zmlyc3RJdGVtLAorCQkJCQkJCQkJ ICBwb3NJdGVtIC0gaHNjYW4tPnhzX3ZtX2l0ZW1zICsgMSk7CisKKwkJZm9yIChpbnQgc2V0SXRl bSA9IHBvc0l0ZW07IHNldEl0ZW0gPj0gbGFzdFNldEl0ZW07IHNldEl0ZW0tLSkKKwkJeworCQkJ SXRlbVBvaW50ZXIgdGlkID0gJmJhdGNoLT5pdGVtc1tzZXRJdGVtXS50YWJsZVRpZDsKKwkJCUJs b2NrTnVtYmVyIGhlYXBibGtubyA9IEl0ZW1Qb2ludGVyR2V0QmxvY2tOdW1iZXIodGlkKTsKKwkJ CXVpbnQ4CQlmbGFnczsKKworCQkJaWYgKGhlYXBibGtubyA9PSBjdXJ2bWhlYXBibGtubykKKwkJ CXsKKwkJCQloYmF0Y2gtPnZpc0luZm9bc2V0SXRlbV0gPSBjdXJ2bWhlYXBibGtmbGFnczsKKwkJ CQljb250aW51ZTsKKwkJCX0KKworCQkJZmxhZ3MgPSBIRUFQX0JBVENIX1ZJU19DSEVDS0VEOwor CQkJaWYgKFZNX0FMTF9WSVNJQkxFKHNjYW4tPmhlYXBSZWxhdGlvbiwgaGVhcGJsa25vLCAmaHNj YW4tPnhzX3ZtYnVmZmVyKSkKKwkJCQlmbGFncyB8PSBIRUFQX0JBVENIX1ZJU19BTExfVklTSUJM RTsKKworCQkJaGJhdGNoLT52aXNJbmZvW3NldEl0ZW1dID0gY3Vydm1oZWFwYmxrZmxhZ3MgPSBm bGFnczsKKwkJCWN1cnZtaGVhcGJsa25vID0gaGVhcGJsa25vOworCQl9CisKKwkJYWxsYmF0Y2hp dGVtc3Zpc2libGUgPSBsYXN0U2V0SXRlbSA8PSBiYXRjaC0+Zmlyc3RJdGVtICYmCisJCQkocG9z SXRlbSA9PSBiYXRjaC0+bGFzdEl0ZW0gfHwKKwkJCSAoaGJhdGNoLT52aXNJbmZvW2JhdGNoLT5s YXN0SXRlbV0gJiBIRUFQX0JBVENIX1ZJU19DSEVDS0VEKSk7CisJfQorCisJLyoKKwkgKiBJdCdz IHNhZmUgdG8gdW5ndWFyZCB0aGUgYmF0Y2ggKHZpYSBhbXVuZ3VhcmRiYXRjaCkgYXMgc29vbiBh cyB3ZSd2ZQorCSAqIHJlc29sdmVkIHRoZSB2aXNpYmlsaXR5IHN0YXR1cyBvZiBhbGwgb2YgaXRz IGl0ZW1zICh1bmxlc3MgdGhpcyBpcyBhCisJICogbm9uLU1WQ0Mgc2NhbikKKwkgKi8KKwlpZiAo YWxsYmF0Y2hpdGVtc3Zpc2libGUpCisJeworCQlBc3NlcnQoaGJhdGNoLT52aXNJbmZvW2JhdGNo LT5maXJzdEl0ZW1dICYgSEVBUF9CQVRDSF9WSVNfQ0hFQ0tFRCk7CisJCUFzc2VydChoYmF0Y2gt PnZpc0luZm9bYmF0Y2gtPmxhc3RJdGVtXSAmIEhFQVBfQkFUQ0hfVklTX0NIRUNLRUQpOworCisJ CS8qCisJCSAqIE5vdGU6IG5vZGVJbmRleG9ubHlzY2FuLmMgb25seSBzdXBwb3J0cyBNVkNDIHNu YXBzaG90cywgYnV0IHdlCisJCSAqIHN0aWxsIGNvcGUgd2l0aCBpbmRleC1vbmx5IHNjYW4gY2Fs bGVycyB3aXRoIG90aGVyIHNuYXBzaG90IHR5cGVzLgorCQkgKiBUaGlzIGlzIGNlcnRhaW5seSBu b3QgdW5leHBlY3RlZDsgc2VsZnVuY3MuYyBwZXJmb3JtcyBpbmRleC1vbmx5CisJCSAqIHNjYW5z IHRoYXQgdXNlIFNuYXBzaG90Tm9uVmFjdXVtYWJsZS4KKwkJICovCisJCWlmIChzY2FuLT5NVkND U2NhbikKKwkJCXRhYmxlYW1fdXRpbF91bmd1YXJkX2JhdGNoKHNjYW4sIGJhdGNoKTsKKwl9CisK KwkvKgorCSAqIEVsc2UgY2hlY2sgdmlzaWJpbGl0eSBmb3IgdHdpY2UgYXMgbWFueSBpdGVtcyBu ZXh0IHRpbWUsIG9yIGFsbCBpdGVtcy4KKwkgKiBXZSBjaGVjayBhbGwgaXRlbXMgaW4gb25lIGdv IG9uY2Ugd2UncmUgcGFzc2VkIHRoZSBzY2FuJ3MgZmlyc3QgYmF0Y2guCisJICovCisJZWxzZSBp ZiAoaHNjYW4tPnhzX3ZtX2l0ZW1zIDwgKGJhdGNoLT5sYXN0SXRlbSAtIGJhdGNoLT5maXJzdEl0 ZW0pKQorCQloc2Nhbi0+eHNfdm1faXRlbXMgKj0gMjsKKwllbHNlCisJCWhzY2FuLT54c192bV9p dGVtcyA9IHNjYW4tPm1heGl0ZW1zYmF0Y2g7Cit9CisKKy8qCisgKiBDb21tb24gaW1wbGVtZW50 YXRpb24gZm9yIGFsbCBmb3VyIGhlYXBhbV9pbmRleF8qX2dldG5leHRfc2xvdCB2YXJpYW50cy4K ICAqCiAgKiBUaGUgcmVzdWx0IGlzIHRydWUgaWYgYSB0dXBsZSBzYXRpc2Z5aW5nIHRoZSBzY2Fu IGtleXMgYW5kIHRoZSBzbmFwc2hvdCB3YXMKICAqIGZvdW5kLCBmYWxzZSBvdGhlcndpc2UuICBU aGUgdHVwbGUgaXMgc3RvcmVkIGluIHRoZSBzcGVjaWZpZWQgc2xvdC4KQEAgLTQwMywxMiArODUy LDEzIEBAIGhlYXBhbV9pbmRleF9mZXRjaF9oZWFwX2l0ZW0oSW5kZXhTY2FuRGVzYyBzY2FuLCBJ bmRleEZldGNoSGVhcERhdGEgKmhzY2FuLAogICogZHJvcHBlZCBieSBhIGZ1dHVyZSBjYWxsIGhl cmUgKG9yIGJ5IGEgbGF0ZXIgY2FsbCB0byBoZWFwYW1faW5kZXhfZmV0Y2hfZW5kCiAgKiB0aHJv dWdoIGluZGV4X2VuZHNjYW4pLgogICoKLSAqIFRoZSBpbmRleF9vbmx5IHBhcmFtZXRlciBpcyBh IGNvbXBpbGUtdGltZSBjb25zdGFudCBhdCBlYWNoIGNhbGwgc2l0ZSwKLSAqIGFsbG93aW5nIHRo ZSBjb21waWxlciB0byBzcGVjaWFsaXplIHRoZSBjb2RlIGZvciBlYWNoIHZhcmlhbnQuCisgKiBU aGUgaW5kZXhfb25seSBhbmQgYW1nZXRiYXRjaCBwYXJhbWV0ZXJzIGFyZSBjb21waWxlLXRpbWUg Y29uc3RhbnRzIGF0IGVhY2gKKyAqIGNhbGwgc2l0ZSwgYWxsb3dpbmcgdGhlIGNvbXBpbGVyIHRv IHNwZWNpYWxpemUgdGhlIGNvZGUgZm9yIGVhY2ggdmFyaWFudC4KICAqLwogc3RhdGljIHBnX2F0 dHJpYnV0ZV9hbHdheXNfaW5saW5lIGJvb2wKIGhlYXBhbV9pbmRleF9nZXRuZXh0X3Nsb3QoSW5k ZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcmVjdGlvbiwKLQkJCQkJCSAgVHVwbGVU YWJsZVNsb3QgKnNsb3QsIGJvb2wgaW5kZXhfb25seSkKKwkJCQkJCSAgVHVwbGVUYWJsZVNsb3Qg KnNsb3QsIGJvb2wgaW5kZXhfb25seSwKKwkJCQkJCSAgYm9vbCBhbWdldGJhdGNoKQogewogCUlu ZGV4RmV0Y2hIZWFwRGF0YSAqaHNjYW4gPSAoSW5kZXhGZXRjaEhlYXBEYXRhICopIHNjYW4tPnhz X2hlYXBmZXRjaDsKIAlib29sCSAgICpoZWFwX2NvbnRpbnVlID0gJnNjYW4tPnhzX2hlYXBfY29u dGludWU7CkBAIC00MjIsMTQgKzg3MiwyMCBAQCBoZWFwYW1faW5kZXhfZ2V0bmV4dF9zbG90KElu ZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24sCiAJCWlmICghKmhlYXBf Y29udGludWUpCiAJCXsKIAkJCS8qIEdldCB0aGUgbmV4dCBUSUQgZnJvbSB0aGUgaW5kZXggKi8K LQkJCXRpZCA9IGluZGV4X2dldG5leHRfdGlkKHNjYW4sIGRpcmVjdGlvbik7CisJCQlpZiAoYW1n ZXRiYXRjaCkKKwkJCQl0aWQgPSBoZWFwYW1faW5kZXhfZ2V0bmV4dF9zY2FuYmF0Y2hfcG9zKHNj YW4sIGhzY2FuLAorCQkJCQkJCQkJCQkJCQkgZGlyZWN0aW9uLAorCQkJCQkJCQkJCQkJCQkgaW5k ZXhfb25seSA/CisJCQkJCQkJCQkJCQkJCSAmYWxsX3Zpc2libGUgOiBOVUxMKTsKKwkJCWVsc2UK KwkJCQl0aWQgPSBpbmRleF9nZXRuZXh0X3RpZChzY2FuLCBkaXJlY3Rpb24pOwogCiAJCQkvKiBJ ZiB3ZSdyZSBvdXQgb2YgaW5kZXggZW50cmllcywgd2UncmUgZG9uZSAqLwogCQkJaWYgKHRpZCA9 PSBOVUxMKQogCQkJCWJyZWFrOwogCi0JCQkvKiBGb3IgaW5kZXgtb25seSBzY2FucywgY2hlY2sg dGhlIHZpc2liaWxpdHkgbWFwICovCi0JCQlpZiAoaW5kZXhfb25seSkKKwkJCS8qIEZvciBub24t YmF0Y2ggaW5kZXgtb25seSBzY2FucywgY2hlY2sgdGhlIHZpc2liaWxpdHkgbWFwICovCisJCQlp ZiAoaW5kZXhfb25seSAmJiAhYW1nZXRiYXRjaCkKIAkJCQlhbGxfdmlzaWJsZSA9IFZNX0FMTF9W SVNJQkxFKHNjYW4tPmhlYXBSZWxhdGlvbiwKIAkJCQkJCQkJCQkJIEl0ZW1Qb2ludGVyR2V0Qmxv Y2tOdW1iZXIodGlkKSwKIAkJCQkJCQkJCQkJICZoc2Nhbi0+eHNfdm1idWZmZXIpOwpAQCAtNDU0 LDcgKzkxMCw3IEBAIGhlYXBhbV9pbmRleF9nZXRuZXh0X3Nsb3QoSW5kZXhTY2FuRGVzYyBzY2Fu LCBTY2FuRGlyZWN0aW9uIGRpcmVjdGlvbiwKIAkJCQkJc2Nhbi0+aW5zdHJ1bWVudC0+bnRhYmxl dHVwbGVmZXRjaGVzKys7CiAKIAkJCQlpZiAoIWhlYXBhbV9pbmRleF9mZXRjaF9oZWFwX2l0ZW0o c2NhbiwgaHNjYW4sIHNsb3QsCi0JCQkJCQkJCQkJCQkgIGhlYXBfY29udGludWUpKQorCQkJCQkJ CQkJCQkJICBoZWFwX2NvbnRpbnVlLCBhbWdldGJhdGNoKSkKIAkJCQl7CiAJCQkJCS8qCiAJCQkJ CSAqIE5vIHZpc2libGUgdHVwbGUuICBJZiBjYWxsZXIgc2V0IGEgdmlzaXRlZC1wYWdlcyBsaW1p dApAQCAtNDg2LDcgKzk0Miw3IEBAIGhlYXBhbV9pbmRleF9nZXRuZXh0X3Nsb3QoSW5kZXhTY2Fu RGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcmVjdGlvbiwKIAkJCQkgKiB3YW50IHVzIHRvIGFz c3VtZSB0aGF0IGp1c3QgaGF2aW5nIG9uZSB2aXNpYmxlIHR1cGxlIGluIHRoZQogCQkJCSAqIGhv dCBjaGFpbiBpcyBhbHdheXMgZ29vZCBlbm91Z2guCiAJCQkJICovCi0JCQkJQXNzZXJ0KCEoKmhl YXBfY29udGludWUgJiYgSXNNVkNDU25hcHNob3Qoc2Nhbi0+eHNfc25hcHNob3QpKSk7CisJCQkJ QXNzZXJ0KCEoKmhlYXBfY29udGludWUgJiYgc2Nhbi0+TVZDQ1NjYW4pKTsKIAkJCX0KIAkJCWVs c2UKIAkJCXsKQEAgLTUxMyw4ICs5NjksOCBAQCBoZWFwYW1faW5kZXhfZ2V0bmV4dF9zbG90KElu ZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24sCiAJCQkgKiBlbnRyeS4g IElmIHdlIGRvbid0IGZpbmQgYW55dGhpbmcsIGxvb3AgYXJvdW5kIGFuZCBncmFiIHRoZQogCQkJ ICogbmV4dCBUSUQgZnJvbSB0aGUgaW5kZXguCiAJCQkgKi8KLQkJCWlmIChoZWFwYW1faW5kZXhf ZmV0Y2hfaGVhcF9pdGVtKHNjYW4sIGhzY2FuLCBzbG90LAotCQkJCQkJCQkJCQkgaGVhcF9jb250 aW51ZSkpCisJCQlpZiAoaGVhcGFtX2luZGV4X2ZldGNoX2hlYXBfaXRlbShzY2FuLCBoc2Nhbiwg c2xvdCwgaGVhcF9jb250aW51ZSwKKwkJCQkJCQkJCQkJIGFtZ2V0YmF0Y2gpKQogCQkJCXJldHVy biB0cnVlOwogCQl9CiAJfQpAQCAtNTIyLDE2ICs5NzgsNDAgQEAgaGVhcGFtX2luZGV4X2dldG5l eHRfc2xvdChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyZWN0aW9uLAogCXJl dHVybiBmYWxzZTsKIH0KIAorLyogeHNfZ2V0bmV4dF9zbG90IGNhbGxiYWNrOiBhbWdldGJhdGNo LCBwbGFpbiBpbmRleCBzY2FuICovCitzdGF0aWMgcGdfYXR0cmlidXRlX2hvdCBib29sCitoZWFw YW1faW5kZXhfcGxhaW5fYmF0Y2hfZ2V0bmV4dF9zbG90KEluZGV4U2NhbkRlc2Mgc2NhbiwKKwkJ CQkJCQkJCSAgU2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24sCisJCQkJCQkJCQkgIFR1cGxlVGFibGVT bG90ICpzbG90KQoreworCUFzc2VydCghc2Nhbi0+eHNfd2FudF9pdHVwICYmIHNjYW4tPnVzZWJh dGNocmluZyk7CisJQXNzZXJ0KHNjYW4tPmluZGV4UmVsYXRpb24tPnJkX2luZGFtLT5hbWdldGJh dGNoICE9IE5VTEwpOworCisJcmV0dXJuIGhlYXBhbV9pbmRleF9nZXRuZXh0X3Nsb3Qoc2Nhbiwg ZGlyZWN0aW9uLCBzbG90LCBmYWxzZSwgdHJ1ZSk7Cit9CisKKy8qIHhzX2dldG5leHRfc2xvdCBj YWxsYmFjazogYW1nZXRiYXRjaCwgaW5kZXgtb25seSBzY2FuICovCitzdGF0aWMgcGdfYXR0cmli dXRlX2hvdCBib29sCitoZWFwYW1faW5kZXhfb25seV9iYXRjaF9nZXRuZXh0X3Nsb3QoSW5kZXhT Y2FuRGVzYyBzY2FuLAorCQkJCQkJCQkJIFNjYW5EaXJlY3Rpb24gZGlyZWN0aW9uLAorCQkJCQkJ CQkJIFR1cGxlVGFibGVTbG90ICpzbG90KQoreworCUFzc2VydChzY2FuLT54c193YW50X2l0dXAg JiYgc2Nhbi0+dXNlYmF0Y2hyaW5nKTsKKwlBc3NlcnQoc2Nhbi0+aW5kZXhSZWxhdGlvbi0+cmRf aW5kYW0tPmFtZ2V0YmF0Y2ggIT0gTlVMTCk7CisKKwlyZXR1cm4gaGVhcGFtX2luZGV4X2dldG5l eHRfc2xvdChzY2FuLCBkaXJlY3Rpb24sIHNsb3QsIHRydWUsIHRydWUpOworfQorCiAvKiB4c19n ZXRuZXh0X3Nsb3QgY2FsbGJhY2s6IGFtZ2V0dHVwbGUsIHBsYWluIGluZGV4IHNjYW4gKi8KIHN0 YXRpYyBwZ19hdHRyaWJ1dGVfaG90IGJvb2wKIGhlYXBhbV9pbmRleF9wbGFpbl90dXBsZV9nZXRu ZXh0X3Nsb3QoSW5kZXhTY2FuRGVzYyBzY2FuLAogCQkJCQkJCQkJICBTY2FuRGlyZWN0aW9uIGRp cmVjdGlvbiwKIAkJCQkJCQkJCSAgVHVwbGVUYWJsZVNsb3QgKnNsb3QpCiB7Ci0JQXNzZXJ0KCFz Y2FuLT54c193YW50X2l0dXApOworCUFzc2VydCghc2Nhbi0+eHNfd2FudF9pdHVwICYmICFzY2Fu LT51c2ViYXRjaHJpbmcpOwogCUFzc2VydChzY2FuLT5pbmRleFJlbGF0aW9uLT5yZF9pbmRhbS0+ YW1nZXR0dXBsZSAhPSBOVUxMKTsKIAotCXJldHVybiBoZWFwYW1faW5kZXhfZ2V0bmV4dF9zbG90 KHNjYW4sIGRpcmVjdGlvbiwgc2xvdCwgZmFsc2UpOworCXJldHVybiBoZWFwYW1faW5kZXhfZ2V0 bmV4dF9zbG90KHNjYW4sIGRpcmVjdGlvbiwgc2xvdCwgZmFsc2UsIGZhbHNlKTsKIH0KIAogLyog eHNfZ2V0bmV4dF9zbG90IGNhbGxiYWNrOiBhbWdldHR1cGxlLCBpbmRleC1vbmx5IHNjYW4gKi8K QEAgLTU0MCw4ICsxMDIwLDggQEAgaGVhcGFtX2luZGV4X29ubHlfdHVwbGVfZ2V0bmV4dF9zbG90 KEluZGV4U2NhbkRlc2Mgc2NhbiwKIAkJCQkJCQkJCSBTY2FuRGlyZWN0aW9uIGRpcmVjdGlvbiwK IAkJCQkJCQkJCSBUdXBsZVRhYmxlU2xvdCAqc2xvdCkKIHsKLQlBc3NlcnQoc2Nhbi0+eHNfd2Fu dF9pdHVwKTsKKwlBc3NlcnQoc2Nhbi0+eHNfd2FudF9pdHVwICYmICFzY2FuLT51c2ViYXRjaHJp bmcpOwogCUFzc2VydChzY2FuLT5pbmRleFJlbGF0aW9uLT5yZF9pbmRhbS0+YW1nZXR0dXBsZSAh PSBOVUxMKTsKIAotCXJldHVybiBoZWFwYW1faW5kZXhfZ2V0bmV4dF9zbG90KHNjYW4sIGRpcmVj dGlvbiwgc2xvdCwgdHJ1ZSk7CisJcmV0dXJuIGhlYXBhbV9pbmRleF9nZXRuZXh0X3Nsb3Qoc2Nh biwgZGlyZWN0aW9uLCBzbG90LCB0cnVlLCBmYWxzZSk7CiB9CmRpZmYgLS1naXQgYS9zcmMvYmFj a2VuZC9hY2Nlc3MvaW5kZXgvTWFrZWZpbGUgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvTWFr ZWZpbGUKaW5kZXggNmYyZTMwNjFhLi5lNmQ2ODFiNDAgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5k L2FjY2Vzcy9pbmRleC9NYWtlZmlsZQorKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvTWFr ZWZpbGUKQEAgLTE2LDYgKzE2LDcgQEAgT0JKUyA9IFwKIAlhbWFwaS5vIFwKIAlhbXZhbGlkYXRl Lm8gXAogCWdlbmFtLm8gXAotCWluZGV4YW0ubworCWluZGV4YW0ubyBcCisJaW5kZXhiYXRjaC5v CiAKIGluY2x1ZGUgJCh0b3Bfc3JjZGlyKS9zcmMvYmFja2VuZC9jb21tb24ubWsKZGlmZiAtLWdp dCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9hbWFwaS5jIGIvc3JjL2JhY2tlbmQvYWNjZXNz L2luZGV4L2FtYXBpLmMKaW5kZXggZWZhMDA3MDMwLi5kNGFkYmJlYjIgMTAwNjQ0Ci0tLSBhL3Ny Yy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9hbWFwaS5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9p bmRleC9hbWFwaS5jCkBAIC01NSw2ICs1NSwxMSBAQCBHZXRJbmRleEFtUm91dGluZShPaWQgYW1o YW5kbGVyKQogCUFzc2VydChyb3V0aW5lLT5hbXJlc2NhbiAhPSBOVUxMKTsKIAlBc3NlcnQocm91 dGluZS0+YW1lbmRzY2FuICE9IE5VTEwpOwogCisJLyogQXNzZXJ0IHRoYXQgQU0gZG9lc24ndCBo YXZlIGFuIGludmFsaWQgY29tYmluYXRpb24gb2YgY2FsbGJhY2tzICovCisJQXNzZXJ0KChyb3V0 aW5lLT5hbWdldGJhdGNoICE9IE5VTEwpID09IChyb3V0aW5lLT5hbXVuZ3VhcmRiYXRjaCAhPSBO VUxMKSk7CisJQXNzZXJ0KHJvdXRpbmUtPmFta2lsbGl0ZW1zYmF0Y2ggPT0gTlVMTCB8fCByb3V0 aW5lLT5hbWdldGJhdGNoICE9IE5VTEwpOworCUFzc2VydChyb3V0aW5lLT5hbWdldGJhdGNoICE9 IE5VTEwgfHwgcm91dGluZS0+YW1wb3NyZXNldCA9PSBOVUxMKTsKKwogCXJldHVybiByb3V0aW5l OwogfQogCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvZ2VuYW0uYyBiL3Ny Yy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9nZW5hbS5jCmluZGV4IGFjYzlmM2U2YS4uMTdlYTkzYjRk IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvZ2VuYW0uYworKysgYi9zcmMv YmFja2VuZC9hY2Nlc3MvaW5kZXgvZ2VuYW0uYwpAQCAtODksNiArODksOCBAQCBSZWxhdGlvbkdl dEluZGV4U2NhbihSZWxhdGlvbiBpbmRleFJlbGF0aW9uLCBpbnQgbmtleXMsIGludCBub3JkZXJi eXMpCiAJc2Nhbi0+eHNfc25hcHNob3QgPSBJbnZhbGlkU25hcHNob3Q7CS8qIGNhbGxlciBtdXN0 IGluaXRpYWxpemUgdGhpcyAqLwogCXNjYW4tPm51bWJlck9mS2V5cyA9IG5rZXlzOwogCXNjYW4t Pm51bWJlck9mT3JkZXJCeXMgPSBub3JkZXJieXM7CisJc2Nhbi0+dXNlYmF0Y2hyaW5nID0gZmFs c2U7IC8qIHNldCBsYXRlciBmb3IgYW1nZXRiYXRjaCBjYWxsZXJzICovCisJbWVtc2V0KCZzY2Fu LT5iYXRjaGNhY2hlLCAwLCBzaXplb2Yoc2Nhbi0+YmF0Y2hjYWNoZSkpOwogCiAJLyoKIAkgKiBX ZSBhbGxvY2F0ZSBrZXkgd29ya3NwYWNlIGhlcmUsIGJ1dCBpdCB3b24ndCBnZXQgZmlsbGVkIHVu dGlsIGFtcmVzY2FuLgpAQCAtMTI2LDYgKzEyOCw5IEBAIFJlbGF0aW9uR2V0SW5kZXhTY2FuKFJl bGF0aW9uIGluZGV4UmVsYXRpb24sIGludCBua2V5cywgaW50IG5vcmRlcmJ5cykKIAlzY2FuLT54 c19oaXR1cCA9IE5VTEw7CiAJc2Nhbi0+eHNfaGl0dXBkZXNjID0gTlVMTDsKIAorCXNjYW4tPmJh dGNoX2luZGV4X29wYXF1ZV9zaXplID0gMDsKKwlzY2FuLT5iYXRjaF90dXBsZXNfd29ya3NwYWNl ID0gMDsKKwlzY2FuLT5iYXRjaF90YWJsZV9vZmZzZXQgPSAwOwogCXNjYW4tPnhzX3Zpc2l0ZWRf cGFnZXNfbGltaXQgPSAwOwogCiAJcmV0dXJuIHNjYW47CmRpZmYgLS1naXQgYS9zcmMvYmFja2Vu ZC9hY2Nlc3MvaW5kZXgvaW5kZXhhbS5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L2luZGV4 YW0uYwppbmRleCAzZmFjNGMzMGQuLjQ0MzM0NjA4OSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQv YWNjZXNzL2luZGV4L2luZGV4YW0uYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvaW5k ZXhhbS5jCkBAIC0xMyw3ICsxMyw3IEBACiAgKiBJTlRFUkZBQ0UgUk9VVElORVMKICAqCQlpbmRl eF9vcGVuCQktIG9wZW4gYW4gaW5kZXggcmVsYXRpb24gYnkgcmVsYXRpb24gT0lECiAgKgkJaW5k ZXhfY2xvc2UJCS0gY2xvc2UgYW4gaW5kZXggcmVsYXRpb24KLSAqCQlpbmRleF9iZWdpbnNjYW4g LSBzdGFydCBhIHNjYW4gb2YgYW4gaW5kZXggd2l0aCBhbWdldHR1cGxlCisgKgkJaW5kZXhfYmVn aW5zY2FuIC0gc3RhcnQgYSBzY2FuIG9mIGFuIGluZGV4IHdpdGggYW1nZXRiYXRjaC9hbWdldHR1 cGxlCiAgKgkJaW5kZXhfYmVnaW5zY2FuX2JpdG1hcCAtIHN0YXJ0IGEgc2NhbiBvZiBhbiBpbmRl eCB3aXRoIGFtZ2V0Yml0bWFwCiAgKgkJaW5kZXhfcmVzY2FuCS0gcmVzdGFydCBhIHNjYW4gb2Yg YW4gaW5kZXgKICAqCQlpbmRleF9lbmRzY2FuCS0gZW5kIGEgc2NhbgpAQCAtMjc4LDYgKzI3OCw3 IEBAIGluZGV4X2JlZ2luc2Nhbl9pbnRlcm5hbChSZWxhdGlvbiBpbmRleFJlbGF0aW9uLCBSZWxh dGlvbiBoZWFwUmVsYXRpb24sCiAJc2Nhbi0+eHNfdGVtcF9zbmFwID0gdGVtcF9zbmFwOwogCiAJ c2Nhbi0+eHNfc25hcHNob3QgPSBzbmFwc2hvdDsKKwlzY2FuLT5NVkNDU2NhbiA9IElzTVZDQ0xp a2VTbmFwc2hvdChzbmFwc2hvdCk7CiAJc2Nhbi0+aW5zdHJ1bWVudCA9IGluc3RydW1lbnQ7CiAK IAkvKgpAQCAtMjg5LDYgKzI5MCw3IEBAIGluZGV4X2JlZ2luc2Nhbl9pbnRlcm5hbChSZWxhdGlv biBpbmRleFJlbGF0aW9uLCBSZWxhdGlvbiBoZWFwUmVsYXRpb24sCiAJCXNjYW4tPmhlYXBSZWxh dGlvbiA9IGhlYXBSZWxhdGlvbjsKIAkJc2Nhbi0+eHNfd2FudF9pdHVwID0gaW5kZXhfb25seV9z Y2FuOwogCQlzY2FuLT54c19oZWFwX2NvbnRpbnVlID0gZmFsc2U7CisJCXNjYW4tPmJhdGNoSW1t ZWRpYXRlVW5ndWFyZCA9IChzY2FuLT5NVkNDU2NhbiAmJiAhaW5kZXhfb25seV9zY2FuKTsKIAog CQkvKiBwcmVwYXJlIHRvIGZldGNoIGluZGV4IG1hdGNoZXMgZnJvbSB0YWJsZSAqLwogCQlzY2Fu LT54c19oZWFwZmV0Y2ggPSB0YWJsZV9pbmRleF9mZXRjaF9iZWdpbihzY2FuLCBmbGFncyk7CkBA IC0yOTcsMTEgKzI5OSwxOSBAQCBpbmRleF9iZWdpbnNjYW5faW50ZXJuYWwoUmVsYXRpb24gaW5k ZXhSZWxhdGlvbiwgUmVsYXRpb24gaGVhcFJlbGF0aW9uLAogCQlBc3NlcnQoc2Nhbi0+eHNfZ2V0 bmV4dF9zbG90ICE9IE5VTEwpOwogCX0KIAorCS8qCisJICogQml0bWFwIGluZGV4IHNjYW5zIHNo b3VsZCBuZXZlciB1c2UgYSBiYXRjaCByaW5nIGJ1ZmZlciAodGhvdWdoIGNhbiB1c2UKKwkgKiB0 aGUgc2NhbidzIGJhdGNoIGNhY2hlKS4gIFBsYWluIGluZGV4IHNjYW5zIChhbmQgaW5kZXgtb25s eSBzY2FucykKKwkgKiBzaG91bGQgb25seSB1c2UgYSBiYXRjaCByaW5nIGJ1ZmZlciB3aXRoIGFu IGFtZ2V0YmF0Y2ggaW5kZXggQU0uCisJICovCisJQXNzZXJ0KCFzY2FuLT54c19oZWFwZmV0Y2gg PyAhc2Nhbi0+dXNlYmF0Y2hyaW5nIDoKKwkJICAgKGluZGV4UmVsYXRpb24tPnJkX2luZGFtLT5h bWdldGJhdGNoICE9IE5VTEwpID09IHNjYW4tPnVzZWJhdGNocmluZyk7CisKIAlyZXR1cm4gc2Nh bjsKIH0KIAogLyoKLSAqIGluZGV4X2JlZ2luc2NhbiAtIHN0YXJ0IGEgc2NhbiBvZiBhbiBpbmRl eCB3aXRoIGFtZ2V0dHVwbGUKKyAqIGluZGV4X2JlZ2luc2NhbiAtIHN0YXJ0IGEgc2NhbiBvZiBh biBpbmRleCB3aXRoIGFtZ2V0YmF0Y2gvYW1nZXR0dXBsZQogICoKICAqIENhbGxlciBtdXN0IGJl IGhvbGRpbmcgc3VpdGFibGUgbG9ja3Mgb24gdGhlIGhlYXAgYW5kIHRoZSBpbmRleC4KICAqLwpA QCAtMzk1LDcgKzQwNSwyMSBAQCBpbmRleF9lbmRzY2FuKEluZGV4U2NhbkRlc2Mgc2NhbikKIAlT Q0FOX0NIRUNLUzsKIAlDSEVDS19TQ0FOX1BST0NFRFVSRShhbWVuZHNjYW4pOwogCi0JLyogUmVs ZWFzZSByZXNvdXJjZXMgKGxpa2UgYnVmZmVyIHBpbnMpIGZyb20gdGFibGUgYWNjZXNzZXMgKi8K KwkvKgorCSAqIGFtZ2V0Yml0bWFwIHNjYW5zIG9mIGFuIGluZGV4IEFNIHRoYXQgc3VwcG9ydHMg YW1nZXRiYXRjaCBtYWtlIGxpbWl0ZWQKKwkgKiB1c2Ugb2YgdGhlIHNjYW4ncyBiYXRjaCBjYWNo ZS4gIENoZWNrIGZvciB0aGF0LgorCSAqLworCWlmICghc2Nhbi0+dXNlYmF0Y2hyaW5nICYmIHNj YW4tPmJhdGNoY2FjaGVbMF0gIT0gTlVMTCkKKwl7CisJCUFzc2VydChzY2FuLT54c19oZWFwZmV0 Y2ggPT0gTlVMTCk7CisJCUFzc2VydChzY2FuLT5pbmRleFJlbGF0aW9uLT5yZF9pbmRhbS0+YW1n ZXRiYXRjaCAhPSBOVUxMKTsKKwkJcGZyZWUoaW5kZXhfc2Nhbl9iYXRjaF9iYXNlKHNjYW4sIHNj YW4tPmJhdGNoY2FjaGVbMF0pKTsKKwl9CisKKwkvKgorCSAqIFJlbGVhc2UgcmVzb3VyY2VzIChs aWtlIGJ1ZmZlciBwaW5zIGFuZCBiYXRjaCByaW5nIGJ1ZmZlcikgaGVsZCBieQorCSAqIHRhYmxl IEFNIGZvciBpbmRleCBzY2FuCisJICovCiAJaWYgKHNjYW4tPnhzX2hlYXBmZXRjaCkKIAl7CiAJ CXRhYmxlX2luZGV4X2ZldGNoX2VuZChzY2FuKTsKQEAgLTQyMywyNCArNDQ3LDI0IEBAIHZvaWQK IGluZGV4X21hcmtwb3MoSW5kZXhTY2FuRGVzYyBzY2FuKQogewogCVNDQU5fQ0hFQ0tTOwotCUNI RUNLX1NDQU5fUFJPQ0VEVVJFKGFtbWFya3Bvcyk7CisJQ0hFQ0tfU0NBTl9QUk9DRURVUkUoYW1n ZXRiYXRjaCk7CiAKLQlzY2FuLT5pbmRleFJlbGF0aW9uLT5yZF9pbmRhbS0+YW1tYXJrcG9zKHNj YW4pOworCXRhYmxlX2luZGV4X2ZldGNoX21hcmtwb3Moc2Nhbik7CiB9CiAKIC8qIC0tLS0tLS0t LS0tLS0tLS0KICAqCQlpbmRleF9yZXN0cnBvcwktIHJlc3RvcmUgYSBzY2FuIHBvc2l0aW9uCiAg KgotICogTk9URTogdGhpcyBvbmx5IHJlc3RvcmVzIHRoZSBpbnRlcm5hbCBzY2FuIHN0YXRlIG9m IHRoZSBpbmRleCBBTS4gIFNlZQorICogTk9URTogdGhpcyBvbmx5IHJlc3RvcmVzIHRoZSBiYXRj aCBwb3NpdGlvbmFsIHN0YXRlIG9mIHRoZSB0YWJsZSBBTS4gIFNlZQogICogY29tbWVudHMgZm9y IEV4ZWNSZXN0clBvcygpLgogICoKICAqIE5PVEU6IEZvciBoZWFwLCBpbiB0aGUgcHJlc2VuY2Ug b2YgSE9UIGNoYWlucywgbWFyay9yZXN0b3JlIG9ubHkgd29ya3MKICAqIGNvcnJlY3RseSBpZiB0 aGUgc2NhbidzIHNuYXBzaG90IGlzIE1WQ0Mtc2FmZTsgdGhhdCBlbnN1cmVzIHRoYXQgdGhlcmUn cyBhdAogICogbW9zdCBvbmUgcmV0dXJuYWJsZSB0dXBsZSBpbiBlYWNoIEhPVCBjaGFpbiwgYW5k IHNvIHJlc3RvcmluZyB0aGUgcHJpb3IKLSAqIHN0YXRlIGF0IHRoZSBncmFudWxhcml0eSBvZiB0 aGUgaW5kZXggQU0gaXMgc3VmZmljaWVudC4gIFNpbmNlIHRoZSBvbmx5Ci0gKiBjdXJyZW50IHVz ZXIgb2YgbWFyay9yZXN0b3JlIGZ1bmN0aW9uYWxpdHkgaXMgbm9kZU1lcmdlam9pbi5jLCB0aGlz Ci0gKiBlZmZlY3RpdmVseSBtZWFucyB0aGF0IG1lcmdlLWpvaW4gcGxhbnMgb25seSB3b3JrIGZv ciBNVkNDIHNuYXBzaG90cy4gIFRoaXMKLSAqIGNvdWxkIGJlIGZpeGVkIGlmIG5lY2Vzc2FyeSwg YnV0IGZvciBub3cgaXQgc2VlbXMgdW5pbXBvcnRhbnQuCisgKiBzdGF0ZSBhdCB0aGUgc2NhbiBp dGVtIGdyYW51bGFyaXR5IGlzIHN1ZmZpY2llbnQuICBTaW5jZSB0aGUgb25seSBjdXJyZW50Cisg KiB1c2VyIG9mIG1hcmsvcmVzdG9yZSBmdW5jdGlvbmFsaXR5IGlzIG5vZGVNZXJnZWpvaW4uYywg dGhpcyBlZmZlY3RpdmVseQorICogbWVhbnMgdGhhdCBtZXJnZS1qb2luIHBsYW5zIG9ubHkgd29y ayBmb3IgTVZDQyBzbmFwc2hvdHMuICBUaGlzIGNvdWxkIGJlCisgKiBmaXhlZCBpZiBuZWNlc3Nh cnksIGJ1dCBmb3Igbm93IGl0IHNlZW1zIHVuaW1wb3J0YW50LgogICogLS0tLS0tLS0tLS0tLS0t LQogICovCiB2b2lkCkBAIC00NDksMTYgKzQ3MywxMSBAQCBpbmRleF9yZXN0cnBvcyhJbmRleFNj YW5EZXNjIHNjYW4pCiAJQXNzZXJ0KElzTVZDQ0xpa2VTbmFwc2hvdChzY2FuLT54c19zbmFwc2hv dCkpOwogCiAJU0NBTl9DSEVDS1M7Ci0JQ0hFQ0tfU0NBTl9QUk9DRURVUkUoYW1yZXN0cnBvcyk7 CisJQ0hFQ0tfU0NBTl9QUk9DRURVUkUoYW1nZXRiYXRjaCk7CiAKLQkvKiByZXNldCB0YWJsZSBB TSBzdGF0ZSBmb3IgcmVzdG9yaW5nIHRoZSBtYXJrZWQgcG9zaXRpb24gKi8KLQlpZiAoc2Nhbi0+ eHNfaGVhcGZldGNoKQotCQl0YWJsZV9pbmRleF9mZXRjaF9yZXNldChzY2FuKTsKLQotCXNjYW4t PmtpbGxfcHJpb3JfdHVwbGUgPSBmYWxzZTsgLyogZm9yIHNhZmV0eSAqLwogCXNjYW4tPnhzX2hl YXBfY29udGludWUgPSBmYWxzZTsKIAotCXNjYW4tPmluZGV4UmVsYXRpb24tPnJkX2luZGFtLT5h bXJlc3RycG9zKHNjYW4pOworCXRhYmxlX2luZGV4X2ZldGNoX3Jlc3RycG9zKHNjYW4pOwogfQog CiAvKgpAQCAtNjMyLDYgKzY1MSw3IEBAIGluZGV4X2dldG5leHRfdGlkKEluZGV4U2NhbkRlc2Mg c2NhbiwgU2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24pCiAKIAlTQ0FOX0NIRUNLUzsKIAlDSEVDS19T Q0FOX1BST0NFRFVSRShhbWdldHR1cGxlKTsKKwlBc3NlcnQoIXNjYW4tPnVzZWJhdGNocmluZyk7 CiAKIAkvKiBYWFg6IHdlIHNob3VsZCBhc3NlcnQgdGhhdCBhIHNuYXBzaG90IGlzIHB1c2hlZCBv ciByZWdpc3RlcmVkICovCiAJQXNzZXJ0KFRyYW5zYWN0aW9uSWRJc1ZhbGlkKFJlY2VudFhtaW4p KTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9pbmRleGJhdGNoLmMgYi9z cmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvaW5kZXhiYXRjaC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0 CmluZGV4IDAwMDAwMDAwMC4uYjJiM2FmZTgwCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2JhY2tl bmQvYWNjZXNzL2luZGV4L2luZGV4YmF0Y2guYwpAQCAtMCwwICsxLDcyNiBAQAorLyotLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCisgKgorICogaW5kZXhiYXRjaC5jCisgKgkgIEJhdGNoLWJhc2VkIGluZGV4IHNj YW4gaW5mcmFzdHJ1Y3R1cmUgZm9yIHRoZSBhbWdldGJhdGNoIGludGVyZmFjZS4KKyAqCisgKiBU aGlzIG1vZHVsZSBwcm92aWRlcyB0aGUgY29yZSBpbmZyYXN0cnVjdHVyZSBmb3IgYmF0Y2gtYmFz ZWQgaW5kZXggc2NhbnMsCisgKiB3aGljaCBhbGxvdyBpbmRleCBBTXMgdG8gcmV0dXJuIG11bHRp cGxlIG1hdGNoaW5nIFRJRHMgcGVyIHBhZ2UgaW4gYSBzaW5nbGUKKyAqIGNhbGwuICBUaGUgYmF0 Y2ggcmluZyBidWZmZXIgaXMgb3duZWQgYnkgdGhlIHRhYmxlIEFNLgorICoKKyAqIFRoZSByaW5n IGJ1ZmZlciBsb2FkcyBiYXRjaGVzIGluIGluZGV4IGtleSBzcGFjZS9pbmRleCBzY2FuIG9yZGVy LgorICoKKyAqIE1vc3QgZnVuY3Rpb25zIGhlcmUgYXJlIHRhYmxlIEFNIHV0aWxpdGllcyAodGFi bGVhbV91dGlsXyopLCBjYWxsZWQgYnkKKyAqIHRhYmxlIEFNcyBkdXJpbmcgYW1nZXRiYXRjaCBp bmRleCBzY2Fucy4gIFRoZXNlIG1hbmFnZSB0aGUgYmF0Y2ggcmluZworICogYnVmZmVyJ3MgbGlm ZWN5Y2xlIGFuZCBwb3NpdGlvbmFsIHN0YXRlLCBhbmQgaGVscCB3aXRoIGNlcnRhaW4gYXNwZWN0 cyBvZgorICogcmVzb3VyY2UgbWFuYWdlbWVudC4gIFRoZSB0YWJsZSBBTSB1c2VzIHNjYW5Qb3Mg KGFuZCBpdHMgc2NhbkJhdGNoIGJhdGNoKQorICogdG8gcmV0dXJuIGl0ZW1zIGZyb20gYmF0Y2hl cyByZXR1cm5lZCBieSBhbWdldGJhdGNoLgorICoKKyAqIFRoZXJlIGFyZSBhbHNvIHNvbWUgaW5k ZXggQU0gdXRpbGl0aWVzIChpbmRleGFtX3V0aWxfKiksIGNhbGxlZCBieSBpbmRleAorICogQU1z IHRoYXQgaW1wbGVtZW50IHRoZSBhbWdldGJhdGNoIGludGVyZmFjZSwgdG8gaGVscCBtYW5hZ2Ug cmVzb3VyY2VzIGxpa2UKKyAqIG1lbW9yeSwgbG9ja3MsIGFuZCBidWZmZXIgcGlucy4gIEluZGV4 IEFNcyBmcmVlIGFuZCB1bmxvY2sgYmF0Y2hlcyBhcworICogZGVzY3JpYmVkIGluIGluZGV4YW0u c2dtbC4KKyAqCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTYtMjAyNiwgUG9zdGdyZVNR TCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5 NCwgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhCisgKgorICoKKyAqIElE RU5USUZJQ0FUSU9OCisgKgkgIHNyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9pbmRleGJhdGNoLmMK KyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworCisjaW5jbHVkZSAicG9zdGdyZXMuaCIKKwor I2luY2x1ZGUgImFjY2Vzcy9hbWFwaS5oIgorI2luY2x1ZGUgImFjY2Vzcy9pbmRleGJhdGNoLmgi CisjaW5jbHVkZSAiYWNjZXNzL3RhYmxlYW0uaCIKKyNpbmNsdWRlICJjb21tb24vaW50LmgiCisj aW5jbHVkZSAibGliL3F1bmlxdWUuaCIKKworc3RhdGljIHZvaWQgYmF0Y2hfZnJlZShJbmRleFNj YW5EZXNjIHNjYW4sIEluZGV4U2NhbkJhdGNoIGJhdGNoLAorCQkJCQkgICBib29sIGFsbG93X2Nh Y2hlKTsKK3N0YXRpYyBpbmxpbmUgYm9vbCBiYXRjaF9jYWNoZV9zdG9yZShJbmRleFNjYW5EZXNj IHNjYW4sIEluZGV4U2NhbkJhdGNoIGJhdGNoKTsKK3N0YXRpYyBpbnQJYmF0Y2hfY29tcGFyZV9p bnQoY29uc3Qgdm9pZCAqdmEsIGNvbnN0IHZvaWQgKnZiKTsKKworLyoKKyAqIFJlc2V0IHJpbmcg YnVmZmVyIGFuZCByZWxhdGVkIHBvc2l0aW9uYWwgc3RhdGUgdXNlZCBkdXJpbmcgYW4gYW1nZXRi YXRjaAorICogaW5kZXggc2NhbgorICovCit2b2lkCit0YWJsZWFtX3V0aWxfYmF0Y2hzY2FuX3Jl c2V0KEluZGV4U2NhbkRlc2Mgc2NhbiwgYm9vbCBlbmRzY2FuKQoreworCUJhdGNoUmluZ0J1ZmZl ciAqYmF0Y2hyaW5nYnVmID0gJnNjYW4tPmJhdGNocmluZ2J1ZjsKKwlJbmRleFNjYW5CYXRjaCBt YXJrQmF0Y2ggPSBiYXRjaHJpbmdidWYtPm1hcmtCYXRjaDsKKwlib29sCQltYXJrQmF0Y2hGcmVl ZCA9IGZhbHNlOworCisJYmF0Y2hyaW5nYnVmLT5zY2FuUG9zLnZhbGlkID0gZmFsc2U7CisJYmF0 Y2hyaW5nYnVmLT5tYXJrUG9zLnZhbGlkID0gZmFsc2U7CisKKwkvKiBFbnN1cmUgYmF0Y2hfZnJl ZSB3b24ndCBza2lwIHRoZSBvbGQgbWFya0JhdGNoIGluIHRoZSBsb29wIGJlbG93ICovCisJYmF0 Y2hyaW5nYnVmLT5tYXJrQmF0Y2ggPSBOVUxMOworCisJZm9yICh1aW50OCBpID0gYmF0Y2hyaW5n YnVmLT5oZWFkQmF0Y2g7IGkgIT0gYmF0Y2hyaW5nYnVmLT5uZXh0QmF0Y2g7IGkrKykKKwl7CisJ CUluZGV4U2NhbkJhdGNoIGJhdGNoID0gaW5kZXhfc2Nhbl9iYXRjaChzY2FuLCBpKTsKKworCQlp ZiAoYmF0Y2ggPT0gbWFya0JhdGNoKQorCQkJbWFya0JhdGNoRnJlZWQgPSB0cnVlOworCisJCWJh dGNoX2ZyZWUoc2NhbiwgYmF0Y2gsICFlbmRzY2FuKTsKKwl9CisKKwlpZiAoIW1hcmtCYXRjaEZy ZWVkICYmIHVubGlrZWx5KG1hcmtCYXRjaCkpCisJCWJhdGNoX2ZyZWUoc2NhbiwgbWFya0JhdGNo LCAhZW5kc2Nhbik7CisKKwliYXRjaHJpbmdidWYtPmhlYWRCYXRjaCA9IDA7CisJYmF0Y2hyaW5n YnVmLT5uZXh0QmF0Y2ggPSAwOworfQorCisvKgorICogRnJlZSByZXNvdXJjZXMgYXQgZW5kIG9m IGEgYmF0Y2ggaW5kZXggc2Nhbi4KKyAqCisgKiBDYWxsZWQgYnkgdGFibGUgQU0gd2hlbiBhbiBp bmRleCBzY2FuIGlzIGVuZGluZywgcmlnaHQgYmVmb3JlIHRoZSBvd25pbmcKKyAqIHNjYW4gZGVz Y3JpcHRvciBnb2VzIGF3YXkuICBDbGVhbnMgdXAgYWxsIGJhdGNoIHJlbGF0ZWQgcmVzb3VyY2Vz LgorICovCit2b2lkCit0YWJsZWFtX3V0aWxfYmF0Y2hzY2FuX2VuZChJbmRleFNjYW5EZXNjIHNj YW4pCit7CisJLyogRnJlZSBhbGwgcmVtYWluaW5nIGxvYWRlZCBiYXRjaGVzIChldmVuIG1hcmtC YXRjaCksIGJ5cGFzc2luZyBjYWNoZSAqLworCXRhYmxlYW1fdXRpbF9iYXRjaHNjYW5fcmVzZXQo c2NhbiwgdHJ1ZSk7CisKKwlmb3IgKGludCBpID0gMDsgaSA8IElOREVYX1NDQU5fQ0FDSEVfQkFU Q0hFUzsgaSsrKQorCXsKKwkJSW5kZXhTY2FuQmF0Y2ggY2FjaGVkID0gc2Nhbi0+YmF0Y2hjYWNo ZVtpXTsKKworCQlpZiAoY2FjaGVkID09IE5VTEwpCisJCQljb250aW51ZTsKKworCQlpZiAoY2Fj aGVkLT5kZWFkSXRlbXMpCisJCQlwZnJlZShjYWNoZWQtPmRlYWRJdGVtcyk7CisJCXBmcmVlKGlu ZGV4X3NjYW5fYmF0Y2hfYmFzZShzY2FuLCBjYWNoZWQpKTsKKwl9Cit9CisKKy8qCisgKiBTZXQg YSBtYXJrIGZyb20gc2NhblBvcyBwb3NpdGlvbgorICoKKyAqIENhbGxlZCBmcm9tIHRoZSB0YWJs ZSBBTSdzIGluZGV4X2ZldGNoX21hcmtwb3MgY2FsbGJhY2suICBTYXZlcyB0aGUgY3VycmVudAor ICogc2NhbiBwb3NpdGlvbiBhbmQgYXNzb2NpYXRlZCBiYXRjaCBzbyB0aGF0IHRoZSBzY2FuIGNh biBiZSByZXN0b3JlZCB0byB0aGlzCisgKiBwb2ludCBsYXRlciwgdmlhIHRhYmxlYW1fdXRpbF9i YXRjaHNjYW5fcmVzdG9yZV9wb3MuICBUaGUgbWFya2VkIGJhdGNoIGlzCisgKiByZXRhaW5lZCBh bmQgbm90IGZyZWVkIHVudGlsIGEgbmV3IG1hcmsgaXMgc2V0IG9yIHRoZSBzY2FuIGVuZHMgKG9y IHVudGlsCisgKiB0aGUgbWFyayBpcyByZXN0b3JlZCkuCisgKi8KK3ZvaWQKK3RhYmxlYW1fdXRp bF9iYXRjaHNjYW5fbWFya19wb3MoSW5kZXhTY2FuRGVzYyBzY2FuKQoreworCUJhdGNoUmluZ0J1 ZmZlciAqYmF0Y2hyaW5nYnVmID0gJnNjYW4tPmJhdGNocmluZ2J1ZjsKKwlCYXRjaFJpbmdJdGVt UG9zICpzY2FuUG9zID0gJnNjYW4tPmJhdGNocmluZ2J1Zi5zY2FuUG9zOworCUJhdGNoUmluZ0l0 ZW1Qb3MgKm1hcmtQb3MgPSAmYmF0Y2hyaW5nYnVmLT5tYXJrUG9zOworCUluZGV4U2NhbkJhdGNo IHNjYW5CYXRjaCA9IGluZGV4X3NjYW5fYmF0Y2goc2Nhbiwgc2NhblBvcy0+YmF0Y2gpOworCUlu ZGV4U2NhbkJhdGNoIG1hcmtCYXRjaCA9IGJhdGNocmluZ2J1Zi0+bWFya0JhdGNoOworCWJvb2wJ CWZyZWVNYXJrQmF0Y2g7CisKKwlBc3NlcnQoc2Nhbi0+TVZDQ1NjYW4pOworCisJLyoKKwkgKiBG cmVlIHRoZSBwcmV2aW91cyBtYXJrIGJhdGNoIChpZiBhbnkpIC0tIGJ1dCBvbmx5IGlmIGl0IGlz bid0IG91cgorCSAqIHNjYW5CYXRjaCAoZGVmZW5zaXZlbHkgbWFrZSBzdXJlIHRoYXQgbWFya0Jh dGNoIGlzbid0IHNvbWUgbGF0ZXIKKwkgKiBzdGlsbC1uZWVkZWQgYmF0Y2gsIHRvbykKKwkgKi8K KwlpZiAoIW1hcmtCYXRjaCB8fCBtYXJrQmF0Y2ggPT0gc2NhbkJhdGNoKQorCXsKKwkJLyogRGVm aW5pdGVseSBubyBtYXJrQmF0Y2ggdGhhdCB3ZSBzaG91bGQgZnJlZSBub3cgKi8KKwkJZnJlZU1h cmtCYXRjaCA9IGZhbHNlOworCX0KKwllbHNlIGlmIChsaWtlbHkoIWluZGV4X3NjYW5fYmF0Y2hf bG9hZGVkKHNjYW4sIG1hcmtQb3MtPmJhdGNoKSkpCisJeworCQkvKiBEZWZpbml0ZWx5IGhhdmUg YSBuby1sb25nZXItbG9hZGVkIG1hcmtCYXRjaCB0byBmcmVlICovCisJCWZyZWVNYXJrQmF0Y2gg PSB0cnVlOworCX0KKwllbHNlCisJeworCQkvKgorCQkgKiBpbmRleF9zY2FuX2JhdGNoX2xvYWRl ZCBpbmRpY2F0ZXMgdGhhdCBtYXJrUG9zLT5iYXRjaCBpcyBsb2FkZWQsCisJCSAqIGJ1dCBhZnRl ciB1aW50OCB3cmFwYXJvdW5kIGEgc3RhbGUgYmF0Y2ggb2Zmc2V0IGNhbiBhbGlhcyBhCisJCSAq IGN1cnJlbnRseS1sb2FkZWQgcmFuZ2UgKGZhbHNlIHBvc2l0aXZlKS4gIENvbmZpcm0gYnkgY2hl Y2tpbmcKKwkJICogd2hldGhlciB0aGUgYmF0Y2ggcG9pbnRlciBpbiBtYXJrUG9zLT5iYXRjaCdz IHNsb3Qgc3RpbGwgbWF0Y2hlcy4KKwkJICovCisJCWZyZWVNYXJrQmF0Y2ggPSAoaW5kZXhfc2Nh bl9iYXRjaChzY2FuLCBtYXJrUG9zLT5iYXRjaCkgIT0gbWFya0JhdGNoKTsKKwl9CisKKwlpZiAo ZnJlZU1hcmtCYXRjaCkKKwl7CisJCS8qIEZyZWUgbWFya0JhdGNoLCBzaW5jZSBpdCBpc24ndCBs b2FkZWQvbmVlZGVkIGZvciBiYXRjaHJpbmdidWYgKi8KKwkJYmF0Y2hyaW5nYnVmLT5tYXJrQmF0 Y2ggPSBOVUxMOyAvKiBlbHNlIGNhbGwgd29uJ3QgZnJlZSBtYXJrQmF0Y2ggKi8KKwkJdGFibGVh bV91dGlsX2ZyZWVfYmF0Y2goc2NhbiwgbWFya0JhdGNoKTsKKwl9CisKKwkvKiBjb3B5IHRoZSBz Y2FuJ3MgcG9zaXRpb24gKi8KKwliYXRjaHJpbmdidWYtPm1hcmtQb3MgPSAqc2NhblBvczsKKwli YXRjaHJpbmdidWYtPm1hcmtCYXRjaCA9IHNjYW5CYXRjaDsKK30KKworLyoKKyAqIFJlc3RvcmUg c2NhblBvcyB0byB0aGUgcHJldmlvdXNseSBzYXZlZCBtYXJrUG9zIHBvc2l0aW9uLgorICoKKyAq IENhbGxlZCBmcm9tIHRoZSB0YWJsZSBBTSdzIGluZGV4X2ZldGNoX3Jlc3RycG9zIGNhbGxiYWNr LiAgUmVzdG9yZXMgdGhlCisgKiBzY2FuIHRvIGEgcG9zaXRpb24gc2F2ZWQgdXNpbmcgdGFibGVh bV91dGlsX2JhdGNoc2Nhbl9tYXJrX3BvcyBlYXJsaWVyLgorICogVGhlIHNjYW4ncyBtYXJrUG9z IGJlY29tZXMgaXRzIHNjYW5Qb3MuICBUaGUgbWFya2VkIGJhdGNoIGlzIHJlc3RvcmVkIGFzCisg KiB0aGUgY3VycmVudCBzY2FuQmF0Y2ggd2hlbiBuZWVkZWQuCisgKgorICogV2UganVzdCBkaXNj YXJkIGFsbCBiYXRjaGVzIChvdGhlciB0aGFuIG1hcmtCYXRjaC9yZXN0b3JlZCBzY2FuQmF0Y2gp LAorICogZXhjZXB0IHdoZW4gbWFya0JhdGNoIGlzIGFscmVhZHkgdGhlIHNjYW4ncyBjdXJyZW50 IHNjYW5CYXRjaC4KKyAqLwordm9pZAordGFibGVhbV91dGlsX2JhdGNoc2Nhbl9yZXN0b3JlX3Bv cyhJbmRleFNjYW5EZXNjIHNjYW4pCit7CisJQmF0Y2hSaW5nQnVmZmVyICpiYXRjaHJpbmdidWYg PSAmc2Nhbi0+YmF0Y2hyaW5nYnVmOworCUJhdGNoUmluZ0l0ZW1Qb3MgKnNjYW5Qb3MgPSAmc2Nh bi0+YmF0Y2hyaW5nYnVmLnNjYW5Qb3M7CisJQmF0Y2hSaW5nSXRlbVBvcyAqbWFya1BvcyA9ICZi YXRjaHJpbmdidWYtPm1hcmtQb3M7CisJSW5kZXhTY2FuQmF0Y2ggbWFya0JhdGNoID0gYmF0Y2hy aW5nYnVmLT5tYXJrQmF0Y2g7CisJSW5kZXhTY2FuQmF0Y2ggc2NhbkJhdGNoID0gaW5kZXhfc2Nh bl9iYXRjaChzY2FuLCBzY2FuUG9zLT5iYXRjaCk7CisKKwlBc3NlcnQoc2Nhbi0+TVZDQ1NjYW4p OworCUFzc2VydChzY2FuLT54c19oZWFwZmV0Y2gpOworCUFzc2VydChtYXJrUG9zLT52YWxpZCk7 CisKKwlpZiAoc2NhbkJhdGNoID09IG1hcmtCYXRjaCkKKwl7CisJCS8qIG1hcmtCYXRjaCBpcyBh bHJlYWR5IHNjYW5CYXRjaDsgbmVlZG4ndCBjaGFuZ2UgYmF0Y2hyaW5nYnVmICovCisJCUFzc2Vy dChzY2FuUG9zLT5iYXRjaCA9PSBtYXJrUG9zLT5iYXRjaCk7CisKKwkJc2NhblBvcy0+aXRlbSA9 IG1hcmtQb3MtPml0ZW07CisJCXJldHVybjsKKwl9CisKKwkvKgorCSAqIG1hcmtCYXRjaCBpcyBi ZWhpbmQgc2NhbkJhdGNoLCBhbmQgc28gbXVzdCBub3QgYmUgc2F2ZWQgaW4gcmluZyBidWZmZXIK KwkgKiBhbnltb3JlLiAgV2UgaGF2ZSB0byBkZWFsIHdpdGggcmVzdG9yaW5nIHRoZSBtYXJrIHRo ZSBoYXJkIHdheTogYnkKKwkgKiBpbnZhbGlkYXRpbmcgYWxsIG90aGVyIGxvYWRlZCBiYXRjaGVz LiAgVGhpcyBpcyBzaW1pbGFyIHRvIHRoZSBjYXNlCisJICogd2hlcmUgdGhlIHNjYW4gZGlyZWN0 aW9uIGNoYW5nZXMgYW5kIHRoZSBzY2FuIGFjdHVhbGx5IGNyb3NzZXMKKwkgKiBiYXRjaC9pbmRl eCBwYWdlIGJvdW5kYXJpZXMgKHNlZSB0YWJsZWFtX3V0aWxfc2NhbmJhdGNoX2RpcmNoYW5nZSku CisJICoKKwkgKiBGaXJzdCwgZnJlZSBhbGwgYmF0Y2hlcyB0aGF0IGFyZSBzdGlsbCBpbiB0aGUg cmluZyBidWZmZXIuCisJICovCisJZm9yICh1aW50OCBpID0gYmF0Y2hyaW5nYnVmLT5oZWFkQmF0 Y2g7IGkgIT0gYmF0Y2hyaW5nYnVmLT5uZXh0QmF0Y2g7IGkrKykKKwl7CisJCUluZGV4U2NhbkJh dGNoIGJhdGNoID0gaW5kZXhfc2Nhbl9iYXRjaChzY2FuLCBpKTsKKworCQlBc3NlcnQoYmF0Y2gg IT0gbWFya0JhdGNoKTsKKworCQl0YWJsZWFtX3V0aWxfZnJlZV9iYXRjaChzY2FuLCBiYXRjaCk7 CisJfQorCisJLyoKKwkgKiBOZXh0ICJhcHBlbmQiIHN0YW5kYWxvbmUgbWFya0JhdGNoLCB3aGlj aCB3aWxsIGJlY29tZSBzY2FuQmF0Y2gKKwkgKiAoc2NhbkJhdGNoIGlzIGFsd2F5cyB0aGUgcmlu ZyBidWZmZXIncyBoZWFkQmF0Y2gpCisJICovCisJbWFya1Bvcy0+YmF0Y2ggPSAwOworCWJhdGNo cmluZ2J1Zi0+c2NhblBvcyA9ICptYXJrUG9zOworCWJhdGNocmluZ2J1Zi0+bmV4dEJhdGNoID0g YmF0Y2hyaW5nYnVmLT5oZWFkQmF0Y2ggPSBtYXJrUG9zLT5iYXRjaDsKKwlpbmRleF9zY2FuX2Jh dGNoX2FwcGVuZChzY2FuLCBtYXJrQmF0Y2gpOworCUFzc2VydChpbmRleF9zY2FuX2JhdGNoKHNj YW4sIGJhdGNocmluZ2J1Zi0+c2NhblBvcy5iYXRjaCkgPT0gbWFya0JhdGNoKTsKKworCS8qCisJ ICogRmluYWxseSwgY2FsbCBhbXBvc3Jlc2V0IHRvIGxldCBpbmRleCBBTSBrbm93IHRvIGludmFs aWRhdGUgYW55IHByaXZhdGUKKwkgKiBzdGF0ZSB0aGF0IGluZGVwZW5kZW50bHkgdHJhY2tzIHRo ZSBzY2FuJ3MgcHJvZ3Jlc3MKKwkgKi8KKwlpZiAoc2Nhbi0+aW5kZXhSZWxhdGlvbi0+cmRfaW5k YW0tPmFtcG9zcmVzZXQpCisJCXNjYW4tPmluZGV4UmVsYXRpb24tPnJkX2luZGFtLT5hbXBvc3Jl c2V0KHNjYW4sIG1hcmtCYXRjaCk7CisKKwkvKgorCSAqIE5vdGU6IG1hcmtCYXRjaC5kZWFkSXRl bXNbXSBtaWdodCBhbHJlYWR5IGNvbnRhaW4gZGVhZCBpdGVtcywgYW5kIG1pZ2h0CisJICogeWV0 IGhhdmUgbW9yZSBkZWFkIGl0ZW1zIHNhdmVkLiAgdGFibGVhbV91dGlsX2ZyZWVfYmF0Y2ggaXMg cHJlcGFyZWQKKwkgKiBmb3IgdGhhdC4KKwkgKi8KK30KKworLyoKKyAqIEhhbmRsZSBjcm9zcy1i YXRjaCBjaGFuZ2UgaW4gc2NhbiBkaXJlY3Rpb24KKyAqCisgKiBDYWxsZWQgYnkgdGFibGUgQU0g d2hlbiBpdHMgc2NhbiBjaGFuZ2VzIGRpcmVjdGlvbiBpbiBhIHdheSB0aGF0CisgKiBuZWNlc3Np dGF0ZXMgYmFja2luZyB0aGUgc2NhbiB1cCB0byBhbiBpbmRleCBwYWdlIG9yaWdpbmFsbHkgYXNz b2NpYXRlZAorICogd2l0aCBhIG5vdy1mcmVlZCBiYXRjaC4KKyAqCisgKiBXaGVuIHdlIHJldHVy biwgYmF0Y2hyaW5nYnVmIHdpbGwgb25seSBjb250YWluIG9uZSBiYXRjaCAodGhlIGN1cnJlbnQK KyAqIGhlYWRCYXRjaC9zY2FuQmF0Y2gpIGFuZCB3aWxsIGxvb2sgYXMgaWYgdGhlIG5ldyBzY2Fu IGRpcmVjdGlvbiBoYWQgYmVlbgorICogdXNlZCBmcm9tIHRoZSBzdGFydC4gIENhbGxlciBjYW4g dGhlbiBzYWZlbHkgcGFzcyB0aGlzIGJhdGNoIHRvIGFtZ2V0YmF0Y2gKKyAqIHRvIGRldGVybWlu ZSB3aGljaCBiYXRjaCBjb21lcyBuZXh0IGluIHRoZSBuZXcgc2NhbiBkaXJlY3Rpb24uICBUaGlz CisgKiBhcHByb2FjaCBpc24ndCBwYXJ0aWN1bGFybHkgZWZmaWNpZW50LCBidXQgaXQgd29ya3Mg d2VsbCBlbm91Z2ggZm9yIHdoYXQKKyAqIG91Z2h0IHRvIGJlIGEgcmVsYXRpdmVseSByYXJlIG9j Y3VycmVuY2UuCisgKi8KK3ZvaWQKK3RhYmxlYW1fdXRpbF9zY2FuYmF0Y2hfZGlyY2hhbmdlKElu ZGV4U2NhbkRlc2Mgc2NhbikKK3sKKwlCYXRjaFJpbmdCdWZmZXIgKmJhdGNocmluZ2J1ZiA9ICZz Y2FuLT5iYXRjaHJpbmdidWY7CisJSW5kZXhTY2FuQmF0Y2ggc2NhbkJhdGNoOworCisJLyoKKwkg KiBSZWxlYXNlIGJhdGNoZXMgc3RhcnRpbmcgZnJvbSB0aGUgY3VycmVudCAidGFpbCIgYmF0Y2gs IHdvcmtpbmcKKwkgKiBiYWNrd2FyZHMgdW50aWwgdGhlIGN1cnJlbnQgaGVhZCBiYXRjaCAod2hp Y2ggaXMgYWxzbyB0aGUgY3VycmVudAorCSAqIHNjYW5CYXRjaCkgaXMgdGhlIG9ubHkgYmF0Y2gg aGFzbid0IGJlZW4gZnJlZWQKKwkgKi8KKwl3aGlsZSAoaW5kZXhfc2Nhbl9iYXRjaF9jb3VudChz Y2FuKSA+IDEpCisJeworCQl1aW50OAkJdGFpbGlkeCA9IGJhdGNocmluZ2J1Zi0+bmV4dEJhdGNo IC0gMTsKKwkJSW5kZXhTY2FuQmF0Y2ggdGFpbCA9IGluZGV4X3NjYW5fYmF0Y2goc2NhbiwgdGFp bGlkeCk7CisKKwkJQXNzZXJ0KHRhaWxpZHggIT0gYmF0Y2hyaW5nYnVmLT5zY2FuUG9zLmJhdGNo KTsKKworCQl0YWJsZWFtX3V0aWxfZnJlZV9iYXRjaChzY2FuLCB0YWlsKTsKKwkJYmF0Y2hyaW5n YnVmLT5uZXh0QmF0Y2gtLTsKKwl9CisKKwkvKiBzY2FuQmF0Y2ggaXMgbm93IHRoZSBvbmx5IGJh dGNoIHN0aWxsIGxvYWRlZCAqLworCUFzc2VydChiYXRjaHJpbmdidWYtPmhlYWRCYXRjaCA9PSBi YXRjaHJpbmdidWYtPnNjYW5Qb3MuYmF0Y2gpOworCXNjYW5CYXRjaCA9IGluZGV4X3NjYW5fYmF0 Y2goc2NhbiwgYmF0Y2hyaW5nYnVmLT5oZWFkQmF0Y2gpOworCisJLyoKKwkgKiBGbGlwIHNjYW5C YXRjaCdzIHNjYW4gZGlyZWN0aW9uIHRvIHJlZmxlY3QgdGhlIHJldmVyc2FsLiAgQWxzbyByZXNl dAorCSAqIGFueSBpbmRleCBBTSBzdGF0ZSB0aGF0IGluZGVwZW5kZW50bHkgdHJhY2tzIHNjYW4g cHJvZ3Jlc3MuCisJICovCisJc2NhbkJhdGNoLT5kaXIgPSAtc2NhbkJhdGNoLT5kaXI7CisJaWYg KHNjYW4tPmluZGV4UmVsYXRpb24tPnJkX2luZGFtLT5hbXBvc3Jlc2V0KQorCQlzY2FuLT5pbmRl eFJlbGF0aW9uLT5yZF9pbmRhbS0+YW1wb3NyZXNldChzY2FuLCBzY2FuQmF0Y2gpOworfQorCisv KgorICogUmVjb3JkIHRoYXQgc2NhblBvcyBpdGVtIGlzIGRlYWQKKyAqCisgKiBSZWNvcmRzIGFu IG9mZnNldCB0byB0aGUgY3VycmVudCBzY2FuQmF0Y2gvc2NhblBvcyBpdGVtLCBzYXZpbmcgaXQg aW4KKyAqIHNjYW5CYXRjaCdzIGRlYWRJdGVtcyBhcnJheS4gIFRoZSBpdGVtcycgaW5kZXggdHVw bGVzIHdpbGwgbGF0ZXIgYmUKKyAqIG1hcmtlZCBMUF9ERUFEIHdoZW4gY3VycmVudCBzY2FuQmF0 Y2ggaXMgZnJlZWQuCisgKi8KK3ZvaWQKK3RhYmxlYW1fdXRpbF9zY2FucG9zX2tpbGxpdGVtKElu ZGV4U2NhbkRlc2Mgc2NhbikKK3sKKwlCYXRjaFJpbmdJdGVtUG9zICpzY2FuUG9zID0gJnNjYW4t PmJhdGNocmluZ2J1Zi5zY2FuUG9zOworCUluZGV4U2NhbkJhdGNoIHNjYW5CYXRjaCA9IGluZGV4 X3NjYW5fYmF0Y2goc2Nhbiwgc2NhblBvcy0+YmF0Y2gpOworCisJaWYgKHNjYW5CYXRjaC0+ZGVh ZEl0ZW1zID09IE5VTEwpCisJCXNjYW5CYXRjaC0+ZGVhZEl0ZW1zID0gcGFsbG9jX2FycmF5KGlu dCwgc2Nhbi0+bWF4aXRlbXNiYXRjaCk7CisJaWYgKHNjYW5CYXRjaC0+bnVtRGVhZCA8IHNjYW4t Pm1heGl0ZW1zYmF0Y2gpCisJCXNjYW5CYXRjaC0+ZGVhZEl0ZW1zW3NjYW5CYXRjaC0+bnVtRGVh ZCsrXSA9IHNjYW5Qb3MtPml0ZW07Cit9CisKKy8qCisgKiBSZWxlYXNlIHJlc291cmNlcyBhc3Nv Y2lhdGVkIHdpdGggYSBiYXRjaAorICoKKyAqIENhbGxlZCBieSB0YWJsZSBBTSdzIG9yZGVyZWQg aW5kZXggc2NhbiBpbXBsZW1lbnRhdGlvbiB3aGVuIGl0IGlzIGZpbmlzaGVkCisgKiB3aXRoIGEg YmF0Y2ggYW5kIHdpc2hlcyB0byByZWxlYXNlIGl0cyByZXNvdXJjZXMuCisgKgorICogV2UgY2Fs bCBhbXVuZ3VhcmRiYXRjaCB0byBkcm9wIHRoZSBUSUQgcmVjeWNsaW5nIGludGVybG9jayAoZS5n LiBidWZmZXIKKyAqIHBpbikgd2hlbiBpdCBoYXNuJ3QgYmVlbiBkcm9wcGVkIHlldC4gIEZvciBw bGFpbiBNVkNDIHNjYW5zICh3aGVyZQorICogYmF0Y2hJbW1lZGlhdGVVbmd1YXJkIGlzIHNldCks IHRoZSBpbnRlcmxvY2sgd2FzIGFscmVhZHkgZHJvcHBlZCBlYWdlcmx5CisgKiBpbiBpbmRleGFt X3V0aWxfYmF0Y2hfdW5sb2NrLCBzbyB3ZSBza2lwIHRoZSBhbXVuZ3VhcmRiYXRjaCBjYWxsIGhl cmUuCisgKiBJbmRleC1vbmx5IHNjYW5zIG11c3QgZGVsYXkgZHJvcHBpbmcgdGhlIGludGVybG9j ayB1bnRpbCB2aXNpYmlsaXR5IGlzCisgKiByZXNvbHZlZCBmb3IgYWxsIGl0ZW1zIGluIHRoZSBi YXRjaCwgc28gYW11bmd1YXJkYmF0Y2ggbWF5IHN0aWxsIG5lZWQgdG8KKyAqIGFjdCBoZXJlLiAg Rm9yIG5vbi1NVkNDIHNuYXBzaG90IHNjYW5zLCB0aGUgaW50ZXJsb2NrIGlzIGFsd2F5cyBoZWxk CisgKiB1bnRpbCBhbXVuZ3VhcmRiYXRjaCBkcm9wcyBpdCBoZXJlIC0tIHRoaXMgaXMgdGhlIG9u bHkgcGxhY2Ugd2lsbGluZyB0bworICogdW5ndWFyZCBhIG5vbi1NVkNDIHNjYW4ncyBiYXRjaC4K KyAqCisgKiBXaGVuIHRoZSBiYXRjaCBoYXMgZGVhZCBpdGVtcyAobnVtRGVhZCA+IDApIGFuZCB0 aGUgaW5kZXggQU0gcHJvdmlkZXMgYW4KKyAqIGFta2lsbGl0ZW1zYmF0Y2ggY2FsbGJhY2ssIHdl IGNhbGwgaXQgdG8gc2V0IExQX0RFQUQgYml0cyBpbiB0aGUgaW5kZXgKKyAqIHBhZ2UuICBXZSBh bHdheXMgcmVjeWNsZSB0aGUgYmF0Y2ggbWVtb3J5IHZpYSBpbmRleGFtX3V0aWxfYmF0Y2hfcmVs ZWFzZS4KKyAqCisgKiBOb3RlOiBDYWxsaW5nIGhlcmUgd2hlbiAnYmF0Y2gnIGlzIGFsc28gYmF0 Y2hyaW5nYnVmLm1hcmtCYXRjaCBpcyBhIG5vLW9wLgorICogQ2FsbGVycyB0aGF0IGRvbid0IHdh bnQgdGhpcyBzaG91bGQgc2V0IGJhdGNocmluZ2J1Zi5tYXJrQmF0Y2ggdG8gTlVMTAorICogYmVm b3JlIGNhbGxpbmcgdXMuICBOb3RlIHRoYXQgbWFya0JhdGNoIGhhcyB0byBiZSBleHBsaWNpdGx5 IGZyZWVkLgorICovCit2b2lkCit0YWJsZWFtX3V0aWxfZnJlZV9iYXRjaChJbmRleFNjYW5EZXNj IHNjYW4sIEluZGV4U2NhbkJhdGNoIGJhdGNoKQoreworCS8qIFBhc3MgdGhyb3VnaCB0byBpbXBs ZW1lbnRhdGlvbiBmdW5jdGlvbiwgd2l0aCBhbGxvd19jYWNoZT10cnVlICovCisJYmF0Y2hfZnJl ZShzY2FuLCBiYXRjaCwgdHJ1ZSk7Cit9CisKKy8qCisgKiBGcmVlIGEgYmF0Y2gsIG9wdGlvbmFs bHkgY2FjaGluZyBpdCBmb3IgcmV1c2UuCisgKgorICogdGFibGVhbV91dGlsX2ZyZWVfYmF0Y2gg aW1wbGVtZW50YXRpb24gZnVuY3Rpb24uICBXZSBzcGxpdCBvdXQgdGhlCisgKiBpbXBsZW1lbnRh dGlvbiBsaWtlIHRoaXMgYmVjYXVzZSB3ZSBkb24ndCB3YW50IHRvIGdpdmUgZXh0ZXJuYWwgdGFi bGUgQU0KKyAqIGNhbGxlcnMgdGhlIG9wdGlvbiBvZiBwYXNzaW5nIGFsbG93X2NhY2hlPWZhbHNl LgorICoKKyAqIFdoZW4gYWxsb3dfY2FjaGUgaXMgdHJ1ZSwgd2UgdHJ5IHRvIHN0b3JlIHRoZSBi YXRjaCBpbiB0aGUgc2NhbidzIGJhdGNoCisgKiBjYWNoZSBmb3IgbGF0ZXIgcmV1c2UuICBXaGVu IGFsbG93X2NhY2hlIGlzIGZhbHNlICh0eXBpY2FsbHkgYmVjYXVzZSB0aGUKKyAqIHNjYW4gaXMg c2h1dHRpbmcgZG93biksIHdlIHBmcmVlIHRoZSBjYWxsZXIncyBiYXRjaCB1bmNvbmRpdGlvbmFs bHkuCisgKi8KK3N0YXRpYyB2b2lkCitiYXRjaF9mcmVlKEluZGV4U2NhbkRlc2Mgc2NhbiwgSW5k ZXhTY2FuQmF0Y2ggYmF0Y2gsIGJvb2wgYWxsb3dfY2FjaGUpCit7CisJQXNzZXJ0KCEoc2Nhbi0+ YmF0Y2hJbW1lZGlhdGVVbmd1YXJkICYmIGJhdGNoLT5pc0d1YXJkZWQpKTsKKwlBc3NlcnQoYmF0 Y2gtPmlzR3VhcmRlZCB8fCBzY2FuLT5NVkNDU2Nhbik7CisKKwkvKiBkb24ndCBmcmVlIGNhbGxl cidzIGJhdGNoIGlmIGl0IGlzIHNjYW4ncyBjdXJyZW50IG1hcmtCYXRjaCAqLworCWlmIChiYXRj aCA9PSBzY2FuLT5iYXRjaHJpbmdidWYubWFya0JhdGNoKQorCQlyZXR1cm47CisKKwkvKiBEcm9w IFRJRCByZWN5Y2xpbmcgaW50ZXJsb2NrIHZpYSBhbXVuZ3VhcmRiYXRjaCBhcyBuZWVkZWQgKi8K KwlpZiAoIXNjYW4tPmJhdGNoSW1tZWRpYXRlVW5ndWFyZCAmJiBiYXRjaC0+aXNHdWFyZGVkKQor CQl0YWJsZWFtX3V0aWxfdW5ndWFyZF9iYXRjaChzY2FuLCBiYXRjaCk7CisKKwkvKgorCSAqIExl dCB0aGUgaW5kZXggQU0gc2V0IExQX0RFQUQgYml0cyBpbiB0aGUgaW5kZXggcGFnZSwgaWYgYXBw bGljYWJsZS4KKwkgKgorCSAqIGJhdGNoLmRlYWRJdGVtc1tdIGlzIG5vdyBpbiB3aGF0ZXZlciBv cmRlciB0aGUgc2NhbiByZXR1cm5lZCBpdGVtcyBpbi4KKwkgKiBXZSBtaWdodCBoYXZlIGV2ZW4g c2F2ZWQgdGhlIHNhbWUgaXRlbS9USUQgdHdpY2UuCisJICoKKwkgKiBTb3J0IGFuZCB1bmlxdWUt aWZ5IGRlYWRJdGVtc1tdLiAgVGhhdCB3YXkgdGhlIGluZGV4IEFNIGNhbiBzYWZlbHkKKwkgKiBh c3N1bWUgdGhhdCBpdGVtcyB3aWxsIGFsd2F5cyBiZSBpbiB0aGVpciBvcmlnaW5hbCBpbmRleCBw YWdlIG9yZGVyLgorCSAqLworCWlmIChiYXRjaC0+bnVtRGVhZCA+IDAgJiYKKwkJc2Nhbi0+aW5k ZXhSZWxhdGlvbi0+cmRfaW5kYW0tPmFta2lsbGl0ZW1zYmF0Y2ggIT0gTlVMTCkKKwl7CisJCWlm IChiYXRjaC0+bnVtRGVhZCA+IDEpCisJCXsKKwkJCXFzb3J0KGJhdGNoLT5kZWFkSXRlbXMsIGJh dGNoLT5udW1EZWFkLCBzaXplb2YoaW50KSwKKwkJCQkgIGJhdGNoX2NvbXBhcmVfaW50KTsKKwkJ CWJhdGNoLT5udW1EZWFkID0gcXVuaXF1ZShiYXRjaC0+ZGVhZEl0ZW1zLCBiYXRjaC0+bnVtRGVh ZCwKKwkJCQkJCQkJCSBzaXplb2YoaW50KSwgYmF0Y2hfY29tcGFyZV9pbnQpOworCQl9CisKKwkJ c2Nhbi0+aW5kZXhSZWxhdGlvbi0+cmRfaW5kYW0tPmFta2lsbGl0ZW1zYmF0Y2goc2NhbiwgYmF0 Y2gpOworCX0KKworCS8qCisJICogVHJ5IHRvIHN0b3JlIGNhbGxlcidzIGJhdGNoIGluIHRoaXMg YW1nZXRiYXRjaCBzY2FuJ3MgY2FjaGUgb2YKKwkgKiBwcmV2aW91c2x5IHJlbGVhc2VkIGJhdGNo ZXMgZmlyc3QgKHdoZW4gY2FsbGVyIHJlcXVlc3RzIGl0KQorCSAqLworCWlmIChhbGxvd19jYWNo ZSAmJiBiYXRjaF9jYWNoZV9zdG9yZShzY2FuLCBiYXRjaCkpCisJCXJldHVybjsKKworCS8qIGp1 c3QgcGZyZWUgdGhlIGNhbGxlcidzIGJhdGNoIChwbHVzIGJhdGNoJ3MgZGVhZEl0ZW1zLCBpZiBh bnkpICovCisJaWYgKGJhdGNoLT5kZWFkSXRlbXMpCisJCXBmcmVlKGJhdGNoLT5kZWFkSXRlbXMp OworCXBmcmVlKGluZGV4X3NjYW5fYmF0Y2hfYmFzZShzY2FuLCBiYXRjaCkpOworfQorCisvKgor ICogRHJvcCB0aGUgYmF0Y2gncyBUSUQgcmVjeWNsaW5nIGludGVybG9jayB2aWEgYW11bmd1YXJk YmF0Y2gKKyAqCisgKiBDYWxsZWQgYnkgdGhlIHRhYmxlIEFNIHdoZW4gaXQncyBzYWZlIHRvIGRy b3Agd2hhdGV2ZXIgaW50ZXJsb2NrIHRoZSBpbmRleAorICogQU0gaG9sZHMgdG8gcHJldmVudCB1 bnNhZmUgY29uY3VycmVudCBUSUQgcmVjeWNsaW5nIGJ5IFZBQ1VVTSAodHlwaWNhbGx5IGEKKyAq IGJ1ZmZlciBwaW4gb24gdGhlIGJhdGNoJ3MgaW5kZXggcGFnZSBpbiBiYXRjaCdzIG9wYXF1ZSBh cmVhKS4KKyAqLwordm9pZAordGFibGVhbV91dGlsX3VuZ3VhcmRfYmF0Y2goSW5kZXhTY2FuRGVz YyBzY2FuLCBJbmRleFNjYW5CYXRjaCBiYXRjaCkKK3sKKwkvKiBTaG91bGQgYmUgY2FsbGVkIGV4 YWN0bHkgb25jZSBpZmYgIWJhdGNoSW1tZWRpYXRlVW5ndWFyZCAqLworCUFzc2VydCghc2Nhbi0+ YmF0Y2hJbW1lZGlhdGVVbmd1YXJkKTsKKwlBc3NlcnQoYmF0Y2gtPmlzR3VhcmRlZCk7CisKKwlz Y2FuLT5pbmRleFJlbGF0aW9uLT5yZF9pbmRhbS0+YW11bmd1YXJkYmF0Y2goc2NhbiwgYmF0Y2gp OworCisJYmF0Y2gtPmlzR3VhcmRlZCA9IGZhbHNlOworfQorCisvKgorICogVW5sb2NrIGJhdGNo J3MgaW5kZXggcGFnZSBidWZmZXIgbG9jaworICoKKyAqIFVubG9ja3MgdGhlIGdpdmVuIGJ1ZmZl ciBpbiBwcmVwYXJhdGlvbiBmb3IgYW1nZXRiYXRjaCByZXR1cm5pbmcgaXRlbXMKKyAqIHNhdmVk IGluIHRoYXQgYmF0Y2guICBQZXJmb3JtcyBleHRyYSBzdGVwcyByZXF1aXJlZCBieSBhbWdldGJh dGNoIGNhbGxlcnMKKyAqIGluIHBhc3NpbmcuCisgKgorICogT25seSBjYWxsIGhlcmUgd2hlbiBh IGJhdGNoIGhhcyBvbmUgb3IgbW9yZSBtYXRjaGluZyBpdGVtcyB0byByZXR1cm4gdXNpbmcKKyAq IGFtZ2V0YmF0Y2ggKG9yIGZvciBhbWdldGJpdG1hcCB0byBsb2FkIGludG8gaXRzIGJpdG1hcCBv ZiBtYXRjaGluZyBUSURzKS4KKyAqIFdoZW4gYW4gaW5kZXggcGFnZSBoYXMgbm8gbWF0Y2hlcywg aXQncyBhbHdheXMgc2FmZSBmb3IgaW5kZXggQU1zIHRvIGRyb3AKKyAqIGJvdGggdGhlIGxvY2sg YW5kIHRoZSBwaW4gZm9yIHRoZW1zZWx2ZXMuCisgKgorICogTm90ZTogSXQgaXMgY29udmVuaWVu dCBmb3IgaW5kZXggQU1zIHRoYXQgaW1wbGVtZW50IGJvdGggYW1nZXRiYXRjaCBhbmQKKyAqIGFt Z2V0Yml0bWFwIHRvIGNvbnNpc3RlbnRseSB1c2UgdGhlIHNhbWUgYmF0Y2ggbWFuYWdlbWVudCBh cHByb2FjaCwgc2luY2UKKyAqIHRoYXQgYXZvaWRzIGludHJvZHVjaW5nIHNwZWNpYWwgY2FzZXMg dG8gbG93ZXItbGV2ZWwgY29kZS4gIFdlIGRyb3AgYm90aAorICogdGhlIGxvY2sgYW5kIHRoZSBw aW4gb24gYmF0Y2gncyBwYWdlIG9uIGJlaGFsZiBvZiBhbWdldGJpdG1hcCBjYWxsZXJzLgorICoK KyAqIEZvciBhbWdldGJhdGNoIGNhbGxlcnMsIHdoZW4gYmF0Y2hJbW1lZGlhdGVVbmd1YXJkIGlz IHNldCAocGxhaW4gTVZDQworICogc2NhbnMpLCB3ZSBhbHNvIHJlbGVhc2UgdGhlIHBpbiBoZXJl ICh0aGUgVElEIHJlY3ljbGluZyBpbnRlcmxvY2spLCBzbworICogdGhhdCBubyBsYXRlciBhbXVu Z3VhcmRiYXRjaCBjYWxsYmFjayB3aWxsIGJlIG5lZWRlZC4gIE90aGVyd2lzZSB0aGUgdGFibGUK KyAqIEFNIHdpbGwgY2FsbCBhbXVuZ3VhcmRiYXRjaCBsYXRlciB3aGVuIGl0J3Mgc2FmZSB0byBk cm9wIHRoZSBpbnRlcmxvY2suCisgKgorICogSW5kZXggQU1zIHdob3NlIFRJRCByZWN5Y2xpbmcg aW50ZXJsb2NrIGlzIG5vdCBqdXN0IGEgYnVmZmVyIHBpbiwgb3Igd2hvc2UKKyAqIGFtdW5ndWFy ZGJhdGNoIGRvZXMgbm90IHNpbXBseSByZWxlYXNlIGEgcGluLCBhcmUgbm90IG9ibGlnYXRlZCB0 byB1c2UgdGhpcworICogZnVuY3Rpb24uICBUaGV5IGNhbiBpbXBsZW1lbnQgdGhlaXIgb3duIGVx dWl2YWxlbnQuICBTdWNoIGluZGV4IEFNcyBhcmUgYWxzbworICogZnJlZSB0byB1c2UgdGhlIGJh dGNoIExTTiBmaWVsZCB0aGVtc2VsdmVzOyB0aGVpciBhbWtpbGxpdGVtc2JhdGNoIHJvdXRpbmUK KyAqIGNhbiB1c2UgdGhhdCBMU04gaW4gdGhlIHVzdWFsIHdheSwgb3IgaW4gd2hhdGV2ZXIgd2F5 IHRoZSBBTSBkZWVtcyBuZWNlc3NhcnkKKyAqIChjb3JlIGNvZGUgd2lsbCBub3QgdXNlIGl0IGZv ciBhbnkgb3RoZXIgcHVycG9zZSkuCisgKi8KK3ZvaWQKK2luZGV4YW1fdXRpbF9iYXRjaF91bmxv Y2soSW5kZXhTY2FuRGVzYyBzY2FuLCBJbmRleFNjYW5CYXRjaCBiYXRjaCwgQnVmZmVyIGJ1ZikK K3sKKwkvKiBiYXRjaCBtdXN0IGhhdmUgb25lIG9yIG1vcmUgbWF0Y2hpbmcgaXRlbXMgcmV0dXJu ZWQgYnkgaW5kZXggQU0gKi8KKwlBc3NlcnQoYmF0Y2gtPmZpcnN0SXRlbSA+PSAwICYmIGJhdGNo LT5maXJzdEl0ZW0gPD0gYmF0Y2gtPmxhc3RJdGVtKTsKKworCWlmIChzY2FuLT51c2ViYXRjaHJp bmcpCisJeworCQkvKiBhbWdldGJhdGNoIChub3QgYW1nZXRiaXRtYXApIGNhbGxlciAqLworCQlB c3NlcnQoc2Nhbi0+aGVhcFJlbGF0aW9uICE9IE5VTEwpOworCisJCS8qCisJCSAqIEhhdmUgdG8g c2V0IGJhdGNoLT5sc24gc28gdGhhdCBhbWtpbGxpdGVtc2JhdGNoIGhhcyBhIHdheSB0byBkZXRl Y3QKKwkJICogd2hlbiBjb25jdXJyZW50IHRhYmxlIFRJRCByZWN5Y2xpbmcgYnkgVkFDVVVNIG1p Z2h0IGhhdmUgdGFrZW4KKwkJICogcGxhY2UuICBJdCdsbCBvbmx5IGJlIHNhZmUgdG8gc2V0IGFu eSBpbmRleCB0dXBsZSBMUF9ERUFEIGJpdHMgd2hlbgorCQkgKiB0aGUgcGFnZSBMU04gaGFzbid0 IGFkdmFuY2VkLgorCQkgKgorCQkgKiBQbGFpbiBNVkNDIHNjYW5zIChiYXRjaEltbWVkaWF0ZVVu Z3VhcmQpIGFsc28gcmVsZWFzZSB0aGUgcGluIG5vdywKKwkJICogZHJvcHBpbmcgdGhlIFRJRCBy ZWN5Y2xpbmcgaW50ZXJsb2NrIHNvIHRoYXQgbm8gYW11bmd1YXJkYmF0Y2gKKwkJICogY2FsbGJh Y2sgd2lsbCBiZSBuZWVkZWQgbGF0ZXIuICBUaGUgaW5kZXggQU0gY2FsbGVyIG11c3QgY2xlYXIg aXRzCisJCSAqIG93biBvcGFxdWUgYnVmIGZpZWxkIGFmdGVyIHdlIHJldHVybi4KKwkJICoKKwkJ ICogTm9uLWltbWVkaWF0ZS11bmd1YXJkIHNjYW5zIHJldGFpbiB0aGUgcGluOyB0aGUgdGFibGUg QU0gd2lsbCBjYWxsCisJCSAqIGFtdW5ndWFyZGJhdGNoIHRvIGRyb3AgdGhlIGludGVybG9jayB3 aGVuIHJlYWR5LgorCQkgKi8KKwkJYmF0Y2gtPmxzbiA9IEJ1ZmZlckdldExTTkF0b21pYyhidWYp OworCQlpZiAoc2Nhbi0+YmF0Y2hJbW1lZGlhdGVVbmd1YXJkKQorCQl7CisJCQkvKiBkcm9wIGJv dGggdGhlIGxvY2sgYW5kIHRoZSBwaW4gKi8KKwkJCVVubG9ja1JlbGVhc2VCdWZmZXIoYnVmKTsK KwkJfQorCQllbHNlCisJCXsKKwkJCS8qIGp1c3QgZHJvcCB0aGUgbG9jayAoaG9sZCBvbiB0byBp bnRlcmxvY2sgcGluKSAqLworCQkJVW5sb2NrQnVmZmVyKGJ1Zik7CisJCX0KKworCQkvKiBJZiB3 ZSByZWxlYXNlZCBidWZmZXIgcGluLCBiYXRjaCBpcyBub3cgdW5ndWFyZGVkICovCisJCWJhdGNo LT5pc0d1YXJkZWQgPSAhc2Nhbi0+YmF0Y2hJbW1lZGlhdGVVbmd1YXJkOworCX0KKwllbHNlCisJ eworCQkvKiBhbWdldGJpdG1hcCAobm90IGFtZ2V0YmF0Y2gpIGNhbGxlciAqLworCQlBc3NlcnQo c2Nhbi0+aGVhcFJlbGF0aW9uID09IE5VTEwpOworCisJCS8qIGRyb3AgYm90aCB0aGUgbG9jayBh bmQgdGhlIHBpbiAqLworCQlVbmxvY2tSZWxlYXNlQnVmZmVyKGJ1Zik7CisJfQorfQorCisvKgor ICogQWxsb2NhdGUgYSBuZXcgYmF0Y2gKKyAqCisgKiBVc2VkIGJ5IGluZGV4IEFNcyB0aGF0IHN1 cHBvcnQgYW1nZXRiYXRjaCBpbnRlcmZhY2UgKGJvdGggZHVyaW5nIGFtZ2V0YmF0Y2gKKyAqIGFu ZCBhbWdldGJpdG1hcCBzY2FucykuCisgKgorICogUmV0dXJucyBJbmRleFNjYW5CYXRjaCB3aXRo IHNwYWNlIHRvIGZpdCBzY2FuLT5tYXhpdGVtc2JhdGNoLW1hbnkKKyAqIEJhdGNoTWF0Y2hpbmdJ dGVtIGVudHJpZXMuICBUaGlzIHdpbGwgZWl0aGVyIGJlIGEgbmV3bHkgYWxsb2NhdGVkIGJhdGNo LCBvcgorICogYSBiYXRjaCByZWN5Y2xlZCBmcm9tIHRoZSBjYWNoZSBtYW5hZ2VkIGJ5IGluZGV4 YW1fdXRpbF9iYXRjaF9yZWxlYXNlLiAgU2VlCisgKiBjb21tZW50cyBhYm92ZSBpbmRleGFtX3V0 aWxfYmF0Y2hfcmVsZWFzZS4KKyAqCisgKiBIb3VzZWtlZXBpbmcgZmllbGRzIChidWYsIGtub3du RW5kQmFja3dhcmQvRm9yd2FyZCwgZmlyc3RJdGVtLCBsYXN0SXRlbSwKKyAqIG51bURlYWQsIGRl YWRJdGVtcywgY3VyclR1cGxlcykgYXJlIGluaXRpYWxpemVkIGhlcmUuICBUaGUgdGFibGUgQU0n cworICogYmF0Y2hfaW5pdCBjYWxsYmFjayBpcyBpbnZva2VkIGhlcmUgdG8gaW5pdGlhbGl6ZSB0 aGUgdGFibGUgQU0gb3BhcXVlIGFyZWEuCisgKiBUaGUgaW5kZXggQU0gY2FsbGVyIGlzIHJlc3Bv bnNpYmxlIGZvciBmaWxsaW5nIGluIGl0cyBwZXItYmF0Y2ggb3BhcXVlCisgKiBmaWVsZHMgYW5k IHRoZSBtYXRjaGluZyBpdGVtc1tdIGFycmF5LgorICoKKyAqIE9uY2UgdGhlIGJhdGNoIGhhcyB0 aGUgcmVxdWlyZWQgbWF0Y2hpbmcgaXRlbXMsIGNhbGxlciBzaG91bGQgZ2VuZXJhbGx5CisgKiBw YXNzIGl0IHRvIGluZGV4YW1fdXRpbF9iYXRjaF91bmxvY2ssIGFoZWFkIG9mIGl0IGJlaW5nIHJl dHVybmVkIHRocm91Z2gKKyAqIGluZGV4IEFNJ3MgYW1nZXRiYXRjaCByb3V0aW5lLiAgSWYgaXQg dHVybnMgb3V0IHRoYXQgdGhlIGJhdGNoIHdvbid0IG5lZWQKKyAqIHRvIGJlIHJldHVybmVkIGxp a2UgdGhpcyAoZS5nLiwgZHVlIHRvIHRoZSBzY2FuIGhhdmluZyBubyBtb3JlIG1hdGNoZXMpLAor ICogY2FsbGVyIHNob3VsZCBwYXNzIGl0cyBlbXB0eS91bnVzZWQgYmF0Y2ggdG8gaW5kZXhhbV91 dGlsX2JhdGNoX3JlbGVhc2UuCisgKi8KK0luZGV4U2NhbkJhdGNoCitpbmRleGFtX3V0aWxfYmF0 Y2hfYWxsb2MoSW5kZXhTY2FuRGVzYyBzY2FuKQoreworCUluZGV4U2NhbkJhdGNoIGJhdGNoID0g TlVMTDsKKwlib29sCQluZXdfYWxsb2MgPSBmYWxzZTsKKworCS8qCisJICogTGF6aWx5IGNvbXB1 dGUgYmF0Y2hfdGFibGVfb2Zmc2V0IG9uIGZpcnN0IGFsbG9jYXRpb24uICBUaGlzIGNvbWJpbmVz CisJICogdGhlIHRhYmxlIEFNIGFuZCBpbmRleCBBTSBvcGFxdWUgc2l6ZXMgaW50byBhIHNpbmds ZSBvZmZzZXQgdGhhdCBjYW4gYmUKKwkgKiB1c2VkIHRvIGZpbmQgdGhlIHRhYmxlIEFNIG9wYXF1 ZSBhcmVhIChhbmQgdGhlIHRydWUgYWxsb2NhdGlvbiBiYXNlKQorCSAqIGZyb20gdGhlIGJhdGNo IHBvaW50ZXIuCisJICovCisJaWYgKHNjYW4tPmJhdGNoX3RhYmxlX29mZnNldCA9PSAwICYmCisJ CShzY2FuLT5iYXRjaF9pbmRleF9vcGFxdWVfc2l6ZSA+IDAgfHwKKwkJIChzY2FuLT54c19oZWFw ZmV0Y2ggJiYgc2Nhbi0+eHNfaGVhcGZldGNoLT5iYXRjaF9vcGFxdWVfc2l6ZSA+IDApKSkKKwl7 CisJCXVpbnQxNgkJdGFibGVfb3BhcXVlID0gc2Nhbi0+eHNfaGVhcGZldGNoID8KKwkJCXNjYW4t PnhzX2hlYXBmZXRjaC0+YmF0Y2hfb3BhcXVlX3NpemUgOiAwOworCisJCXNjYW4tPmJhdGNoX3Rh YmxlX29mZnNldCA9IHRhYmxlX29wYXF1ZSArCisJCQlzY2FuLT5iYXRjaF9pbmRleF9vcGFxdWVf c2l6ZTsKKwl9CisKKwkvKiBGaXJzdCBsb29rIGZvciBhbiBleGlzdGluZyBiYXRjaCBmcm9tIHRo ZSBjYWNoZSAqLworCWlmIChzY2FuLT51c2ViYXRjaHJpbmcpCisJeworCQlmb3IgKGludCBpID0g MDsgaSA8IElOREVYX1NDQU5fQ0FDSEVfQkFUQ0hFUzsgaSsrKQorCQl7CisJCQlpZiAoc2Nhbi0+ YmF0Y2hjYWNoZVtpXSAhPSBOVUxMKQorCQkJeworCQkJCS8qIFJldHVybiBjYWNoZWQgdW5yZWZl cmVuY2VkIGJhdGNoICovCisJCQkJYmF0Y2ggPSBzY2FuLT5iYXRjaGNhY2hlW2ldOworCQkJCXNj YW4tPmJhdGNoY2FjaGVbaV0gPSBOVUxMOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJfQorCWVs c2UgaWYgKHNjYW4tPmJhdGNoY2FjaGVbMF0gIT0gTlVMTCkKKwl7CisJCS8qCisJCSAqIFJldXNl IGNhY2hlZCBiYXRjaCBmcm9tIHByaW9yIGFtZ2V0Yml0bWFwIGl0ZXJhdGlvbi4gIFRoaXMgcGF0 aCBpcworCQkgKiBoaXQgb24gZXZlcnkgYW1nZXRiaXRtYXAgY2FsbCBoZXJlIGFmdGVyIHRoZSBz Y2FuJ3MgZmlyc3QuCisJCSAqLworCQliYXRjaCA9IHNjYW4tPmJhdGNoY2FjaGVbMF07CisJCXNj YW4tPmJhdGNoY2FjaGVbMF0gPSBOVUxMOworCX0KKworCWlmICghYmF0Y2gpCisJeworCQlTaXpl CQlwcmVmaXhfc3o7CisJCVNpemUJCWJhc2Vfc3o7CisJCVNpemUJCXRyYWlsaW5nX3N6OworCQlT aXplCQlhbGxvY3N6OworCQljaGFyCSAgICpyYXc7CisKKwkJLyogQU0gb3BhcXVlIGFyZWFzIGJl Zm9yZSB0aGUgYmF0Y2ggcG9pbnRlciAqLworCQlwcmVmaXhfc3ogPSBzY2FuLT5iYXRjaF90YWJs ZV9vZmZzZXQ7CisKKwkJLyogSW5kZXhTY2FuQmF0Y2hEYXRhIGhlYWRlciArIGl0ZW1zW10gKi8K KwkJYmFzZV9zeiA9IG9mZnNldG9mKEluZGV4U2NhbkJhdGNoRGF0YSwgaXRlbXMpICsKKwkJCXNp emVvZihCYXRjaE1hdGNoaW5nSXRlbSkgKiBzY2FuLT5tYXhpdGVtc2JhdGNoOworCisJCS8qCisJ CSAqIFRyYWlsaW5nIGRhdGEgYWZ0ZXIgaXRlbXNbXTogcGVyLWl0ZW0gZGF0YSAob3duZWQgYnkg dGFibGUgQU0pLAorCQkgKiB0aGVuIGN1cnJUdXBsZXMgd29ya3NwYWNlIChvd25lZCBieSBpbmRl eCBBTSwgcmVhZCBieSB0YWJsZSBBTSkKKwkJICovCisJCXRyYWlsaW5nX3N6ID0gMDsKKwkJaWYg KHNjYW4tPnhzX3dhbnRfaXR1cCkKKwkJeworCQkJaWYgKHNjYW4tPnhzX2hlYXBmZXRjaCAmJgor CQkJCXNjYW4tPnhzX2hlYXBmZXRjaC0+YmF0Y2hfcGVyX2l0ZW1fc2l6ZSA+IDApCisJCQkJdHJh aWxpbmdfc3ogKz0gTUFYQUxJR04oc2Nhbi0+eHNfaGVhcGZldGNoLT5iYXRjaF9wZXJfaXRlbV9z aXplICoKKwkJCQkJCQkJCQlzY2FuLT5tYXhpdGVtc2JhdGNoKTsKKwkJCXRyYWlsaW5nX3N6ICs9 IHNjYW4tPmJhdGNoX3R1cGxlc193b3Jrc3BhY2U7CisJCX0KKworCQlhbGxvY3N6ID0gcHJlZml4 X3N6ICsgTUFYQUxJR04oYmFzZV9zeikgKyB0cmFpbGluZ19zejsKKwkJcmF3ID0gcGFsbG9jKGFs bG9jc3opOworCQliYXRjaCA9IChJbmRleFNjYW5CYXRjaCkgKHJhdyArIHByZWZpeF9zeik7CisK KwkJLyogU2V0IHVwIGN1cnJUdXBsZXMgcG9pbnRlciBmb3IgaW5kZXgtb25seSBzY2FucyAqLwor CQlpZiAoc2Nhbi0+eHNfd2FudF9pdHVwICYmIHNjYW4tPmJhdGNoX3R1cGxlc193b3Jrc3BhY2Ug PiAwKQorCQl7CisJCQlTaXplCQlpdGVtc0VuZCA9IE1BWEFMSUdOKGJhc2Vfc3opOworCQkJU2l6 ZQkJdGFibGVUcmFpbGluZyA9IDA7CisKKwkJCWlmIChzY2FuLT54c19oZWFwZmV0Y2ggJiYKKwkJ CQlzY2FuLT54c19oZWFwZmV0Y2gtPmJhdGNoX3Blcl9pdGVtX3NpemUgPiAwKQorCQkJCXRhYmxl VHJhaWxpbmcgPSBNQVhBTElHTihzY2FuLT54c19oZWFwZmV0Y2gtPmJhdGNoX3Blcl9pdGVtX3Np emUgKgorCQkJCQkJCQkJCSBzY2FuLT5tYXhpdGVtc2JhdGNoKTsKKwkJCWJhdGNoLT5jdXJyVHVw bGVzID0gKGNoYXIgKikgYmF0Y2ggKyBpdGVtc0VuZCArIHRhYmxlVHJhaWxpbmc7CisJCX0KKwkJ ZWxzZQorCQkJYmF0Y2gtPmN1cnJUdXBsZXMgPSBOVUxMOworCisJCS8qCisJCSAqIEJhdGNoZXMg YWxsb2NhdGUgZGVhZEl0ZW1zIGxhemlseSAodGhvdWdoIG5vdGUgdGhhdCBjYWNoZWQgYmF0Y2hl cworCQkgKiBrZWVwIHRoZWlyIGRlYWRJdGVtcyBhbGxvY2F0aW9uIHdoZW4gcmVjeWNsZWQpCisJ CSAqLworCQliYXRjaC0+ZGVhZEl0ZW1zID0gTlVMTDsKKwkJbmV3X2FsbG9jID0gdHJ1ZTsKKwl9 CisKKwkvKiB4c193YW50X2l0dXAgc2NhbnMgbXVzdCBnZXQgYSBjdXJyVHVwbGVzIHNwYWNlICov CisJQXNzZXJ0KCEoc2Nhbi0+eHNfd2FudF9pdHVwICYmIHNjYW4tPmJhdGNoX3R1cGxlc193b3Jr c3BhY2UgPiAwICYmCisJCQkgYmF0Y2gtPmN1cnJUdXBsZXMgPT0gTlVMTCkpOworCisJLyogTGV0 IHRoZSB0YWJsZSBBTSBpbml0aWFsaXplIGl0cyBwZXItYmF0Y2ggb3BhcXVlIGFyZWEgKi8KKwlp ZiAoc2Nhbi0+eHNfaGVhcGZldGNoKQorCQl0YWJsZV9pbmRleF9mZXRjaF9iYXRjaF9pbml0KHNj YW4sIGJhdGNoLCBuZXdfYWxsb2MpOworCisJLyogc2hhcmVkIGluaXRpYWxpemF0aW9uICovCisJ YmF0Y2gtPmtub3duRW5kQmFja3dhcmQgPSBmYWxzZTsKKwliYXRjaC0+a25vd25FbmRGb3J3YXJk ID0gZmFsc2U7CisJYmF0Y2gtPmlzR3VhcmRlZCA9IGZhbHNlOworCWJhdGNoLT5maXJzdEl0ZW0g PSAtMTsKKwliYXRjaC0+bGFzdEl0ZW0gPSAtMTsKKwliYXRjaC0+bnVtRGVhZCA9IDA7CisKKwly ZXR1cm4gYmF0Y2g7Cit9CisKKy8qCisgKiBSZWxlYXNlIGFsbG9jYXRlZCBiYXRjaAorICoKKyAq IFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGJ5IGluZGV4IEFNcyB0byByZWxlYXNlIGEgYmF0Y2gg YWxsb2NhdGVkIGJ5CisgKiBpbmRleGFtX3V0aWxfYmF0Y2hfYWxsb2MuICBCYXRjaGVzIGFyZSBj YWNoZWQgaGVyZSBmb3IgcmV1c2UgdG8gcmVkdWNlCisgKiBwYWxsb2MvcGZyZWUgb3ZlcmhlYWQu CisgKgorICogSXQncyBzYWZlIHRvIHJlbGVhc2UgYSBiYXRjaCBpbW1lZGlhdGVseSB3aGVuIGl0 IHdhcyB1c2VkIHRvIHJlYWQgYSBwYWdlCisgKiB0aGF0IHJldHVybmVkIG5vIG1hdGNoZXMgdG8g dGhlIHNjYW4uICBCYXRjaGVzIGFjdHVhbGx5IHJldHVybmVkIGJ5IGluZGV4CisgKiBBTSdzIGFt Z2V0YmF0Y2ggcm91dGluZSAoaS5lLiBiYXRjaGVzIGZvciBwYWdlcyB3aXRoIG9uZSBvciBtb3Jl IG1hdGNoZXMpCisgKiBtdXN0IGJlIHJlbGVhc2VkIGJ5IHRhYmxlYW1fdXRpbF9mcmVlX2JhdGNo LCB3aGljaCBjYWxscyBoZXJlIGFmdGVyIHRoZQorICogaW5kZXggQU0ncyBhbWtpbGxpdGVtc2Jh dGNoIHJvdXRpbmUgKGlmIGFueSkuICBJbmRleCBBTXMgdGhhdCB1c2UgYmF0Y2hlcworICogc2hv dWxkIGNhbGwgaGVyZSB0byByZWxlYXNlIGEgYmF0Y2ggZnJvbSB0aGVpciBhbWdldGJhdGNoIG9y IGFtZ2V0Yml0bWFwCisgKiByb3V0aW5lcy4KKyAqCisgKiBUaGUgcnVsZXMgZm9yIGJhdGNoIG93 bmVyc2hpcCBkaWZmZXIgc2xpZ2h0bHkgZm9yIGFtZ2V0Yml0bWFwIHNjYW5zOyBzZWUKKyAqIHRo ZSBhbWdldGJpdG1hcCBkb2N1bWVudGF0aW9uIGluIGRvYy9zcmMvc2dtbC9pbmRleGFtLnNnbWwg Zm9yIGRldGFpbHMuCisgKi8KK3ZvaWQKK2luZGV4YW1fdXRpbF9iYXRjaF9yZWxlYXNlKEluZGV4 U2NhbkRlc2Mgc2NhbiwgSW5kZXhTY2FuQmF0Y2ggYmF0Y2gpCit7CisJaWYgKCFzY2FuLT51c2Vi YXRjaHJpbmcpCisJeworCQkvKgorCQkgKiBhbWdldGJpdG1hcCBzY2FuIGNhbGxlci4KKwkJICoK KwkJICogYW1nZXRiaXRtYXAgcm91dGluZXMgYXJlIHJlcXVpcmVkIHRvIGFsbG9jYXRlIG5vIG1v cmUgdGhhbiBvbmUKKwkJICogYmF0Y2ggYXQgYSB0aW1lLCBzbyB3ZSdsbCBhbHdheXMgaGF2ZSBh IGZyZWUgc2xvdC4KKwkJICovCisJCUFzc2VydChzY2FuLT5iYXRjaGNhY2hlWzBdID09IE5VTEwp OworCQlBc3NlcnQoc2Nhbi0+aGVhcFJlbGF0aW9uID09IE5VTEwpOworCQlBc3NlcnQoYmF0Y2gt PmRlYWRJdGVtcyA9PSBOVUxMKTsKKwkJQXNzZXJ0KGJhdGNoLT5jdXJyVHVwbGVzID09IE5VTEwp OworCisJCXNjYW4tPmJhdGNoY2FjaGVbMF0gPSBiYXRjaDsKKwkJcmV0dXJuOworCX0KKworCS8q IGFtZ2V0YmF0Y2ggc2NhbiBjYWxsZXIgKi8KKwlBc3NlcnQoc2Nhbi0+aGVhcFJlbGF0aW9uICE9 IE5VTEwpOworCisJLyoKKwkgKiBUcnkgdG8gc3RvcmUgY2FsbGVyJ3MgYmF0Y2ggaW4gdGhpcyBh bWdldGJhdGNoIHNjYW4ncyBjYWNoZSBvZgorCSAqIHByZXZpb3VzbHkgcmVsZWFzZWQgYmF0Y2hl cyBmaXJzdAorCSAqLworCWlmIChiYXRjaF9jYWNoZV9zdG9yZShzY2FuLCBiYXRjaCkpCisJCXJl dHVybjsKKworCS8qIENhY2hlIGZ1bGw7IGp1c3QgZnJlZSB0aGUgY2FsbGVyJ3MgYmF0Y2ggKi8K KwlpZiAoYmF0Y2gtPmRlYWRJdGVtcykKKwkJcGZyZWUoYmF0Y2gtPmRlYWRJdGVtcyk7CisJcGZy ZWUoaW5kZXhfc2Nhbl9iYXRjaF9iYXNlKHNjYW4sIGJhdGNoKSk7Cit9CisKKy8qCisgKiBUcnkg dG8gc3RvcmUgYSBiYXRjaCBpbiB0aGUgc2NhbidzIGJhdGNoIGNhY2hlLgorICoKKyAqIFJldHVy bnMgdHJ1ZSBpZiBhIGZyZWUgc2xvdCB3YXMgZm91bmQsIGZhbHNlIGlmIHRoZSBjYWNoZSBpcyBm dWxsLgorICovCitzdGF0aWMgaW5saW5lIGJvb2wKK2JhdGNoX2NhY2hlX3N0b3JlKEluZGV4U2Nh bkRlc2Mgc2NhbiwgSW5kZXhTY2FuQmF0Y2ggYmF0Y2gpCit7CisJZm9yIChpbnQgaSA9IDA7IGkg PCBJTkRFWF9TQ0FOX0NBQ0hFX0JBVENIRVM7IGkrKykKKwl7CisJCWlmIChzY2FuLT5iYXRjaGNh Y2hlW2ldID09IE5VTEwpCisJCXsKKwkJCXNjYW4tPmJhdGNoY2FjaGVbaV0gPSBiYXRjaDsKKwkJ CXJldHVybiB0cnVlOworCQl9CisJfQorCisJcmV0dXJuIGZhbHNlOworfQorCisvKgorICogcXNv cnQgY29tcGFyaXNvbiBmdW5jdGlvbiBmb3IgaW50IGFycmF5cworICovCitzdGF0aWMgaW50Citi YXRjaF9jb21wYXJlX2ludChjb25zdCB2b2lkICp2YSwgY29uc3Qgdm9pZCAqdmIpCit7CisJaW50 CQkJYSA9ICooKGNvbnN0IGludCAqKSB2YSk7CisJaW50CQkJYiA9ICooKGNvbnN0IGludCAqKSB2 Yik7CisKKwlyZXR1cm4gcGdfY21wX3MzMihhLCBiKTsKK30KZGlmZiAtLWdpdCBhL3NyYy9iYWNr ZW5kL2FjY2Vzcy9pbmRleC9tZXNvbi5idWlsZCBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9t ZXNvbi5idWlsZAppbmRleCBkYTY0Y2I1OTUuLjgzZGZhM2YyYiAxMDA2NDQKLS0tIGEvc3JjL2Jh Y2tlbmQvYWNjZXNzL2luZGV4L21lc29uLmJ1aWxkCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9p bmRleC9tZXNvbi5idWlsZApAQCAtNSw0ICs1LDUgQEAgYmFja2VuZF9zb3VyY2VzICs9IGZpbGVz KAogICAnYW12YWxpZGF0ZS5jJywKICAgJ2dlbmFtLmMnLAogICAnaW5kZXhhbS5jJywKKyAgJ2lu ZGV4YmF0Y2guYycsCiApCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL1JF QURNRSBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvUkVBRE1FCmluZGV4IGNiOTIxY2EyZS4u YTM3ODY5YjcxIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL1JFQURNRQor KysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL1JFQURNRQpAQCAtMTc5LDE4ICsxNzksMTUg QEAgaG9sZCBvbiB0byB0aGUgcGluICh1c2VkIHdoZW4gcmVhZGluZyBmcm9tIHRoZSBsZWFmIHBh Z2UpIHVudGlsIF9hZnRlcl8KIHRoZXkncmUgZG9uZSB2aXNpdGluZyB0aGUgaGVhcCAoZm9yIFRJ RHMgZnJvbSBwaW5uZWQgbGVhZiBwYWdlKSBwcmV2ZW50cwogY29uY3VycmVudCBUSUQgcmVjeWNs aW5nLiAgVkFDVVVNIGNhbm5vdCBnZXQgYSBjb25mbGljdGluZyBjbGVhbnVwIGxvY2sKIHVudGls IHRoZSBpbmRleCBzY2FuIGlzIHRvdGFsbHkgZmluaXNoZWQgcHJvY2Vzc2luZyBpdHMgbGVhZiBw YWdlLgorVGhpcyBpcyByZXF1aXJlZCBieSBhbnkgaW5kZXggQU0gdGhhdCBpbXBsZW1lbnRzIHRo ZSBhbWdldGJhdGNoCitpbnRlcmZhY2UuICAoU2VlIGFsc28sIGRvYy9zcmMvc2dtbC9pbmRleGFt LnNnbWwpLgogCi1UaGlzIGFwcHJvYWNoIGlzIGZhaXJseSBjb2Fyc2UsIHNvIHdlIGF2b2lkIGl0 IHdoZW5ldmVyIHBvc3NpYmxlLiAgSW4KLXByYWN0aWNlIG1vc3QgaW5kZXggc2NhbnMgd29uJ3Qg aG9sZCBvbnRvIHRoZWlyIHBpbiwgYW5kIHNvIHdvbid0IGJsb2NrCi1WQUNVVU0uICBUaGVzZSBp bmRleCBzY2FucyBtdXN0IGRlYWwgd2l0aCBUSUQgcmVjeWNsaW5nIGRpcmVjdGx5LCB3aGljaCBp cwotbW9yZSBjb21wbGljYXRlZCBhbmQgbm90IGFsd2F5cyBwb3NzaWJsZS4gIFNlZSBsYXRlciBz ZWN0aW9uIG9uIG1ha2luZwotY29uY3VycmVudCBUSUQgcmVjeWNsaW5nIHNhZmUuCi0KLU9wcG9y dHVuaXN0aWMgaW5kZXggdHVwbGUgZGVsZXRpb24gcGVyZm9ybXMgYWxtb3N0IHRoZSBzYW1lIHBh Z2UtbGV2ZWwKLW1vZGlmaWNhdGlvbnMgd2hpbGUgb25seSBob2xkaW5nIGFuIGV4Y2x1c2l2ZSBs b2NrLiAgVGhpcyBpcyBzYWZlIGJlY2F1c2UKLXRoZXJlIGlzIG5vIHF1ZXN0aW9uIG9mIFRJRCBy ZWN5Y2xpbmcgdGFraW5nIHBsYWNlIGxhdGVyIG9uIC0tIG9ubHkgVkFDVVVNCi1jYW4gbWFrZSBU SURzIHJlY3ljbGFibGUuICBTZWUgYWxzbyBzaW1wbGUgZGVsZXRpb24gYW5kIGJvdHRvbS11cAot ZGVsZXRpb24sIGJlbG93LgorT3Bwb3J0dW5pc3RpYyBpbmRleCB0dXBsZSBkZWxldGlvbiBwZXJm b3JtcyB0aGUgc2FtZSBwYWdlLWxldmVsCittb2RpZmljYXRpb25zIGFzIFZBQ1VVTSwgd2hpbGUg b25seSBob2xkaW5nIGFuIGV4Y2x1c2l2ZSBsb2NrLiAgVGhpcyBpcworc2FmZSBiZWNhdXNlIHRo ZXJlIGlzIG5vIHF1ZXN0aW9uIG9mIFRJRCByZWN5Y2xpbmcgdGFraW5nIHBsYWNlIC0tIG9ubHkK K1ZBQ1VVTSBjYW4gbWFrZSBUSURzIHJlY3ljbGFibGUuICBJbiBvdGhlciB3b3JkcywgVkFDVVVN J3MgY2xlYW51cCBsb2NrCitzZXJ2ZXMgdG8gcHJvdGVjdCBub24tTVZDQyBzbmFwc2hvdCBzY2Fu cyBmcm9tIGNvbmN1cnJlbnQgVElEIHJlY3ljbGluZworaGF6YXJkczsgaXQgZG9lc24ndCBwcm90 ZWN0IHRoZSBCLVRyZWUgc3RydWN0dXJlIGl0c2VsZi4KIAogQmVjYXVzZSBhIHBpbiBpcyBub3Qg YWx3YXlzIGhlbGQsIGFuZCBhIHBhZ2UgY2FuIGJlIHNwbGl0IGV2ZW4gd2hpbGUKIHNvbWVvbmUg ZG9lcyBob2xkIGEgcGluIG9uIGl0LCBpdCBpcyBwb3NzaWJsZSB0aGF0IGFuIGluZGV4c2NhbiB3 aWxsCkBAIC00NDAsNTQgKzQzNyw2IEBAIHdoZW5ldmVyIGl0IGlzIHN1YnNlcXVlbnRseSB0YWtl biBmcm9tIHRoZSBGU00gZm9yIHJldXNlLiAgVGhlIGRlbGV0ZWQKIHBhZ2UncyBjb250ZW50cyB3 aWxsIGJlIG92ZXJ3cml0dGVuIGJ5IHRoZSBzcGxpdCBvcGVyYXRpb24gKGl0IHdpbGwgYmVjb21l CiB0aGUgbmV3IHJpZ2h0IHNpYmxpbmcgcGFnZSkuCiAKLU1ha2luZyBjb25jdXJyZW50IFRJRCBy ZWN5Y2xpbmcgc2FmZQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLUFz IGV4cGxhaW5lZCBpbiB0aGUgZWFybGllciBzZWN0aW9uIGFib3V0IGRlbGV0aW5nIGluZGV4IHR1 cGxlcyBkdXJpbmcKLVZBQ1VVTSwgd2UgaW1wbGVtZW50IGEgbG9ja2luZyBwcm90b2NvbCB0aGF0 IGFsbG93cyBpbmRpdmlkdWFsIGluZGV4IHNjYW5zCi10byBhdm9pZCBjb25jdXJyZW50IFRJRCBy ZWN5Y2xpbmcuICBJbmRleCBzY2FucyBvcHQtb3V0IChhbmQgc28gZHJvcCB0aGVpcgotbGVhZiBw YWdlIHBpbiB3aGVuIHZpc2l0aW5nIHRoZSBoZWFwKSB3aGVuZXZlciBpdCdzIHNhZmUgdG8gZG8g c28sIHRob3VnaC4KLURyb3BwaW5nIHRoZSBwaW4gZWFybHkgaXMgdXNlZnVsIGJlY2F1c2UgaXQg YXZvaWRzIGJsb2NraW5nIHByb2dyZXNzIGJ5Ci1WQUNVVU0uICBUaGlzIGlzIHBhcnRpY3VsYXJs eSBpbXBvcnRhbnQgd2l0aCBpbmRleCBzY2FucyB1c2VkIGJ5IGN1cnNvcnMsCi1zaW5jZSBpZGxl IGN1cnNvcnMgc29tZXRpbWVzIHN0b3AgZm9yIHJlbGF0aXZlbHkgbG9uZyBwZXJpb2RzIG9mIHRp bWUuICBJbgotZXh0cmVtZSBjYXNlcywgYSBjbGllbnQgYXBwbGljYXRpb24gbWF5IGhvbGQgb24g dG8gYW4gaWRsZSBjdXJzb3JzIGZvcgotaG91cnMgb3IgZXZlbiBkYXlzLiAgQmxvY2tpbmcgVkFD VVVNIGZvciB0aGF0IGxvbmcgY291bGQgYmUgZGlzYXN0cm91cy4KLQotSW5kZXggc2NhbnMgdGhh dCBkb24ndCBob2xkIG9uIHRvIGEgYnVmZmVyIHBpbiBhcmUgcHJvdGVjdGVkIGJ5IGhvbGRpbmcg YW4KLU1WQ0Mgc25hcHNob3QgaW5zdGVhZC4gIFRoaXMgbW9yZSBsaW1pdGVkIGludGVybG9jayBw cmV2ZW50cyB3cm9uZyBhbnN3ZXJzCi10byBxdWVyaWVzLCBidXQgaXQgZG9lcyBub3QgcHJldmVu dCBjb25jdXJyZW50IFRJRCByZWN5Y2xpbmcgaXRzZWxmIChvbmx5Ci1ob2xkaW5nIG9udG8gdGhl IGxlYWYgcGFnZSBwaW4gd2hpbGUgYWNjZXNzaW5nIHRoZSBoZWFwIGVuc3VyZXMgdGhhdCkuCi0K LUluZGV4LW9ubHkgc2NhbnMgY2FuIG5ldmVyIGRyb3AgdGhlaXIgYnVmZmVyIHBpbiwgc2luY2Ug dGhleSBhcmUgdW5hYmxlIHRvCi10b2xlcmF0ZSBoYXZpbmcgYSByZWZlcmVuY2VkIFRJRCBiZWNv bWUgcmVjeWNsYWJsZS4gIEluZGV4LW9ubHkgc2NhbnMKLXR5cGljYWxseSBqdXN0IHZpc2l0IHRo ZSB2aXNpYmlsaXR5IG1hcCAobm90IHRoZSBoZWFwIHByb3BlciksIGFuZCBzbyB3aWxsCi1ub3Qg cmVsaWFibHkgbm90aWNlIHRoYXQgYW55IHN0YWxlIFRJRCByZWZlcmVuY2UgKGZvciBhIFRJRCB0 aGF0IHBvaW50ZWQKLXRvIGEgZGVhZC10by1hbGwgaGVhcCBpdGVtIGF0IGZpcnN0KSB3YXMgY29u Y3VycmVudGx5IG1hcmtlZCBMUF9VTlVTRUQgaW4KLXRoZSBoZWFwIGJ5IFZBQ1VVTS4gIFRoaXMg Y291bGQgZWFzaWx5IGFsbG93IFZBQ1VVTSB0byBzZXQgdGhlIHdob2xlIGhlYXAKLXBhZ2UgdG8g YWxsLXZpc2libGUgaW4gdGhlIHZpc2liaWxpdHkgbWFwIGltbWVkaWF0ZWx5IGFmdGVyd2FyZHMu ICBBbiBNVkNDCi1zbmFwc2hvdCBpcyBvbmx5IHN1ZmZpY2llbnQgdG8gYXZvaWQgcHJvYmxlbXMg ZHVyaW5nIHBsYWluIGluZGV4IHNjYW5zCi1iZWNhdXNlIHRoZXkgbXVzdCBhY2Nlc3MgZ3JhbnVs YXIgdmlzaWJpbGl0eSBpbmZvcm1hdGlvbiBmcm9tIHRoZSBoZWFwCi1wcm9wZXIuICBBIHBsYWlu IGluZGV4IHNjYW4gd2lsbCBldmVuIHJlY29nbml6ZSBMUF9VTlVTRUQgaXRlbXMgaW4gdGhlCi1o ZWFwIChpdGVtcyB0aGF0IGNvdWxkIGJlIHJlY3ljbGVkIGJ1dCBoYXZlbid0IGJlZW4ganVzdCB5 ZXQpIGFzICJub3QKLXZpc2libGUiIC0tIGV2ZW4gd2hlbiB0aGUgaGVhcCBwYWdlIGlzIGdlbmVy YWxseSBjb25zaWRlcmVkIGFsbC12aXNpYmxlLgotCi1MUF9ERUFEIHNldHRpbmcgb2YgaW5kZXgg dHVwbGVzIGJ5IHRoZSBraWxsX3ByaW9yX3R1cGxlIG9wdGltaXphdGlvbgotKGRlc2NyaWJlZCBp biBmdWxsIGluIHNpbXBsZSBkZWxldGlvbiwgYmVsb3cpIGlzIGFsc28gbW9yZSBjb21wbGljYXRl ZCBmb3IKLWluZGV4IHNjYW5zIHRoYXQgZHJvcCB0aGVpciBsZWFmIHBhZ2UgcGlucy4gIFdlIG11 c3QgYmUgY2FyZWZ1bCB0byBhdm9pZAotTFBfREVBRC1tYXJraW5nIGFueSBuZXcgaW5kZXggdHVw bGUgdGhhdCBsb29rcyBsaWtlIGEga25vd24tZGVhZCBpbmRleAotdHVwbGUgYmVjYXVzZSBpdCBo YXBwZW5zIHRvIHNoYXJlIHRoZSBzYW1lIFRJRCwgZm9sbG93aW5nIGNvbmN1cnJlbnQgVElECi1y ZWN5Y2xpbmcuICBJdCdzIGp1c3QgYWJvdXQgcG9zc2libGUgdGhhdCBzb21lIG90aGVyIHNlc3Np b24gaW5zZXJ0ZWQgYQotbmV3LCB1bnJlbGF0ZWQgaW5kZXggdHVwbGUsIG9uIHRoZSBzYW1lIGxl YWYgcGFnZSwgd2hpY2ggaGFzIHRoZSBzYW1lCi1vcmlnaW5hbCBUSUQuICBJdCB3b3VsZCBiZSB0 b3RhbGx5IHdyb25nIHRvIExQX0RFQUQtc2V0IHRoaXMgbmV3LAotdW5yZWxhdGVkIGluZGV4IHR1 cGxlLgotCi1XZSBoYW5kbGUgdGhpcyBraWxsX3ByaW9yX3R1cGxlIHJhY2UgY29uZGl0aW9uIGJ5 IGhhdmluZyBhZmZlY3RlZCBpbmRleAotc2NhbnMgY29uc2VydmF0aXZlbHkgYXNzdW1lIHRoYXQg YW55IGNoYW5nZSB0byB0aGUgbGVhZiBwYWdlIGF0IGFsbAotaW1wbGllcyB0aGF0IGl0IHdhcyBy ZWFjaGVkIGJ5IGJ0YnVsa2RlbGV0ZSBpbiB0aGUgaW50ZXJpbSBwZXJpb2Qgd2hlbiBubwotYnVm ZmVyIHBpbiB3YXMgaGVsZC4gIFRoaXMgaXMgaW1wbGVtZW50ZWQgYnkgbm90IHNldHRpbmcgYW55 IExQX0RFQUQgYml0cwotb24gdGhlIGxlYWYgcGFnZSBhdCBhbGwgd2hlbiB0aGUgcGFnZSdzIExT TiBoYXMgY2hhbmdlZC4gIChUaGlzIGlzIHdoeSB3ZQotaW1wbGVtZW50ICJmYWtlIiBMU05zIGZv ciB1bmxvZ2dlZCBpbmRleCByZWxhdGlvbnMuKQotCiBGYXN0cGF0aCBGb3IgSW5kZXggSW5zZXJ0 aW9uCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKQEAgLTczNCw3ICs2ODMsNyBAQCBv ZiByZWFkZXJzIGNvdWxkIHN0aWxsIG1vdmUgcmlnaHQgdG8gcmVjb3ZlciBpZiB3ZSBkaWRuJ3Qg Y291cGxlCiBzYW1lLWxldmVsIGxvY2tzKSwgYnV0IHdlIHByZWZlciB0byBiZSBjb25zZXJ2YXRp dmUgaGVyZS4KIAogRHVyaW5nIHJlY292ZXJ5IGFsbCBpbmRleCBzY2FucyBzdGFydCB3aXRoIGln bm9yZV9raWxsZWRfdHVwbGVzID0gZmFsc2UKLWFuZCB3ZSBuZXZlciBzZXQga2lsbF9wcmlvcl90 dXBsZS4gV2UgZG8gdGhpcyBiZWNhdXNlIHRoZSBvbGRlc3QgeG1pbgorYW5kIHdlIG5ldmVyIExQ X0RFQUQtbWFyayB0dXBsZXMuIFdlIGRvIHRoaXMgYmVjYXVzZSB0aGUgb2xkZXN0IHhtaW4KIG9u IHRoZSBzdGFuZGJ5IHNlcnZlciBjYW4gYmUgb2xkZXIgdGhhbiB0aGUgb2xkZXN0IHhtaW4gb24g dGhlIHByaW1hcnkKIHNlcnZlciwgd2hpY2ggbWVhbnMgdHVwbGVzIGNhbiBiZSBtYXJrZWQgTFBf REVBRCBldmVuIHdoZW4gdGhleSBhcmUKIHN0aWxsIHZpc2libGUgb24gdGhlIHN0YW5kYnkuIFdl IGRvbid0IFdBTCBsb2cgdHVwbGUgTFBfREVBRCBiaXRzLCBidXQKQEAgLTc1Niw5ICs3MDUsOCBA QCBub24tTVZDQyBzY2FucyBpcyBub3QgcmVxdWlyZWQgb24gc3RhbmRieSBub2Rlcy4gV2Ugc3Rp bGwgZ2V0IGEgZnVsbAogY2xlYW51cCBsb2NrIHdoZW4gcmVwbGF5aW5nIFZBQ1VVTSByZWNvcmRz IGR1cmluZyByZWNvdmVyeSwgYnV0IHJlY292ZXJ5CiBkb2VzIG5vdCBuZWVkIHRvIGxvY2sgZXZl cnkgbGVhZiBwYWdlIChvbmx5IHRob3NlIGxlYWYgcGFnZXMgdGhhdCBoYXZlCiBpdGVtcyB0byBk ZWxldGUpIC0tIHRoYXQncyBzdWZmaWNpZW50IHRvIGF2b2lkIGJyZWFraW5nIGluZGV4LW9ubHkg c2NhbnMKLWR1cmluZyByZWNvdmVyeSAoc2VlIHNlY3Rpb24gYWJvdmUgYWJvdXQgbWFraW5nIFRJ RCByZWN5Y2xpbmcgc2FmZSkuIFRoYXQKLWxlYXZlcyBjb25jZXJuIG9ubHkgZm9yIHBsYWluIGlu ZGV4IHNjYW5zLiAoWFhYOiBOb3QgYWN0dWFsbHkgY2xlYXIgd2h5Ci10aGlzIGlzIHRvdGFsbHkg dW5uZWNlc3NhcnkgZHVyaW5nIHJlY292ZXJ5LikKK2R1cmluZyByZWNvdmVyeS4gVGhhdCBsZWF2 ZXMgY29uY2VybiBvbmx5IGZvciBwbGFpbiBpbmRleCBzY2Fucy4KKyhYWFg6IE5vdCBhY3R1YWxs eSBjbGVhciB3aHkgdGhpcyBpcyB0b3RhbGx5IHVubmVjZXNzYXJ5IGR1cmluZyByZWNvdmVyeS4p CiAKIE1WQ0Mgc25hcHNob3QgcGxhaW4gaW5kZXggc2NhbnMgYXJlIGFsd2F5cyBzYWZlLCBmb3Ig dGhlIHNhbWUgcmVhc29ucyB0aGF0CiB0aGV5J3JlIHNhZmUgZHVyaW5nIG9yaWdpbmFsIGV4ZWN1 dGlvbi4gIEhlYXBUdXBsZVNhdGlzZmllc1RvYXN0KCkgZG9lc24ndApkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRwYWdlLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0 cmVlL25idHBhZ2UuYwppbmRleCAwNTQ3MDM4NjEuLjAwNDZjODRkMSAxMDA2NDQKLS0tIGEvc3Jj L2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRwYWdlLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNz L25idHJlZS9uYnRwYWdlLmMKQEAgLTEwNjAsNiArMTA2MCw5IEBAIF9idF9yZWxidWYoUmVsYXRp b24gcmVsLCBCdWZmZXIgYnVmKQogICogTG9jayBpcyBhY3F1aXJlZCB3aXRob3V0IGFjcXVpcmlu ZyBhbm90aGVyIHBpbi4gIFRoaXMgaXMgbGlrZSBhIHJhdwogICogTG9ja0J1ZmZlcigpIGNhbGws IGJ1dCBwZXJmb3JtcyBleHRyYSBzdGVwcyBuZWVkZWQgYnkgVmFsZ3JpbmQuCiAgKgorICogTm90 ZTogX2J0X2JhdGNoX3VubG9jayBpbiBuYnRzZWFyY2guYyAoaW5kZXhhbV91dGlsX2JhdGNoX3Vu bG9jayB3cmFwcGVyCisgKiBmdW5jdGlvbikgaGFzIG1hdGNoaW5nIFZhbGdyaW5kIGJ1ZmZlciBs b2NrIGluc3RydW1lbnRhdGlvbi4KKyAqCiAgKiBOb3RlOiBDYWxsZXIgbWF5IG5lZWQgdG8gY2Fs bCBfYnRfY2hlY2twYWdlKCkgd2l0aCBidWYgd2hlbiBwaW4gb24gYnVmCiAgKiB3YXNuJ3Qgb3Jp Z2luYWxseSBhY3F1aXJlZCBpbiBfYnRfZ2V0YnVmKCkgb3IgX2J0X3JlbGFuZGdldGJ1ZigpLgog ICovCkBAIC0xMTAxLDEzICsxMTA0LDE5IEBAIF9idF91bmxvY2tidWYoUmVsYXRpb24gcmVsLCBC dWZmZXIgYnVmKQogCSAqIEJ1ZmZlciBpcyBwaW5uZWQgYW5kIGxvY2tlZCwgd2hpY2ggbWVhbnMg dGhhdCBpdCBpcyBleHBlY3RlZCB0byBiZQogCSAqIGRlZmluZWQgYW5kIGFkZHJlc3NhYmxlLiAg Q2hlY2sgdGhhdCBwcm9hY3RpdmVseS4KIAkgKi8KLQlWQUxHUklORF9DSEVDS19NRU1fSVNfREVG SU5FRChCdWZmZXJHZXRQYWdlKGJ1ZiksIEJMQ0tTWik7CisjaWYgZGVmaW5lZChVU0VfVkFMR1JJ TkQpCisJUGFnZQkJcGFnZSA9IEJ1ZmZlckdldFBhZ2UoYnVmKTsKKworCVZBTEdSSU5EX0NIRUNL X01FTV9JU19ERUZJTkVEKHBhZ2UsIEJMQ0tTWik7CisjZW5kaWYKIAogCS8qIExvY2tCdWZmZXIo KSBhc3NlcnRzIHRoYXQgcGluIGlzIGhlbGQgYnkgdGhpcyBiYWNrZW5kICovCiAJTG9ja0J1ZmZl cihidWYsIEJVRkZFUl9MT0NLX1VOTE9DSyk7CiAKKyNpZiBkZWZpbmVkKFVTRV9WQUxHUklORCkK IAlpZiAoIVJlbGF0aW9uVXNlc0xvY2FsQnVmZmVycyhyZWwpKQotCQlWQUxHUklORF9NQUtFX01F TV9OT0FDQ0VTUyhCdWZmZXJHZXRQYWdlKGJ1ZiksIEJMQ0tTWik7CisJCVZBTEdSSU5EX01BS0Vf TUVNX05PQUNDRVNTKHBhZ2UsIEJMQ0tTWik7CisjZW5kaWYKIH0KIAogLyoKZGlmZiAtLWdpdCBh L3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0cmVhZHBhZ2UuYyBiL3NyYy9iYWNrZW5kL2Fj Y2Vzcy9uYnRyZWUvbmJ0cmVhZHBhZ2UuYwppbmRleCAyYmExY2E2NjAuLjM5YzY2MTQ5OCAxMDA2 NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRyZWFkcGFnZS5jCisrKyBiL3Ny Yy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0cmVhZHBhZ2UuYwpAQCAtMzIsNiArMzIsNyBAQCB0 eXBlZGVmIHN0cnVjdCBCVFJlYWRQYWdlU3RhdGUKIHsKIAkvKiBJbnB1dCBwYXJhbWV0ZXJzLCBz ZXQgYnkgX2J0X3JlYWRwYWdlIGZvciBfYnRfY2hlY2trZXlzICovCiAJU2NhbkRpcmVjdGlvbiBk aXI7CQkJLyogY3VycmVudCBzY2FuIGRpcmVjdGlvbiAqLworCUJsb2NrTnVtYmVyIGN1cnJwYWdl OwkJLyogY3VycmVudCBwYWdlIGJlaW5nIHJlYWQgKi8KIAlPZmZzZXROdW1iZXIgbWlub2ZmOwkJ LyogTG93ZXN0IG5vbi1waXZvdCB0dXBsZSdzIG9mZnNldCAqLwogCU9mZnNldE51bWJlciBtYXhv ZmY7CQkvKiBIaWdoZXN0IG5vbi1waXZvdCB0dXBsZSdzIG9mZnNldCAqLwogCUluZGV4VHVwbGUJ ZmluYWx0dXA7CQkvKiBOZWVkZWQgYnkgc2NhbnMgd2l0aCBhcnJheSBrZXlzICovCkBAIC02Mywx NCArNjQsMTMgQEAgc3RhdGljIGJvb2wgX2J0X3NjYW5iZWhpbmRfY2hlY2trZXlzKEluZGV4U2Nh bkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIsCiAJCQkJCQkJCQkgSW5kZXhUdXBsZSBmaW5h bHR1cCk7CiBzdGF0aWMgYm9vbCBfYnRfb3Bwb2Rpcl9jaGVja2tleXMoSW5kZXhTY2FuRGVzYyBz Y2FuLCBTY2FuRGlyZWN0aW9uIGRpciwKIAkJCQkJCQkJICBJbmRleFR1cGxlIGZpbmFsdHVwKTsK LXN0YXRpYyB2b2lkIF9idF9zYXZlaXRlbShCVFNjYW5PcGFxdWUgc28sIGludCBpdGVtSW5kZXgs Ci0JCQkJCQkgT2Zmc2V0TnVtYmVyIG9mZm51bSwgSW5kZXhUdXBsZSBpdHVwKTsKLXN0YXRpYyBp bnQJX2J0X3NldHVwcG9zdGluZ2l0ZW1zKEJUU2Nhbk9wYXF1ZSBzbywgaW50IGl0ZW1JbmRleCwK LQkJCQkJCQkJICBPZmZzZXROdW1iZXIgb2ZmbnVtLCBjb25zdCBJdGVtUG9pbnRlckRhdGEgKmhl YXBUaWQsCi0JCQkJCQkJCSAgSW5kZXhUdXBsZSBpdHVwKTsKLXN0YXRpYyBpbmxpbmUgdm9pZCBf YnRfc2F2ZXBvc3RpbmdpdGVtKEJUU2Nhbk9wYXF1ZSBzbywgaW50IGl0ZW1JbmRleCwKLQkJCQkJ CQkJCSAgIE9mZnNldE51bWJlciBvZmZudW0sCi0JCQkJCQkJCQkgICBJdGVtUG9pbnRlciBoZWFw VGlkLCBpbnQgdHVwbGVPZmZzZXQpOworc3RhdGljIHZvaWQgX2J0X3NhdmVpdGVtKEluZGV4U2Nh bkJhdGNoIG5ld2JhdGNoLCBpbnQgaXRlbUluZGV4LCBPZmZzZXROdW1iZXIgb2ZmbnVtLAorCQkJ CQkJIEluZGV4VHVwbGUgaXR1cCwgaW50ICp0dXBsZU9mZnNldCk7CitzdGF0aWMgaW50CV9idF9z ZXR1cHBvc3RpbmdpdGVtcyhJbmRleFNjYW5CYXRjaCBuZXdiYXRjaCwgaW50IGl0ZW1JbmRleCwK KwkJCQkJCQkJICBPZmZzZXROdW1iZXIgb2ZmbnVtLCBjb25zdCBJdGVtUG9pbnRlckRhdGEgKnRh YmxlVGlkLAorCQkJCQkJCQkgIEluZGV4VHVwbGUgaXR1cCwgaW50ICp0dXBsZU9mZnNldCk7Citz dGF0aWMgaW5saW5lIHZvaWQgX2J0X3NhdmVwb3N0aW5naXRlbShJbmRleFNjYW5CYXRjaCBuZXdi YXRjaCwgaW50IGl0ZW1JbmRleCwgT2Zmc2V0TnVtYmVyIG9mZm51bSwKKwkJCQkJCQkJCSAgIEl0 ZW1Qb2ludGVyIHRhYmxlVGlkLCBpbnQgYmFzZU9mZnNldCk7CiBzdGF0aWMgYm9vbCBfYnRfY2hl Y2trZXlzKEluZGV4U2NhbkRlc2Mgc2NhbiwgQlRSZWFkUGFnZVN0YXRlICpwc3RhdGUsIGJvb2wg YXJyYXlLZXlzLAogCQkJCQkJICBJbmRleFR1cGxlIHR1cGxlLCBpbnQgdHVwbmF0dHMpOwogc3Rh dGljIGJvb2wgX2J0X2NoZWNrX2NvbXBhcmUoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0 aW9uIGRpciwKQEAgLTExMSwxNSArMTExLDE1IEBAIHN0YXRpYyBib29sIF9idF92ZXJpZnlfa2V5 c193aXRoX2FycmF5a2V5cyhJbmRleFNjYW5EZXNjIHNjYW4pOwogCiAKIC8qCi0gKglfYnRfcmVh ZHBhZ2UoKSAtLSBMb2FkIGRhdGEgZnJvbSBjdXJyZW50IGluZGV4IHBhZ2UgaW50byBzby0+Y3Vy clBvcworICoJX2J0X3JlYWRwYWdlKCkgLS0gTG9hZCBkYXRhIGZyb20gY3VycmVudCBpbmRleCBw YWdlIGludG8gbmV3YmF0Y2guCiAgKgotICogQ2FsbGVyIG11c3QgaGF2ZSBwaW5uZWQgYW5kIHJl YWQtbG9ja2VkIHNvLT5jdXJyUG9zLmJ1ZjsgdGhlIGJ1ZmZlcidzIHN0YXRlCi0gKiBpcyBub3Qg Y2hhbmdlZCBoZXJlLiAgQWxzbywgY3VyclBvcy5tb3JlTGVmdCBhbmQgbW9yZVJpZ2h0IG11c3Qg YmUgdmFsaWQ7Ci0gKiB0aGV5IGFyZSB1cGRhdGVkIGFzIGFwcHJvcHJpYXRlLiAgQWxsIG90aGVy IGZpZWxkcyBvZiBzby0+Y3VyclBvcyBhcmUKKyAqIENhbGxlciBtdXN0IGhhdmUgcGlubmVkIGFu ZCByZWFkLWxvY2tlZCBuZXdiYXRjaC5idWY7IHRoZSBidWZmZXIncyBzdGF0ZSBpcworICogbm90 IGNoYW5nZWQgaGVyZS4gIEFsc28sIG5ld2JhdGNoJ3MgbW9yZUxlZnQgYW5kIG1vcmVSaWdodCBt dXN0IGJlIHZhbGlkOworICogdGhleSBhcmUgdXBkYXRlZCBhcyBhcHByb3ByaWF0ZS4gIEFsbCBv dGhlciBmaWVsZHMgb2YgbmV3YmF0Y2ggYXJlCiAgKiBpbml0aWFsaXplZCBmcm9tIHNjcmF0Y2gg aGVyZS4KICAqCiAgKiBXZSBzY2FuIHRoZSBjdXJyZW50IHBhZ2Ugc3RhcnRpbmcgYXQgb2ZmbnVt IGFuZCBtb3ZpbmcgaW4gdGhlIGluZGljYXRlZAotICogZGlyZWN0aW9uLiAgQWxsIGl0ZW1zIG1h dGNoaW5nIHRoZSBzY2FuIGtleXMgYXJlIGxvYWRlZCBpbnRvIGN1cnJQb3MuaXRlbXMuCisgKiBk aXJlY3Rpb24uICBBbGwgaXRlbXMgbWF0Y2hpbmcgdGhlIHNjYW4ga2V5cyBhcmUgc2F2ZWQgaW4g bmV3YmF0Y2guaXRlbXMuCiAgKiBtb3JlTGVmdCBvciBtb3JlUmlnaHQgKGFzIGFwcHJvcHJpYXRl KSBpcyBjbGVhcmVkIGlmIF9idF9jaGVja2tleXMgcmVwb3J0cwogICogdGhhdCB0aGVyZSBjYW4g YmUgbm8gbW9yZSBtYXRjaGluZyB0dXBsZXMgaW4gdGhlIGN1cnJlbnQgc2NhbiBkaXJlY3Rpb24K ICAqIChjb3VsZCBqdXN0IGJlIGZvciB0aGUgY3VycmVudCBwcmltaXRpdmUgaW5kZXggc2NhbiB3 aGVuIHNjYW4gaGFzIGFycmF5cykuCkBAIC0xMzEsMTEgKzEzMSwxMiBAQCBzdGF0aWMgYm9vbCBf YnRfdmVyaWZ5X2tleXNfd2l0aF9hcnJheWtleXMoSW5kZXhTY2FuRGVzYyBzY2FuKTsKICAqIFJl dHVybnMgdHJ1ZSBpZiBhbnkgbWF0Y2hpbmcgaXRlbXMgZm91bmQgb24gdGhlIHBhZ2UsIGZhbHNl IGlmIG5vbmUuCiAgKi8KIGJvb2wKLV9idF9yZWFkcGFnZShJbmRleFNjYW5EZXNjIHNjYW4sIFNj YW5EaXJlY3Rpb24gZGlyLCBPZmZzZXROdW1iZXIgb2ZmbnVtLAotCQkJIGJvb2wgZmlyc3RwYWdl KQorX2J0X3JlYWRwYWdlKEluZGV4U2NhbkRlc2Mgc2NhbiwgSW5kZXhTY2FuQmF0Y2ggbmV3YmF0 Y2gsIFNjYW5EaXJlY3Rpb24gZGlyLAorCQkJIE9mZnNldE51bWJlciBvZmZudW0sIGJvb2wgZmly c3RwYWdlKQogewogCVJlbGF0aW9uCXJlbCA9IHNjYW4tPmluZGV4UmVsYXRpb247CiAJQlRTY2Fu T3BhcXVlIHNvID0gKEJUU2Nhbk9wYXF1ZSkgc2Nhbi0+b3BhcXVlOworCUJUQmF0Y2hEYXRhICpi dG5ld2JhdGNoID0gQlRCYXRjaEdldERhdGEoc2NhbiwgbmV3YmF0Y2gpOwogCVBhZ2UJCXBhZ2U7 CiAJQlRQYWdlT3BhcXVlIG9wYXF1ZTsKIAlPZmZzZXROdW1iZXIgbWlub2ZmOwpAQCAtMTQ0LDIz ICsxNDUsMjAgQEAgX2J0X3JlYWRwYWdlKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlv biBkaXIsIE9mZnNldE51bWJlciBvZmZudW0sCiAJYm9vbAkJYXJyYXlLZXlzLAogCQkJCWlnbm9y ZV9raWxsZWRfdHVwbGVzID0gc2Nhbi0+aWdub3JlX2tpbGxlZF90dXBsZXM7CiAJaW50CQkJaXRl bUluZGV4LAorCQkJCXR1cGxlT2Zmc2V0ID0gMCwKIAkJCQlpbmRuYXR0czsKIAogCS8qIHNhdmUg dGhlIHBhZ2UvYnVmZmVyIGJsb2NrIG51bWJlciwgYWxvbmcgd2l0aCBpdHMgc2libGluZyBsaW5r cyAqLwotCXBhZ2UgPSBCdWZmZXJHZXRQYWdlKHNvLT5jdXJyUG9zLmJ1Zik7CisJcGFnZSA9IEJ1 ZmZlckdldFBhZ2UoYnRuZXdiYXRjaC0+YnVmKTsKIAlvcGFxdWUgPSBCVFBhZ2VHZXRPcGFxdWUo cGFnZSk7Ci0Jc28tPmN1cnJQb3MuY3VyclBhZ2UgPSBCdWZmZXJHZXRCbG9ja051bWJlcihzby0+ Y3VyclBvcy5idWYpOwotCXNvLT5jdXJyUG9zLnByZXZQYWdlID0gb3BhcXVlLT5idHBvX3ByZXY7 Ci0Jc28tPmN1cnJQb3MubmV4dFBhZ2UgPSBvcGFxdWUtPmJ0cG9fbmV4dDsKLQkvKiBkZWxheSBz ZXR0aW5nIHNvLT5jdXJyUG9zLmxzbiB1bnRpbCBfYnRfZHJvcF9sb2NrX2FuZF9tYXliZV9waW4g Ki8KLQlwc3RhdGUuZGlyID0gc28tPmN1cnJQb3MuZGlyID0gZGlyOwotCXNvLT5jdXJyUG9zLm5l eHRUdXBsZU9mZnNldCA9IDA7CisJcHN0YXRlLmN1cnJwYWdlID0gYnRuZXdiYXRjaC0+Y3VyclBh Z2UgPSBCdWZmZXJHZXRCbG9ja051bWJlcihidG5ld2JhdGNoLT5idWYpOworCWJ0bmV3YmF0Y2gt PnByZXZQYWdlID0gb3BhcXVlLT5idHBvX3ByZXY7CisJYnRuZXdiYXRjaC0+bmV4dFBhZ2UgPSBv cGFxdWUtPmJ0cG9fbmV4dDsKKwlwc3RhdGUuZGlyID0gbmV3YmF0Y2gtPmRpciA9IGRpcjsKIAog CS8qIGVpdGhlciBtb3JlUmlnaHQgb3IgbW9yZUxlZnQgc2hvdWxkIGJlIHNldCBub3cgKG1heSBi ZSB1bnNldCBsYXRlcikgKi8KLQlBc3NlcnQoU2NhbkRpcmVjdGlvbklzRm9yd2FyZChkaXIpID8g c28tPmN1cnJQb3MubW9yZVJpZ2h0IDoKLQkJICAgc28tPmN1cnJQb3MubW9yZUxlZnQpOworCUFz c2VydChTY2FuRGlyZWN0aW9uSXNGb3J3YXJkKGRpcikgPyBidG5ld2JhdGNoLT5tb3JlUmlnaHQg OiBidG5ld2JhdGNoLT5tb3JlTGVmdCk7CiAJQXNzZXJ0KCFQX0lHTk9SRShvcGFxdWUpKTsKLQlB c3NlcnQoQlRTY2FuUG9zSXNQaW5uZWQoc28tPmN1cnJQb3MpKTsKIAlBc3NlcnQoIXNvLT5uZWVk UHJpbVNjYW4pOwogCiAJLyogaW5pdGlhbGl6ZSBsb2NhbCB2YXJpYWJsZXMgKi8KQEAgLTE4OCwx NCArMTg2LDE0IEBAIF9idF9yZWFkcGFnZShJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rp b24gZGlyLCBPZmZzZXROdW1iZXIgb2ZmbnVtLAogCXsKIAkJLyogYWxsb3cgbmV4dC9wcmV2IHBh Z2UgdG8gYmUgcmVhZCBieSBvdGhlciB3b3JrZXIgd2l0aG91dCBkZWxheSAqLwogCQlpZiAoU2Nh bkRpcmVjdGlvbklzRm9yd2FyZChkaXIpKQotCQkJX2J0X3BhcmFsbGVsX3JlbGVhc2Uoc2Nhbiwg c28tPmN1cnJQb3MubmV4dFBhZ2UsCi0JCQkJCQkJCSBzby0+Y3VyclBvcy5jdXJyUGFnZSk7CisJ CQlfYnRfcGFyYWxsZWxfcmVsZWFzZShzY2FuLCBidG5ld2JhdGNoLT5uZXh0UGFnZSwKKwkJCQkJ CQkJIGJ0bmV3YmF0Y2gtPmN1cnJQYWdlKTsKIAkJZWxzZQotCQkJX2J0X3BhcmFsbGVsX3JlbGVh c2Uoc2Nhbiwgc28tPmN1cnJQb3MucHJldlBhZ2UsCi0JCQkJCQkJCSBzby0+Y3VyclBvcy5jdXJy UGFnZSk7CisJCQlfYnRfcGFyYWxsZWxfcmVsZWFzZShzY2FuLCBidG5ld2JhdGNoLT5wcmV2UGFn ZSwKKwkJCQkJCQkJIGJ0bmV3YmF0Y2gtPmN1cnJQYWdlKTsKIAl9CiAKLQlQcmVkaWNhdGVMb2Nr UGFnZShyZWwsIHNvLT5jdXJyUG9zLmN1cnJQYWdlLCBzY2FuLT54c19zbmFwc2hvdCk7CisJUHJl ZGljYXRlTG9ja1BhZ2UocmVsLCBwc3RhdGUuY3VycnBhZ2UsIHNjYW4tPnhzX3NuYXBzaG90KTsK IAogCWlmIChTY2FuRGlyZWN0aW9uSXNGb3J3YXJkKGRpcikpCiAJewpAQCAtMjEyLDExICsyMTAs MTEgQEAgX2J0X3JlYWRwYWdlKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIs IE9mZnNldE51bWJlciBvZmZudW0sCiAJCQkJCSFfYnRfc2NhbmJlaGluZF9jaGVja2tleXMoc2Nh biwgZGlyLCBwc3RhdGUuZmluYWx0dXApKQogCQkJCXsKIAkJCQkJLyogU2NoZWR1bGUgYW5vdGhl ciBwcmltaXRpdmUgaW5kZXggc2NhbiBhZnRlciBhbGwgKi8KLQkJCQkJc28tPmN1cnJQb3MubW9y ZVJpZ2h0ID0gZmFsc2U7CisJCQkJCWJ0bmV3YmF0Y2gtPm1vcmVSaWdodCA9IGZhbHNlOwogCQkJ CQlzby0+bmVlZFByaW1TY2FuID0gdHJ1ZTsKIAkJCQkJaWYgKHNjYW4tPnBhcmFsbGVsX3NjYW4p CiAJCQkJCQlfYnRfcGFyYWxsZWxfcHJpbXNjYW5fc2NoZWR1bGUoc2NhbiwKLQkJCQkJCQkJCQkJ CQkgICBzby0+Y3VyclBvcy5jdXJyUGFnZSk7CisJCQkJCQkJCQkJCQkJICAgYnRuZXdiYXRjaC0+ Y3VyclBhZ2UpOwogCQkJCQlyZXR1cm4gZmFsc2U7CiAJCQkJfQogCQkJfQpAQCAtMjgwLDI2ICsy NzgsMjYgQEAgX2J0X3JlYWRwYWdlKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBk aXIsIE9mZnNldE51bWJlciBvZmZudW0sCiAJCQkJaWYgKCFCVHJlZVR1cGxlSXNQb3N0aW5nKGl0 dXApKQogCQkJCXsKIAkJCQkJLyogUmVtZW1iZXIgaXQgKi8KLQkJCQkJX2J0X3NhdmVpdGVtKHNv LCBpdGVtSW5kZXgsIG9mZm51bSwgaXR1cCk7CisJCQkJCV9idF9zYXZlaXRlbShuZXdiYXRjaCwg aXRlbUluZGV4LCBvZmZudW0sIGl0dXAsICZ0dXBsZU9mZnNldCk7CiAJCQkJCWl0ZW1JbmRleCsr OwogCQkJCX0KIAkJCQllbHNlCiAJCQkJewotCQkJCQlpbnQJCQl0dXBsZU9mZnNldDsKKwkJCQkJ aW50CQkJYmFzZU9mZnNldDsKIAogCQkJCQkvKiBTZXQgdXAgcG9zdGluZyBsaXN0IHN0YXRlIChh bmQgcmVtZW1iZXIgZmlyc3QgVElEKSAqLwotCQkJCQl0dXBsZU9mZnNldCA9Ci0JCQkJCQlfYnRf c2V0dXBwb3N0aW5naXRlbXMoc28sIGl0ZW1JbmRleCwgb2ZmbnVtLAorCQkJCQliYXNlT2Zmc2V0 ID0KKwkJCQkJCV9idF9zZXR1cHBvc3RpbmdpdGVtcyhuZXdiYXRjaCwgaXRlbUluZGV4LCBvZmZu dW0sCiAJCQkJCQkJCQkJCSAgQlRyZWVUdXBsZUdldFBvc3RpbmdOKGl0dXAsIDApLAotCQkJCQkJ CQkJCQkgIGl0dXApOworCQkJCQkJCQkJCQkgIGl0dXAsICZ0dXBsZU9mZnNldCk7CiAJCQkJCWl0 ZW1JbmRleCsrOwogCiAJCQkJCS8qIFJlbWVtYmVyIGFsbCBsYXRlciBUSURzIChtdXN0IGJlIGF0 IGxlYXN0IG9uZSkgKi8KIAkJCQkJZm9yIChpbnQgaSA9IDE7IGkgPCBCVHJlZVR1cGxlR2V0TlBv c3RpbmcoaXR1cCk7IGkrKykKIAkJCQkJewotCQkJCQkJX2J0X3NhdmVwb3N0aW5naXRlbShzbywg aXRlbUluZGV4LCBvZmZudW0sCisJCQkJCQlfYnRfc2F2ZXBvc3RpbmdpdGVtKG5ld2JhdGNoLCBp dGVtSW5kZXgsIG9mZm51bSwKIAkJCQkJCQkJCQkJQlRyZWVUdXBsZUdldFBvc3RpbmdOKGl0dXAs IGkpLAotCQkJCQkJCQkJCQl0dXBsZU9mZnNldCk7CisJCQkJCQkJCQkJCWJhc2VPZmZzZXQpOwog CQkJCQkJaXRlbUluZGV4Kys7CiAJCQkJCX0KIAkJCQl9CkBAIC0zMzksMTIgKzMzNywxMSBAQCBf YnRfcmVhZHBhZ2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpciwgT2Zmc2V0 TnVtYmVyIG9mZm51bSwKIAkJfQogCiAJCWlmICghcHN0YXRlLmNvbnRpbnVlc2NhbikKLQkJCXNv LT5jdXJyUG9zLm1vcmVSaWdodCA9IGZhbHNlOworCQkJYnRuZXdiYXRjaC0+bW9yZVJpZ2h0ID0g ZmFsc2U7CiAKIAkJQXNzZXJ0KGl0ZW1JbmRleCA8PSBNYXhUSURzUGVyQlRyZWVQYWdlKTsKLQkJ c28tPmN1cnJQb3MuZmlyc3RJdGVtID0gMDsKLQkJc28tPmN1cnJQb3MubGFzdEl0ZW0gPSBpdGVt SW5kZXggLSAxOwotCQlzby0+Y3VyclBvcy5pdGVtSW5kZXggPSAwOworCQluZXdiYXRjaC0+Zmly c3RJdGVtID0gMDsKKwkJbmV3YmF0Y2gtPmxhc3RJdGVtID0gaXRlbUluZGV4IC0gMTsKIAl9CiAJ ZWxzZQogCXsKQEAgLTM2MSwxMSArMzU4LDExIEBAIF9idF9yZWFkcGFnZShJbmRleFNjYW5EZXNj IHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyLCBPZmZzZXROdW1iZXIgb2ZmbnVtLAogCQkJCQkhX2J0 X3NjYW5iZWhpbmRfY2hlY2trZXlzKHNjYW4sIGRpciwgcHN0YXRlLmZpbmFsdHVwKSkKIAkJCQl7 CiAJCQkJCS8qIFNjaGVkdWxlIGFub3RoZXIgcHJpbWl0aXZlIGluZGV4IHNjYW4gYWZ0ZXIgYWxs ICovCi0JCQkJCXNvLT5jdXJyUG9zLm1vcmVMZWZ0ID0gZmFsc2U7CisJCQkJCWJ0bmV3YmF0Y2gt Pm1vcmVMZWZ0ID0gZmFsc2U7CiAJCQkJCXNvLT5uZWVkUHJpbVNjYW4gPSB0cnVlOwogCQkJCQlp ZiAoc2Nhbi0+cGFyYWxsZWxfc2NhbikKIAkJCQkJCV9idF9wYXJhbGxlbF9wcmltc2Nhbl9zY2hl ZHVsZShzY2FuLAotCQkJCQkJCQkJCQkJCSAgIHNvLT5jdXJyUG9zLmN1cnJQYWdlKTsKKwkJCQkJ CQkJCQkJCQkgICBidG5ld2JhdGNoLT5jdXJyUGFnZSk7CiAJCQkJCXJldHVybiBmYWxzZTsKIAkJ CQl9CiAJCQl9CkBAIC00NjYsMjcgKzQ2MywyNyBAQCBfYnRfcmVhZHBhZ2UoSW5kZXhTY2FuRGVz YyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpciwgT2Zmc2V0TnVtYmVyIG9mZm51bSwKIAkJCQl7CiAJ CQkJCS8qIFJlbWVtYmVyIGl0ICovCiAJCQkJCWl0ZW1JbmRleC0tOwotCQkJCQlfYnRfc2F2ZWl0 ZW0oc28sIGl0ZW1JbmRleCwgb2ZmbnVtLCBpdHVwKTsKKwkJCQkJX2J0X3NhdmVpdGVtKG5ld2Jh dGNoLCBpdGVtSW5kZXgsIG9mZm51bSwgaXR1cCwgJnR1cGxlT2Zmc2V0KTsKIAkJCQl9CiAJCQkJ ZWxzZQogCQkJCXsKIAkJCQkJdWludDE2CQluaXRlbXMgPSBCVHJlZVR1cGxlR2V0TlBvc3Rpbmco aXR1cCk7Ci0JCQkJCWludAkJCXR1cGxlT2Zmc2V0OworCQkJCQlpbnQJCQliYXNlT2Zmc2V0Owog CiAJCQkJCS8qIFNldCB1cCBwb3N0aW5nIGxpc3Qgc3RhdGUgKGFuZCByZW1lbWJlciBsYXN0IFRJ RCkgKi8KIAkJCQkJaXRlbUluZGV4LS07Ci0JCQkJCXR1cGxlT2Zmc2V0ID0KLQkJCQkJCV9idF9z ZXR1cHBvc3RpbmdpdGVtcyhzbywgaXRlbUluZGV4LCBvZmZudW0sCisJCQkJCWJhc2VPZmZzZXQg PQorCQkJCQkJX2J0X3NldHVwcG9zdGluZ2l0ZW1zKG5ld2JhdGNoLCBpdGVtSW5kZXgsIG9mZm51 bSwKIAkJCQkJCQkJCQkJICBCVHJlZVR1cGxlR2V0UG9zdGluZ04oaXR1cCwgbml0ZW1zIC0gMSks Ci0JCQkJCQkJCQkJCSAgaXR1cCk7CisJCQkJCQkJCQkJCSAgaXR1cCwgJnR1cGxlT2Zmc2V0KTsK IAogCQkJCQkvKiBSZW1lbWJlciBhbGwgcHJpb3IgVElEcyAobXVzdCBiZSBhdCBsZWFzdCBvbmUp ICovCiAJCQkJCWZvciAoaW50IGkgPSBuaXRlbXMgLSAyOyBpID49IDA7IGktLSkKIAkJCQkJewog CQkJCQkJaXRlbUluZGV4LS07Ci0JCQkJCQlfYnRfc2F2ZXBvc3RpbmdpdGVtKHNvLCBpdGVtSW5k ZXgsIG9mZm51bSwKKwkJCQkJCV9idF9zYXZlcG9zdGluZ2l0ZW0obmV3YmF0Y2gsIGl0ZW1JbmRl eCwgb2ZmbnVtLAogCQkJCQkJCQkJCQlCVHJlZVR1cGxlR2V0UG9zdGluZ04oaXR1cCwgaSksCi0J CQkJCQkJCQkJCXR1cGxlT2Zmc2V0KTsKKwkJCQkJCQkJCQkJYmFzZU9mZnNldCk7CiAJCQkJCX0K IAkJCQl9CiAJCQl9CkBAIC01MDIsMTIgKzQ5OSwxMSBAQCBfYnRfcmVhZHBhZ2UoSW5kZXhTY2Fu RGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpciwgT2Zmc2V0TnVtYmVyIG9mZm51bSwKIAkJICog YmUgZm91bmQgdGhlcmUKIAkJICovCiAJCWlmICghcHN0YXRlLmNvbnRpbnVlc2NhbikKLQkJCXNv LT5jdXJyUG9zLm1vcmVMZWZ0ID0gZmFsc2U7CisJCQlidG5ld2JhdGNoLT5tb3JlTGVmdCA9IGZh bHNlOwogCiAJCUFzc2VydChpdGVtSW5kZXggPj0gMCk7Ci0JCXNvLT5jdXJyUG9zLmZpcnN0SXRl bSA9IGl0ZW1JbmRleDsKLQkJc28tPmN1cnJQb3MubGFzdEl0ZW0gPSBNYXhUSURzUGVyQlRyZWVQ YWdlIC0gMTsKLQkJc28tPmN1cnJQb3MuaXRlbUluZGV4ID0gTWF4VElEc1BlckJUcmVlUGFnZSAt IDE7CisJCW5ld2JhdGNoLT5maXJzdEl0ZW0gPSBpdGVtSW5kZXg7CisJCW5ld2JhdGNoLT5sYXN0 SXRlbSA9IE1heFRJRHNQZXJCVHJlZVBhZ2UgLSAxOwogCX0KIAogCS8qCkBAIC01MjQsNyArNTIw LDcgQEAgX2J0X3JlYWRwYWdlKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIs IE9mZnNldE51bWJlciBvZmZudW0sCiAJICovCiAJQXNzZXJ0KCFwc3RhdGUuZm9yY2Vub25yZXF1 aXJlZCk7CiAKLQlyZXR1cm4gKHNvLT5jdXJyUG9zLmZpcnN0SXRlbSA8PSBzby0+Y3VyclBvcy5s YXN0SXRlbSk7CisJcmV0dXJuIChuZXdiYXRjaC0+Zmlyc3RJdGVtIDw9IG5ld2JhdGNoLT5sYXN0 SXRlbSk7CiB9CiAKIC8qCkBAIC0xMDI3LDkwICsxMDIzLDkxIEBAIF9idF9vcHBvZGlyX2NoZWNr a2V5cyhJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyLAogCXJldHVybiB0cnVl OwogfQogCi0vKiBTYXZlIGFuIGluZGV4IGl0ZW0gaW50byBzby0+Y3VyclBvcy5pdGVtc1tpdGVt SW5kZXhdICovCisvKiBTYXZlIGFuIGluZGV4IGl0ZW0gaW50byBuZXdiYXRjaC5pdGVtc1tpdGVt SW5kZXhdICovCiBzdGF0aWMgdm9pZAotX2J0X3NhdmVpdGVtKEJUU2Nhbk9wYXF1ZSBzbywgaW50 IGl0ZW1JbmRleCwKLQkJCSBPZmZzZXROdW1iZXIgb2ZmbnVtLCBJbmRleFR1cGxlIGl0dXApCitf YnRfc2F2ZWl0ZW0oSW5kZXhTY2FuQmF0Y2ggbmV3YmF0Y2gsIGludCBpdGVtSW5kZXgsIE9mZnNl dE51bWJlciBvZmZudW0sCisJCQkgSW5kZXhUdXBsZSBpdHVwLCBpbnQgKnR1cGxlT2Zmc2V0KQog ewotCUJUU2NhblBvc0l0ZW0gKmN1cnJJdGVtID0gJnNvLT5jdXJyUG9zLml0ZW1zW2l0ZW1JbmRl eF07Ci0KIAlBc3NlcnQoIUJUcmVlVHVwbGVJc1Bpdm90KGl0dXApICYmICFCVHJlZVR1cGxlSXNQ b3N0aW5nKGl0dXApKTsKIAotCWN1cnJJdGVtLT5oZWFwVGlkID0gaXR1cC0+dF90aWQ7Ci0JY3Vy ckl0ZW0tPmluZGV4T2Zmc2V0ID0gb2ZmbnVtOwotCWlmIChzby0+Y3VyclR1cGxlcykKKwluZXdi YXRjaC0+aXRlbXNbaXRlbUluZGV4XS50YWJsZVRpZCA9IGl0dXAtPnRfdGlkOworCW5ld2JhdGNo LT5pdGVtc1tpdGVtSW5kZXhdLmluZGV4T2Zmc2V0ID0gb2ZmbnVtOworCisJaWYgKG5ld2JhdGNo LT5jdXJyVHVwbGVzKQogCXsKIAkJU2l6ZQkJaXR1cHN6ID0gSW5kZXhUdXBsZVNpemUoaXR1cCk7 CiAKLQkJY3Vyckl0ZW0tPnR1cGxlT2Zmc2V0ID0gc28tPmN1cnJQb3MubmV4dFR1cGxlT2Zmc2V0 OwotCQltZW1jcHkoc28tPmN1cnJUdXBsZXMgKyBzby0+Y3VyclBvcy5uZXh0VHVwbGVPZmZzZXQs IGl0dXAsIGl0dXBzeik7Ci0JCXNvLT5jdXJyUG9zLm5leHRUdXBsZU9mZnNldCArPSBNQVhBTElH TihpdHVwc3opOworCQluZXdiYXRjaC0+aXRlbXNbaXRlbUluZGV4XS50dXBsZU9mZnNldCA9ICp0 dXBsZU9mZnNldDsKKwkJbWVtY3B5KG5ld2JhdGNoLT5jdXJyVHVwbGVzICsgKnR1cGxlT2Zmc2V0 LCBpdHVwLCBpdHVwc3opOworCQkqdHVwbGVPZmZzZXQgKz0gTUFYQUxJR04oaXR1cHN6KTsKIAl9 CiB9CiAKIC8qCiAgKiBTZXR1cCBzdGF0ZSB0byBzYXZlIFRJRHMvaXRlbXMgZnJvbSBhIHNpbmds ZSBwb3N0aW5nIGxpc3QgdHVwbGUuCiAgKgotICogU2F2ZXMgYW4gaW5kZXggaXRlbSBpbnRvIHNv LT5jdXJyUG9zLml0ZW1zW2l0ZW1JbmRleF0gZm9yIFRJRCB0aGF0IGlzCi0gKiByZXR1cm5lZCB0 byBzY2FuIGZpcnN0LiAgU2Vjb25kIG9yIHN1YnNlcXVlbnQgVElEcyBmb3IgcG9zdGluZyBsaXN0 IHNob3VsZAotICogYmUgc2F2ZWQgYnkgY2FsbGluZyBfYnRfc2F2ZXBvc3RpbmdpdGVtKCkuCisg KiBTYXZlcyBhbiBpbmRleCBpdGVtIGludG8gbmV3YmF0Y2guaXRlbXNbaXRlbUluZGV4XSBmb3Ig VElEIHRoYXQgaXMgcmV0dXJuZWQKKyAqIHRvIHNjYW4gZmlyc3QuICBTZWNvbmQgb3Igc3Vic2Vx dWVudCBUSURzIGZvciBwb3N0aW5nIGxpc3Qgc2hvdWxkIGJlIHNhdmVkCisgKiBieSBjYWxsaW5n IF9idF9zYXZlcG9zdGluZ2l0ZW0oKS4KICAqCi0gKiBSZXR1cm5zIGFuIG9mZnNldCBpbnRvIHR1 cGxlIHN0b3JhZ2Ugc3BhY2UgdGhhdCBtYWluIHR1cGxlIGlzIHN0b3JlZCBhdCBpZgotICogbmVl ZGVkLgorICogUmV0dXJucyBiYXNlT2Zmc2V0LCBhbiBvZmZzZXQgaW50byB0dXBsZSBzdG9yYWdl IHNwYWNlIHRoYXQgbWFpbiB0dXBsZSBpcworICogc3RvcmVkIGF0IGlmIG5lZWRlZC4KICAqLwog c3RhdGljIGludAotX2J0X3NldHVwcG9zdGluZ2l0ZW1zKEJUU2Nhbk9wYXF1ZSBzbywgaW50IGl0 ZW1JbmRleCwgT2Zmc2V0TnVtYmVyIG9mZm51bSwKLQkJCQkJICBjb25zdCBJdGVtUG9pbnRlckRh dGEgKmhlYXBUaWQsIEluZGV4VHVwbGUgaXR1cCkKK19idF9zZXR1cHBvc3RpbmdpdGVtcyhJbmRl eFNjYW5CYXRjaCBuZXdiYXRjaCwgaW50IGl0ZW1JbmRleCwKKwkJCQkJICBPZmZzZXROdW1iZXIg b2ZmbnVtLCBjb25zdCBJdGVtUG9pbnRlckRhdGEgKnRhYmxlVGlkLAorCQkJCQkgIEluZGV4VHVw bGUgaXR1cCwgaW50ICp0dXBsZU9mZnNldCkKIHsKLQlCVFNjYW5Qb3NJdGVtICpjdXJySXRlbSA9 ICZzby0+Y3VyclBvcy5pdGVtc1tpdGVtSW5kZXhdOworCUJhdGNoTWF0Y2hpbmdJdGVtICppdGVt ID0gJm5ld2JhdGNoLT5pdGVtc1tpdGVtSW5kZXhdOwogCiAJQXNzZXJ0KEJUcmVlVHVwbGVJc1Bv c3RpbmcoaXR1cCkpOwogCi0JY3Vyckl0ZW0tPmhlYXBUaWQgPSAqaGVhcFRpZDsKLQljdXJySXRl bS0+aW5kZXhPZmZzZXQgPSBvZmZudW07Ci0JaWYgKHNvLT5jdXJyVHVwbGVzKQorCWl0ZW0tPnRh YmxlVGlkID0gKnRhYmxlVGlkOworCWl0ZW0tPmluZGV4T2Zmc2V0ID0gb2ZmbnVtOworCisJaWYg KG5ld2JhdGNoLT5jdXJyVHVwbGVzKQogCXsKIAkJLyogU2F2ZSBiYXNlIEluZGV4VHVwbGUgKHRy dW5jYXRlIHBvc3RpbmcgbGlzdCkgKi8KIAkJSW5kZXhUdXBsZQliYXNlOwogCQlTaXplCQlpdHVw c3ogPSBCVHJlZVR1cGxlR2V0UG9zdGluZ09mZnNldChpdHVwKTsKIAogCQlpdHVwc3ogPSBNQVhB TElHTihpdHVwc3opOwotCQljdXJySXRlbS0+dHVwbGVPZmZzZXQgPSBzby0+Y3VyclBvcy5uZXh0 VHVwbGVPZmZzZXQ7Ci0JCWJhc2UgPSAoSW5kZXhUdXBsZSkgKHNvLT5jdXJyVHVwbGVzICsgc28t PmN1cnJQb3MubmV4dFR1cGxlT2Zmc2V0KTsKKwkJaXRlbS0+dHVwbGVPZmZzZXQgPSAqdHVwbGVP ZmZzZXQ7CisJCWJhc2UgPSAoSW5kZXhUdXBsZSkgKG5ld2JhdGNoLT5jdXJyVHVwbGVzICsgKnR1 cGxlT2Zmc2V0KTsKIAkJbWVtY3B5KGJhc2UsIGl0dXAsIGl0dXBzeik7CiAJCS8qIERlZmVuc2l2 ZWx5IHJlZHVjZSB3b3JrIGFyZWEgaW5kZXggdHVwbGUgaGVhZGVyIHNpemUgKi8KIAkJYmFzZS0+ dF9pbmZvICY9IH5JTkRFWF9TSVpFX01BU0s7CiAJCWJhc2UtPnRfaW5mbyB8PSBpdHVwc3o7Ci0J CXNvLT5jdXJyUG9zLm5leHRUdXBsZU9mZnNldCArPSBpdHVwc3o7CisJCSp0dXBsZU9mZnNldCAr PSBpdHVwc3o7CiAKLQkJcmV0dXJuIGN1cnJJdGVtLT50dXBsZU9mZnNldDsKKwkJcmV0dXJuIGl0 ZW0tPnR1cGxlT2Zmc2V0OwogCX0KIAogCXJldHVybiAwOwogfQogCiAvKgotICogU2F2ZSBhbiBp bmRleCBpdGVtIGludG8gc28tPmN1cnJQb3MuaXRlbXNbaXRlbUluZGV4XSBmb3IgY3VycmVudCBw b3N0aW5nCisgKiBTYXZlIGFuIGluZGV4IGl0ZW0gaW50byBuZXdiYXRjaC5pdGVtc1tpdGVtSW5k ZXhdIGZvciBjdXJyZW50IHBvc3RpbmcKICAqIHR1cGxlLgogICoKICAqIEFzc3VtZXMgdGhhdCBf YnRfc2V0dXBwb3N0aW5naXRlbXMoKSBoYXMgYWxyZWFkeSBiZWVuIGNhbGxlZCBmb3IgY3VycmVu dAotICogcG9zdGluZyBsaXN0IHR1cGxlLiAgQ2FsbGVyIHBhc3NlcyBpdHMgcmV0dXJuIHZhbHVl IGFzIHR1cGxlT2Zmc2V0LgorICogcG9zdGluZyBsaXN0IHR1cGxlLiAgQ2FsbGVyIHBhc3NlcyBp dHMgcmV0dXJuIHZhbHVlIGFzIGJhc2VPZmZzZXQuCiAgKi8KIHN0YXRpYyBpbmxpbmUgdm9pZAot X2J0X3NhdmVwb3N0aW5naXRlbShCVFNjYW5PcGFxdWUgc28sIGludCBpdGVtSW5kZXgsIE9mZnNl dE51bWJlciBvZmZudW0sCi0JCQkJCUl0ZW1Qb2ludGVyIGhlYXBUaWQsIGludCB0dXBsZU9mZnNl dCkKK19idF9zYXZlcG9zdGluZ2l0ZW0oSW5kZXhTY2FuQmF0Y2ggbmV3YmF0Y2gsIGludCBpdGVt SW5kZXgsIE9mZnNldE51bWJlciBvZmZudW0sCisJCQkJCUl0ZW1Qb2ludGVyIHRhYmxlVGlkLCBp bnQgYmFzZU9mZnNldCkKIHsKLQlCVFNjYW5Qb3NJdGVtICpjdXJySXRlbSA9ICZzby0+Y3VyclBv cy5pdGVtc1tpdGVtSW5kZXhdOworCUJhdGNoTWF0Y2hpbmdJdGVtICppdGVtID0gJm5ld2JhdGNo LT5pdGVtc1tpdGVtSW5kZXhdOwogCi0JY3Vyckl0ZW0tPmhlYXBUaWQgPSAqaGVhcFRpZDsKLQlj dXJySXRlbS0+aW5kZXhPZmZzZXQgPSBvZmZudW07CisJaXRlbS0+dGFibGVUaWQgPSAqdGFibGVU aWQ7CisJaXRlbS0+aW5kZXhPZmZzZXQgPSBvZmZudW07CiAKIAkvKgogCSAqIEhhdmUgaW5kZXgt b25seSBzY2FucyByZXR1cm4gdGhlIHNhbWUgYmFzZSBJbmRleFR1cGxlIGZvciBldmVyeSBUSUQK IAkgKiB0aGF0IG9yaWdpbmF0ZXMgZnJvbSB0aGUgc2FtZSBwb3N0aW5nIGxpc3QKIAkgKi8KLQlp ZiAoc28tPmN1cnJUdXBsZXMpCi0JCWN1cnJJdGVtLT50dXBsZU9mZnNldCA9IHR1cGxlT2Zmc2V0 OworCWlmIChuZXdiYXRjaC0+Y3VyclR1cGxlcykKKwkJaXRlbS0+dHVwbGVPZmZzZXQgPSBiYXNl T2Zmc2V0OwogfQogCiAjZGVmaW5lIExPT0tfQUhFQURfUkVRVUlSRURfUkVDSEVDS1MgCTMKQEAg LTI4MjEsMTQgKzI4MTgsMTUgQEAgbmV3X3ByaW1fc2NhbjoKIAkgKgogCSAqIE5vdGU6IFdlIG1h a2UgYSBzb2Z0IGFzc3VtcHRpb24gdGhhdCB0aGUgY3VycmVudCBzY2FuIGRpcmVjdGlvbiB3aWxs CiAJICogYWxzbyBiZSB1c2VkIHdpdGhpbiBfYnRfbmV4dCwgd2hlbiBpdCBpcyBhc2tlZCB0byBz dGVwIG9mZiB0aGlzIHBhZ2UuCi0JICogSXQgaXMgdXAgdG8gX2J0X25leHQgdG8gY2FuY2VsIHRo aXMgc2NoZWR1bGVkIHByaW1pdGl2ZSBpbmRleCBzY2FuCi0JICogd2hlbmV2ZXIgaXQgc3RlcHMg dG8gYSBwYWdlIGluIHRoZSBkaXJlY3Rpb24gb3Bwb3NpdGUgY3VyclBvcy5kaXIuCisJICogVGhl IHNjYW4gZGlyZWN0aW9uIG1pZ2h0IGJlIHJldmVyc2VkIGR1cmluZyB0aGUgbmV4dCBhbWdldGJh dGNoIGNhbGwsCisJICogYnV0IG5vdCBiZWZvcmUgYSBjYWxsIHRvIGJ0cG9zcmVzZXQgdGhhdCBy ZXNldHMgdGhlIGFycmF5IGtleXMgdG8gdGhlCisJICogZmlyc3QgcG9zaXRpb25zL2VsZW1lbnRz IHVzZWQgd2hlbiBzY2FubmluZyBpbiB0aGlzIG90aGVyIGRpcmVjdGlvbi4KIAkgKi8KIAlwc3Rh dGUtPmNvbnRpbnVlc2NhbiA9IGZhbHNlOwkvKiBUZWxsIF9idF9yZWFkcGFnZSB3ZSdyZSBkb25l Li4uICovCiAJc28tPm5lZWRQcmltU2NhbiA9IHRydWU7CS8qIC4uLmJ1dCBjYWxsIF9idF9maXJz dCBhZ2FpbiAqLwogCiAJaWYgKHNjYW4tPnBhcmFsbGVsX3NjYW4pCi0JCV9idF9wYXJhbGxlbF9w cmltc2Nhbl9zY2hlZHVsZShzY2FuLCBzby0+Y3VyclBvcy5jdXJyUGFnZSk7CisJCV9idF9wYXJh bGxlbF9wcmltc2Nhbl9zY2hlZHVsZShzY2FuLCBwc3RhdGUtPmN1cnJwYWdlKTsKIAogCS8qIENh bGxlcidzIHR1cGxlIGRvZXNuJ3QgbWF0Y2ggdGhlIG5ldyBxdWFsICovCiAJcmV0dXJuIGZhbHNl OwpAQCAtMjg0MSw5ICsyODM5LDggQEAgZW5kX3RvcGxldmVsX3NjYW46CiAJICogVGhpcyBlbmRz IHRoZSBlbnRpcmUgdG9wLWxldmVsIHNjYW4gaW4gdGhlIGN1cnJlbnQgc2NhbiBkaXJlY3Rpb24u CiAJICoKIAkgKiBOb3RlOiBUaGUgc2NhbidzIGFycmF5cyAoaW5jbHVkaW5nIGFueSBub24tcmVx dWlyZWQgYXJyYXlzKSBhcmUgbm93IGluCi0JICogdGhlaXIgZmluYWwgcG9zaXRpb25zIGZvciB0 aGUgY3VycmVudCBzY2FuIGRpcmVjdGlvbi4gIElmIHRoZSBzY2FuCi0JICogZGlyZWN0aW9uIGhh cHBlbnMgdG8gY2hhbmdlLCB0aGVuIHRoZSBhcnJheXMgd2lsbCBhbHJlYWR5IGJlIGluIHRoZWly Ci0JICogZmlyc3QgcG9zaXRpb25zIGZvciB3aGF0IHdpbGwgdGhlbiBiZSB0aGUgY3VycmVudCBz Y2FuIGRpcmVjdGlvbi4KKwkgKiB0aGVpciBmaW5hbCBwb3NpdGlvbnMgZm9yIHRoZSBjdXJyZW50 IHNjYW4gZGlyZWN0aW9uLiAgVGhpcyBpcyBqdXN0CisJICogZGVmZW5zaXZlLgogCSAqLwogCXBz dGF0ZS0+Y29udGludWVzY2FuID0gZmFsc2U7CS8qIFRlbGwgX2J0X3JlYWRwYWdlIHdlJ3JlIGRv bmUuLi4gKi8KIAlzby0+bmVlZFByaW1TY2FuID0gZmFsc2U7CS8qIC4uLmFuZCBkb24ndCBjYWxs IF9idF9maXJzdCBhZ2FpbiAqLwpAQCAtMjkxMCwxNyArMjkwNyw5IEBAIF9idF9hZHZhbmNlX2Fy cmF5X2tleXNfaW5jcmVtZW50KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIs CiAJLyoKIAkgKiBUaGUgYXJyYXkga2V5cyBhcmUgbm93IGV4aGF1c3RlZC4KIAkgKgotCSAqIFJl c3RvcmUgdGhlIGFycmF5IGtleXMgdG8gdGhlIHN0YXRlIHRoZXkgd2VyZSBpbiBpbW1lZGlhdGVs eSBiZWZvcmUgd2UKLQkgKiB3ZXJlIGNhbGxlZC4gIFRoaXMgZW5zdXJlcyB0aGF0IHRoZSBhcnJh eXMgb25seSBldmVyIHJhdGNoZXQgaW4gdGhlCi0JICogY3VycmVudCBzY2FuIGRpcmVjdGlvbi4K LQkgKgotCSAqIFdpdGhvdXQgdGhpcywgc2NhbnMgY291bGQgb3Zlcmxvb2sgbWF0Y2hpbmcgdHVw bGVzIHdoZW4gdGhlIHNjYW4KLQkgKiBkaXJlY3Rpb24gZ2V0cyByZXZlcnNlZCBqdXN0IGJlZm9y ZSBidGdldHR1cGxlIHJ1bnMgb3V0IG9mIGl0ZW1zIHRvCi0JICogcmV0dXJuLCBidXQganVzdCBh ZnRlciBfYnRfcmVhZHBhZ2UgcHJlcGFyZXMgYWxsIHRoZSBpdGVtcyBmcm9tIHRoZQotCSAqIHNj YW4ncyBmaW5hbCBwYWdlIGluIHNvLT5jdXJyUG9zLiAgV2hlbiB3ZSdyZSBvbiB0aGUgZmluYWwg cGFnZSBpdCBpcwotCSAqIHR5cGljYWwgZm9yIHNvLT5jdXJyUG9zIHRvIGdldCBpbnZhbGlkYXRl ZCBvbmNlIGJ0Z2V0dHVwbGUgZmluYWxseQotCSAqIHJldHVybnMgZmFsc2UsIHdoaWNoJ2xsIGVm ZmVjdGl2ZWx5IGludmFsaWRhdGUgdGhlIHNjYW4ncyBhcnJheSBrZXlzLgotCSAqIFRoYXQgaGFz bid0IGhhcHBlbmVkIHlldCwgdGhvdWdoIC0tIGFuZCBpbiBnZW5lcmFsIGl0IG1heSBuZXZlciBo YXBwZW4uCisJICogRGVmZW5zaXZlbHkgcmVzdG9yZSB0aGUgYXJyYXkga2V5cyB0byB0aGUgcG9z aXRpb25zIHRoZXkgd2VyZSBpbgorCSAqIGltbWVkaWF0ZWx5IGJlZm9yZSB3ZSB3ZXJlIGNhbGxl ZCAoaS5lLiB0byB0aGVpciBmaW5hbCBwb3NpdGlvbnMgZm9yCisJICogdGhlIGN1cnJlbnQgc2Nh biBkaXJlY3Rpb24pLgogCSAqLwogCV9idF9zdGFydF9hcnJheV9rZXlzKHNjYW4sIC1kaXIpOwog CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHJlZS5jIGIvc3JjL2Jh Y2tlbmQvYWNjZXNzL25idHJlZS9uYnRyZWUuYwppbmRleCA2ZDg3MGU0ZWIuLmUwODdjYjgyNCAx MDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRyZWUuYworKysgYi9zcmMv YmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHJlZS5jCkBAIC0xNjEsMTEgKzE2MSwxMyBAQCBidGhh bmRsZXIoUEdfRlVOQ1RJT05fQVJHUykKIAkJLmFtYWRqdXN0bWVtYmVycyA9IGJ0YWRqdXN0bWVt YmVycywKIAkJLmFtYmVnaW5zY2FuID0gYnRiZWdpbnNjYW4sCiAJCS5hbXJlc2NhbiA9IGJ0cmVz Y2FuLAotCQkuYW1nZXR0dXBsZSA9IGJ0Z2V0dHVwbGUsCisJCS5hbWdldHR1cGxlID0gTlVMTCwK KwkJLmFtZ2V0YmF0Y2ggPSBidGdldGJhdGNoLAorCQkuYW11bmd1YXJkYmF0Y2ggPSBidHVuZ3Vh cmRiYXRjaCwKKwkJLmFta2lsbGl0ZW1zYmF0Y2ggPSBidGtpbGxpdGVtc2JhdGNoLAogCQkuYW1n ZXRiaXRtYXAgPSBidGdldGJpdG1hcCwKIAkJLmFtZW5kc2NhbiA9IGJ0ZW5kc2NhbiwKLQkJLmFt bWFya3BvcyA9IGJ0bWFya3BvcywKLQkJLmFtcmVzdHJwb3MgPSBidHJlc3RycG9zLAorCQkuYW1w b3NyZXNldCA9IGJ0cG9zcmVzZXQsCiAJCS5hbWVzdGltYXRlcGFyYWxsZWxzY2FuID0gYnRlc3Rp bWF0ZXBhcmFsbGVsc2NhbiwKIAkJLmFtaW5pdHBhcmFsbGVsc2NhbiA9IGJ0aW5pdHBhcmFsbGVs c2NhbiwKIAkJLmFtcGFyYWxsZWxyZXNjYW4gPSBidHBhcmFsbGVscmVzY2FuLApAQCAtMjI0LDEz ICsyMjYsMTMgQEAgYnRpbnNlcnQoUmVsYXRpb24gcmVsLCBEYXR1bSAqdmFsdWVzLCBib29sICpp c251bGwsCiB9CiAKIC8qCi0gKglidGdldHR1cGxlKCkgLS0gR2V0IHRoZSBuZXh0IHR1cGxlIGlu IHRoZSBzY2FuLgorICoJYnRnZXRiYXRjaCgpIC0tIEdldCB0aGUgZmlyc3Qgb3IgbmV4dCBiYXRj aCBvZiB0dXBsZXMgaW4gdGhlIHNjYW4KICAqLwotYm9vbAotYnRnZXR0dXBsZShJbmRleFNjYW5E ZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyKQorSW5kZXhTY2FuQmF0Y2gKK2J0Z2V0YmF0Y2go SW5kZXhTY2FuRGVzYyBzY2FuLCBJbmRleFNjYW5CYXRjaCBwcmlvcmJhdGNoLCBTY2FuRGlyZWN0 aW9uIGRpcikKIHsKIAlCVFNjYW5PcGFxdWUgc28gPSAoQlRTY2FuT3BhcXVlKSBzY2FuLT5vcGFx dWU7Ci0JYm9vbAkJcmVzOworCUluZGV4U2NhbkJhdGNoIGJhdGNoID0gcHJpb3JiYXRjaDsKIAog CUFzc2VydChzY2FuLT5oZWFwUmVsYXRpb24gIT0gTlVMTCk7CiAKQEAgLTI0Myw0NSArMjQ1LDIw IEBAIGJ0Z2V0dHVwbGUoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcikKIAkJ LyoKIAkJICogSWYgd2UndmUgYWxyZWFkeSBpbml0aWFsaXplZCB0aGlzIHNjYW4sIHdlIGNhbiBq dXN0IGFkdmFuY2UgaXQgaW4KIAkJICogdGhlIGFwcHJvcHJpYXRlIGRpcmVjdGlvbi4gIElmIHdl IGhhdmVuJ3QgZG9uZSBzbyB5ZXQsIHdlIGNhbGwKLQkJICogX2J0X2ZpcnN0KCkgdG8gZ2V0IHRo ZSBmaXJzdCBpdGVtIGluIHRoZSBzY2FuLgorCQkgKiBfYnRfZmlyc3QoKSB0byBnZXQgdGhlIGZp cnN0IGJhdGNoIGluIHRoZSBzY2FuLgogCQkgKi8KLQkJaWYgKCFCVFNjYW5Qb3NJc1ZhbGlkKHNv LT5jdXJyUG9zKSkKLQkJCXJlcyA9IF9idF9maXJzdChzY2FuLCBkaXIpOworCQlpZiAoYmF0Y2gg PT0gTlVMTCkKKwkJCWJhdGNoID0gX2J0X2ZpcnN0KHNjYW4sIGRpcik7CiAJCWVsc2UKLQkJewot CQkJLyoKLQkJCSAqIENoZWNrIHRvIHNlZSBpZiB3ZSBzaG91bGQga2lsbCB0aGUgcHJldmlvdXNs eS1mZXRjaGVkIHR1cGxlLgotCQkJICovCi0JCQlpZiAoc2Nhbi0+a2lsbF9wcmlvcl90dXBsZSkK LQkJCXsKLQkJCQkvKgotCQkJCSAqIFllcywgcmVtZW1iZXIgaXQgZm9yIGxhdGVyLiAoV2UnbGwg ZGVhbCB3aXRoIGFsbCBzdWNoCi0JCQkJICogdHVwbGVzIGF0IG9uY2UgcmlnaHQgYmVmb3JlIGxl YXZpbmcgdGhlIGluZGV4IHBhZ2UuKSAgVGhlCi0JCQkJICogdGVzdCBmb3IgbnVtS2lsbGVkIG92 ZXJydW4gaXMgbm90IGp1c3QgcGFyYW5vaWE6IGlmIHRoZQotCQkJCSAqIGNhbGxlciByZXZlcnNl cyBkaXJlY3Rpb24gaW4gdGhlIGluZGV4c2NhbiB0aGVuIHRoZSBzYW1lCi0JCQkJICogaXRlbSBt aWdodCBnZXQgZW50ZXJlZCBtdWx0aXBsZSB0aW1lcy4gSXQncyBub3Qgd29ydGgKLQkJCQkgKiB0 cnlpbmcgdG8gb3B0aW1pemUgdGhhdCwgc28gd2UgZG9uJ3QgZGV0ZWN0IGl0LCBidXQgaW5zdGVh ZAotCQkJCSAqIGp1c3QgZm9yZ2V0IGFueSBleGNlc3MgZW50cmllcy4KLQkJCQkgKi8KLQkJCQlp ZiAoc28tPmtpbGxlZEl0ZW1zID09IE5VTEwpCi0JCQkJCXNvLT5raWxsZWRJdGVtcyA9IHBhbGxv Y19hcnJheShpbnQsIE1heFRJRHNQZXJCVHJlZVBhZ2UpOwotCQkJCWlmIChzby0+bnVtS2lsbGVk IDwgTWF4VElEc1BlckJUcmVlUGFnZSkKLQkJCQkJc28tPmtpbGxlZEl0ZW1zW3NvLT5udW1LaWxs ZWQrK10gPSBzby0+Y3VyclBvcy5pdGVtSW5kZXg7Ci0JCQl9CisJCQliYXRjaCA9IF9idF9uZXh0 KHNjYW4sIGRpciwgYmF0Y2gpOwogCi0JCQkvKgotCQkJICogTm93IGNvbnRpbnVlIHRoZSBzY2Fu LgotCQkJICovCi0JCQlyZXMgPSBfYnRfbmV4dChzY2FuLCBkaXIpOwotCQl9Ci0KLQkJLyogSWYg d2UgaGF2ZSBhIHR1cGxlLCByZXR1cm4gaXQgLi4uICovCi0JCWlmIChyZXMpCisJCS8qIElmIHdl IGhhdmUgYSBiYXRjaCwgcmV0dXJuIGl0IC4uLiAqLworCQlpZiAoYmF0Y2gpCiAJCQlicmVhazsK IAkJLyogLi4uIG90aGVyd2lzZSBzZWUgaWYgd2UgbmVlZCBhbm90aGVyIHByaW1pdGl2ZSBpbmRl eCBzY2FuICovCiAJfSB3aGlsZSAoc28tPm51bUFycmF5S2V5cyAmJiBfYnRfc3RhcnRfcHJpbV9z Y2FuKHNjYW4pKTsKIAotCXJldHVybiByZXM7CisJcmV0dXJuIGJhdGNoOwogfQogCiAvKgpAQCAt MjkxLDM4ICsyNjgsNDMgQEAgaW50NjQKIGJ0Z2V0Yml0bWFwKEluZGV4U2NhbkRlc2Mgc2Nhbiwg VElEQml0bWFwICp0Ym0pCiB7CiAJQlRTY2FuT3BhcXVlIHNvID0gKEJUU2Nhbk9wYXF1ZSkgc2Nh bi0+b3BhcXVlOworCUluZGV4U2NhbkJhdGNoIGJhdGNoOwogCWludDY0CQludGlkcyA9IDA7Ci0J SXRlbVBvaW50ZXIgaGVhcFRpZDsKKwlJdGVtUG9pbnRlciB0YWJsZVRpZDsKIAogCUFzc2VydChz Y2FuLT5oZWFwUmVsYXRpb24gPT0gTlVMTCk7CiAKIAkvKiBFYWNoIGxvb3AgaXRlcmF0aW9uIHBl cmZvcm1zIGFub3RoZXIgcHJpbWl0aXZlIGluZGV4IHNjYW4gKi8KIAlkbwogCXsKLQkJLyogRmV0 Y2ggdGhlIGZpcnN0IHBhZ2UgJiB0dXBsZSAqLwotCQlpZiAoX2J0X2ZpcnN0KHNjYW4sIEZvcndh cmRTY2FuRGlyZWN0aW9uKSkKKwkJLyogRmV0Y2ggdGhlIGZpcnN0IGJhdGNoICovCisJCWlmICgo YmF0Y2ggPSBfYnRfZmlyc3Qoc2NhbiwgRm9yd2FyZFNjYW5EaXJlY3Rpb24pKSkKIAkJewotCQkJ LyogU2F2ZSB0dXBsZSBJRCwgYW5kIGNvbnRpbnVlIHNjYW5uaW5nICovCi0JCQloZWFwVGlkID0g JnNjYW4tPnhzX2hlYXB0aWQ7Ci0JCQl0Ym1fYWRkX3R1cGxlcyh0Ym0sIGhlYXBUaWQsIDEsIGZh bHNlKTsKKwkJCWludAkJCWl0ZW1JbmRleCA9IDA7CisKKwkJCS8qIFNhdmUgZmlyc3QgdHVwbGUn cyBUSUQgKi8KKwkJCXRhYmxlVGlkID0gJmJhdGNoLT5pdGVtc1tpdGVtSW5kZXhdLnRhYmxlVGlk OworCQkJdGJtX2FkZF90dXBsZXModGJtLCB0YWJsZVRpZCwgMSwgZmFsc2UpOwogCQkJbnRpZHMr KzsKIAogCQkJZm9yICg7OykKIAkJCXsKLQkJCQkvKgotCQkJCSAqIEFkdmFuY2UgdG8gbmV4dCB0 dXBsZSB3aXRoaW4gcGFnZS4gIFRoaXMgaXMgdGhlIHNhbWUgYXMgdGhlCi0JCQkJICogZWFzeSBj YXNlIGluIF9idF9uZXh0KCkuCi0JCQkJICovCi0JCQkJaWYgKCsrc28tPmN1cnJQb3MuaXRlbUlu ZGV4ID4gc28tPmN1cnJQb3MubGFzdEl0ZW0pCisJCQkJLyogQWR2YW5jZSB0byBuZXh0IFRJRCB3 aXRoaW4gcGFnZS1zaXplZCBiYXRjaCAqLworCQkJCWlmICgrK2l0ZW1JbmRleCA+IGJhdGNoLT5s YXN0SXRlbSkKIAkJCQl7Ci0JCQkJCS8qIGxldCBfYnRfbmV4dCBkbyB0aGUgaGVhdnkgbGlmdGlu ZyAqLwotCQkJCQlpZiAoIV9idF9uZXh0KHNjYW4sIEZvcndhcmRTY2FuRGlyZWN0aW9uKSkKKwkJ CQkJLyoKKwkJCQkJICogX2J0X25leHQgcmVsZWFzZXMgdGhlIHByaW9yIGJhdGNoIGZvciBiaXRt YXAgY2FsbGVycworCQkJCQkgKiBiZWZvcmUgYWxsb2NhdGluZyB0aGUgbmV4dCBvbmUsIHNvIG9u bHkgb25lIGJhdGNoIGlzCisJCQkJCSAqIGV2ZXIgdXNlZCBhdCBhIHRpbWUKKwkJCQkJICovCisJ CQkJCWl0ZW1JbmRleCA9IDA7CisJCQkJCWJhdGNoID0gX2J0X25leHQoc2NhbiwgRm9yd2FyZFNj YW5EaXJlY3Rpb24sIGJhdGNoKTsKKwkJCQkJaWYgKCFiYXRjaCkKIAkJCQkJCWJyZWFrOwogCQkJ CX0KIAotCQkJCS8qIFNhdmUgdHVwbGUgSUQsIGFuZCBjb250aW51ZSBzY2FubmluZyAqLwotCQkJ CWhlYXBUaWQgPSAmc28tPmN1cnJQb3MuaXRlbXNbc28tPmN1cnJQb3MuaXRlbUluZGV4XS5oZWFw VGlkOwotCQkJCXRibV9hZGRfdHVwbGVzKHRibSwgaGVhcFRpZCwgMSwgZmFsc2UpOworCQkJCXRh YmxlVGlkID0gJmJhdGNoLT5pdGVtc1tpdGVtSW5kZXhdLnRhYmxlVGlkOworCQkJCXRibV9hZGRf dHVwbGVzKHRibSwgdGFibGVUaWQsIDEsIGZhbHNlKTsKIAkJCQludGlkcysrOwogCQkJfQogCQl9 CkBAIC0zNDksOCArMzMxLDYgQEAgYnRiZWdpbnNjYW4oUmVsYXRpb24gcmVsLCBpbnQgbmtleXMs IGludCBub3JkZXJieXMpCiAKIAkvKiBhbGxvY2F0ZSBwcml2YXRlIHdvcmtzcGFjZSAqLwogCXNv ID0gcGFsbG9jX29iamVjdChCVFNjYW5PcGFxdWVEYXRhKTsKLQlCVFNjYW5Qb3NJbnZhbGlkYXRl KHNvLT5jdXJyUG9zKTsKLQlCVFNjYW5Qb3NJbnZhbGlkYXRlKHNvLT5tYXJrUG9zKTsKIAlpZiAo c2Nhbi0+bnVtYmVyT2ZLZXlzID4gMCkKIAkJc28tPmtleURhdGEgPSAoU2NhbktleSkgcGFsbG9j KHNjYW4tPm51bWJlck9mS2V5cyAqIHNpemVvZihTY2FuS2V5RGF0YSkpOwogCWVsc2UKQEAgLTM2 NCwxOSArMzQ0LDExIEBAIGJ0YmVnaW5zY2FuKFJlbGF0aW9uIHJlbCwgaW50IG5rZXlzLCBpbnQg bm9yZGVyYnlzKQogCXNvLT5vcmRlclByb2NzID0gTlVMTDsKIAlzby0+YXJyYXlDb250ZXh0ID0g TlVMTDsKIAotCXNvLT5raWxsZWRJdGVtcyA9IE5VTEw7CQkvKiB1bnRpbCBuZWVkZWQgKi8KLQlz by0+bnVtS2lsbGVkID0gMDsKLQotCS8qCi0JICogV2UgZG9uJ3Qga25vdyB5ZXQgd2hldGhlciB0 aGUgc2NhbiB3aWxsIGJlIGluZGV4LW9ubHksIHNvIHdlIGRvIG5vdAotCSAqIGFsbG9jYXRlIHRo ZSB0dXBsZSB3b3Jrc3BhY2UgYXJyYXlzIHVudGlsIGJ0cmVzY2FuLiAgSG93ZXZlciwgd2Ugc2V0 IHVwCi0JICogc2Nhbi0+eHNfaXR1cGRlc2Mgd2hldGhlciB3ZSdsbCBuZWVkIGl0IG9yIG5vdCwg c2luY2UgdGhhdCdzIHNvIGNoZWFwLgotCSAqLwotCXNvLT5jdXJyVHVwbGVzID0gc28tPm1hcmtU dXBsZXMgPSBOVUxMOwotCi0Jc2Nhbi0+eHNfaXR1cGRlc2MgPSBSZWxhdGlvbkdldERlc2NyKHJl bCk7Ci0KIAlzY2FuLT5vcGFxdWUgPSBzbzsKKwlzY2FuLT54c19pdHVwZGVzYyA9IFJlbGF0aW9u R2V0RGVzY3IocmVsKTsKKwlzY2FuLT5tYXhpdGVtc2JhdGNoID0gTWF4VElEc1BlckJUcmVlUGFn ZTsKKwlzY2FuLT5iYXRjaF9pbmRleF9vcGFxdWVfc2l6ZSA9IE1BWEFMSUdOKHNpemVvZihCVEJh dGNoRGF0YSkpOworCXNjYW4tPmJhdGNoX3R1cGxlc193b3Jrc3BhY2UgPSBCTENLU1o7CiAKIAly ZXR1cm4gc2NhbjsKIH0KQEAgLTM5MCw2NCArMzYyLDE4NSBAQCBidHJlc2NhbihJbmRleFNjYW5E ZXNjIHNjYW4sIFNjYW5LZXkgc2NhbmtleSwgaW50IG5zY2Fua2V5cywKIHsKIAlCVFNjYW5PcGFx dWUgc28gPSAoQlRTY2FuT3BhcXVlKSBzY2FuLT5vcGFxdWU7CiAKLQkvKiB3ZSBhcmVuJ3QgaG9s ZGluZyBhbnkgcmVhZCBsb2NrcywgYnV0IGdvdHRhIGRyb3AgdGhlIHBpbnMgKi8KLQlpZiAoQlRT Y2FuUG9zSXNWYWxpZChzby0+Y3VyclBvcykpCi0JewotCQkvKiBCZWZvcmUgbGVhdmluZyBjdXJy ZW50IHBhZ2UsIGRlYWwgd2l0aCBhbnkga2lsbGVkIGl0ZW1zICovCi0JCWlmIChzby0+bnVtS2ls bGVkID4gMCkKLQkJCV9idF9raWxsaXRlbXMoc2Nhbik7Ci0JCUJUU2NhblBvc1VucGluSWZQaW5u ZWQoc28tPmN1cnJQb3MpOwotCQlCVFNjYW5Qb3NJbnZhbGlkYXRlKHNvLT5jdXJyUG9zKTsKLQl9 Ci0KLQkvKgotCSAqIFdlIHByZWZlciB0byBlYWdlcmx5IGRyb3AgbGVhZiBwYWdlIHBpbnMgYmVm b3JlIGJ0Z2V0dHVwbGUgcmV0dXJucy4KLQkgKiBUaGlzIGF2b2lkcyBtYWtpbmcgVkFDVVVNIHdh aXQgdG8gYWNxdWlyZSBhIGNsZWFudXAgbG9jayBvbiB0aGUgcGFnZS4KLQkgKgotCSAqIFdlIGNh bm5vdCBzYWZlbHkgZHJvcCBsZWFmIHBhZ2UgcGlucyBkdXJpbmcgaW5kZXgtb25seSBzY2FucyBk dWUgdG8gYQotCSAqIHJhY2UgY29uZGl0aW9uIGludm9sdmluZyBWQUNVVU0gc2V0dGluZyBwYWdl cyBhbGwtdmlzaWJsZSBpbiB0aGUgVk0uCi0JICogSXQncyBhbHNvIHVuc2FmZSBmb3IgcGxhaW4g aW5kZXggc2NhbnMgdGhhdCB1c2UgYSBub24tTVZDQyBzbmFwc2hvdC4KLQkgKgotCSAqIEFsc28g b3B0IG91dCBvZiBkcm9wcGluZyBsZWFmIHBhZ2UgcGlucyBlYWdlcmx5IGR1cmluZyBiaXRtYXAg c2NhbnMuCi0JICogUGlucyBjYW5ub3QgYmUgaGVsZCBmb3IgbW9yZSB0aGFuIGFuIGluc3RhbnQg ZHVyaW5nIGJpdG1hcCBzY2FucyBlaXRoZXIKLQkgKiB3YXksIHNvIHdlIG1pZ2h0IGFzIHdlbGwg YXZvaWQgd2FzdGluZyBjeWNsZXMgb24gYWNxdWlyaW5nIHBhZ2UgTFNOcy4KLQkgKgotCSAqIFNl ZSBuYnRyZWUvUkVBRE1FIHNlY3Rpb24gb24gbWFraW5nIGNvbmN1cnJlbnQgVElEIHJlY3ljbGlu ZyBzYWZlLgotCSAqCi0JICogTm90ZTogc28tPmRyb3BQaW4gc2hvdWxkIG5ldmVyIGNoYW5nZSBh Y3Jvc3MgcmVzY2Fucy4KLQkgKi8KLQlzby0+ZHJvcFBpbiA9ICghc2Nhbi0+eHNfd2FudF9pdHVw ICYmCi0JCQkJICAgSXNNVkNDTGlrZVNuYXBzaG90KHNjYW4tPnhzX3NuYXBzaG90KSAmJgotCQkJ CSAgIHNjYW4tPmhlYXBSZWxhdGlvbiAhPSBOVUxMKTsKLQotCXNvLT5tYXJrSXRlbUluZGV4ID0g LTE7Ci0Jc28tPm5lZWRQcmltU2NhbiA9IGZhbHNlOwotCXNvLT5zY2FuQmVoaW5kID0gZmFsc2U7 Ci0Jc28tPm9wcG9zaXRlRGlyQ2hlY2sgPSBmYWxzZTsKLQlCVFNjYW5Qb3NVbnBpbklmUGlubmVk KHNvLT5tYXJrUG9zKTsKLQlCVFNjYW5Qb3NJbnZhbGlkYXRlKHNvLT5tYXJrUG9zKTsKLQotCS8q Ci0JICogQWxsb2NhdGUgdHVwbGUgd29ya3NwYWNlIGFycmF5cywgaWYgbmVlZGVkIGZvciBhbiBp bmRleC1vbmx5IHNjYW4gYW5kCi0JICogbm90IGFscmVhZHkgZG9uZSBpbiBhIHByZXZpb3VzIHJl c2NhbiBjYWxsLiAgVG8gc2F2ZSBvbiBwYWxsb2MKLQkgKiBvdmVyaGVhZCwgYm90aCB3b3Jrc3Bh Y2VzIGFyZSBhbGxvY2F0ZWQgYXMgb25lIHBhbGxvYyBibG9jazsgb25seSB0aGlzCi0JICogZnVu Y3Rpb24gYW5kIGJ0ZW5kc2NhbiBrbm93IHRoYXQuCi0JICovCi0JaWYgKHNjYW4tPnhzX3dhbnRf aXR1cCAmJiBzby0+Y3VyclR1cGxlcyA9PSBOVUxMKQotCXsKLQkJc28tPmN1cnJUdXBsZXMgPSAo Y2hhciAqKSBwYWxsb2MoQkxDS1NaICogMik7Ci0JCXNvLT5tYXJrVHVwbGVzID0gc28tPmN1cnJU dXBsZXMgKyBCTENLU1o7Ci0JfQotCiAJLyoKIAkgKiBSZXNldCB0aGUgc2NhbiBrZXlzCiAJICov CiAJaWYgKHNjYW5rZXkgJiYgc2Nhbi0+bnVtYmVyT2ZLZXlzID4gMCkKIAkJbWVtY3B5KHNjYW4t PmtleURhdGEsIHNjYW5rZXksIHNjYW4tPm51bWJlck9mS2V5cyAqIHNpemVvZihTY2FuS2V5RGF0 YSkpOworCXNvLT5uZWVkUHJpbVNjYW4gPSBmYWxzZTsKKwlzby0+c2NhbkJlaGluZCA9IGZhbHNl OworCXNvLT5vcHBvc2l0ZURpckNoZWNrID0gZmFsc2U7CiAJc28tPm51bWJlck9mS2V5cyA9IDA7 CQkvKiB1bnRpbCBfYnRfcHJlcHJvY2Vzc19rZXlzIHNldHMgaXQgKi8KIAlzby0+bnVtQXJyYXlL ZXlzID0gMDsJCS8qIGRpdHRvICovCiB9CiAKKy8qCisgKglidHVuZ3VhcmRiYXRjaCgpIC0tIERy b3AgYmF0Y2gncyBUSUQgcmVjeWNsaW5nIGludGVybG9jayAoYnVmZmVyIHBpbikKKyAqCisgKiBD YWxsZWQgYnkgdGhlIHRhYmxlIEFNIHdoZW4gaXQncyBzYWZlIHRvIGRyb3AgdGhlIGJ1ZmZlciBw aW4gaGVsZCB0bworICogcHJldmVudCBjb25jdXJyZW50IFRJRCByZWN5Y2xpbmcgYnkgVkFDVVVN LgorICovCit2b2lkCitidHVuZ3VhcmRiYXRjaChJbmRleFNjYW5EZXNjIHNjYW4sIEluZGV4U2Nh bkJhdGNoIGJhdGNoKQoreworCUJUQmF0Y2hEYXRhICpidGJhdGNoID0gQlRCYXRjaEdldERhdGEo c2NhbiwgYmF0Y2gpOworCisJLyogU2hvdWxkIGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgaWZmICFi YXRjaEltbWVkaWF0ZVVuZ3VhcmQgKi8KKwlBc3NlcnQoIXNjYW4tPmJhdGNoSW1tZWRpYXRlVW5n dWFyZCk7CisJQXNzZXJ0KGJhdGNoLT5pc0d1YXJkZWQpOworCisJUmVsZWFzZUJ1ZmZlcihidGJh dGNoLT5idWYpOworfQorCisvKgorICoJYnRraWxsaXRlbXNiYXRjaCgpIC0tIE1hcmsgZGVhZCBp dGVtcycgaW5kZXggdHVwbGVzIExQX0RFQUQKKyAqLwordm9pZAorYnRraWxsaXRlbXNiYXRjaChJ bmRleFNjYW5EZXNjIHNjYW4sIEluZGV4U2NhbkJhdGNoIGJhdGNoKQoreworCVJlbGF0aW9uCXJl bCA9IHNjYW4tPmluZGV4UmVsYXRpb247CisJQlRCYXRjaERhdGEgKmJ0YmF0Y2ggPSBCVEJhdGNo R2V0RGF0YShzY2FuLCBiYXRjaCk7CisJUGFnZQkJcGFnZTsKKwlCVFBhZ2VPcGFxdWUgb3BhcXVl OworCU9mZnNldE51bWJlciBtaW5vZmY7CisJT2Zmc2V0TnVtYmVyIG1heG9mZjsKKwlib29sCQlr aWxsZWRzb21ldGhpbmcgPSBmYWxzZTsKKwlCdWZmZXIJCWJ1ZjsKKwlYTG9nUmVjUHRyCWxhdGVz dGxzbjsKKworCS8qIFRhYmxlIEFNIHNob3VsZCBoYXZlIGFscmVhZHkgcmVsZWFzZWQgYmF0Y2gg cGFnZSdzIHBpbiBieSBub3cgKi8KKwlBc3NlcnQoYmF0Y2gtPm51bURlYWQgPiAwKTsKKworCWJ1 ZiA9IF9idF9nZXRidWYocmVsLCBidGJhdGNoLT5jdXJyUGFnZSwgQlRfUkVBRCk7CisKKwlsYXRl c3Rsc24gPSBCdWZmZXJHZXRMU05BdG9taWMoYnVmKTsKKwlBc3NlcnQoYmF0Y2gtPmxzbiA8PSBs YXRlc3Rsc24pOworCWlmIChiYXRjaC0+bHNuICE9IGxhdGVzdGxzbikKKwl7CisJCS8qIE1vZGlm aWVkLCBnaXZlIHVwIG9uIGhpbnRpbmcgKi8KKwkJX2J0X3JlbGJ1ZihyZWwsIGJ1Zik7CisJCXJl dHVybjsKKwl9CisKKwlwYWdlID0gQnVmZmVyR2V0UGFnZShidWYpOworCW9wYXF1ZSA9IEJUUGFn ZUdldE9wYXF1ZShwYWdlKTsKKwltaW5vZmYgPSBQX0ZJUlNUREFUQUtFWShvcGFxdWUpOworCW1h eG9mZiA9IFBhZ2VHZXRNYXhPZmZzZXROdW1iZXIocGFnZSk7CisKKwkvKiBJdGVyYXRlIHRocm91 Z2ggYmF0Y2gtPmRlYWRJdGVtc1tdIGluIGxlYWYgcGFnZSBvcmRlciAqLworCWZvciAoaW50IGkg PSAwOyBpIDwgYmF0Y2gtPm51bURlYWQ7IGkrKykKKwl7CisJCWludAkJCWl0ZW1JbmRleCA9IGJh dGNoLT5kZWFkSXRlbXNbaV07CisJCUJhdGNoTWF0Y2hpbmdJdGVtICpraXRlbSA9ICZiYXRjaC0+ aXRlbXNbaXRlbUluZGV4XTsKKwkJT2Zmc2V0TnVtYmVyIG9mZm51bSA9IGtpdGVtLT5pbmRleE9m ZnNldDsKKworCQlBc3NlcnQoaXRlbUluZGV4ID49IGJhdGNoLT5maXJzdEl0ZW0gJiYgaXRlbUlu ZGV4IDw9IGJhdGNoLT5sYXN0SXRlbSk7CisJCUFzc2VydChpID09IDAgfHwKKwkJCSAgIG9mZm51 bSA+PSBiYXRjaC0+aXRlbXNbYmF0Y2gtPmRlYWRJdGVtc1tpIC0gMV1dLmluZGV4T2Zmc2V0KTsK KworCQlpZiAob2ZmbnVtIDwgbWlub2ZmKQorCQkJY29udGludWU7CQkJLyogcHVyZSBwYXJhbm9p YSAqLworCQl3aGlsZSAob2ZmbnVtIDw9IG1heG9mZikKKwkJeworCQkJSXRlbUlkCQlpaWQgPSBQ YWdlR2V0SXRlbUlkKHBhZ2UsIG9mZm51bSk7CisJCQlJbmRleFR1cGxlCWl0dXBsZSA9IChJbmRl eFR1cGxlKSBQYWdlR2V0SXRlbShwYWdlLCBpaWQpOworCQkJYm9vbAkJa2lsbHR1cGxlID0gZmFs c2U7CisKKwkJCWlmIChCVHJlZVR1cGxlSXNQb3N0aW5nKGl0dXBsZSkpCisJCQl7CisJCQkJaW50 CQkJcGkgPSBpICsgMTsKKwkJCQlpbnQJCQlucG9zdGluZyA9IEJUcmVlVHVwbGVHZXROUG9zdGlu ZyhpdHVwbGUpOworCQkJCWludAkJCWo7CisKKwkJCQlmb3IgKGogPSAwOyBqIDwgbnBvc3Rpbmc7 IGorKykKKwkJCQl7CisJCQkJCUl0ZW1Qb2ludGVyIGl0ZW0gPSBCVHJlZVR1cGxlR2V0UG9zdGlu Z04oaXR1cGxlLCBqKTsKKworCQkJCQlpZiAoIUl0ZW1Qb2ludGVyRXF1YWxzKGl0ZW0sICZraXRl bS0+dGFibGVUaWQpKQorCQkJCQkJYnJlYWs7CS8qIG91dCBvZiBwb3N0aW5nIGxpc3QgbG9vcCAq LworCisJCQkJCUFzc2VydChraXRlbS0+aW5kZXhPZmZzZXQgPT0gb2ZmbnVtKTsKKworCQkJCQkv KgorCQkJCQkgKiBSZWFkLWFoZWFkIHRvIGxhdGVyIGtpdGVtcyBoZXJlLgorCQkJCQkgKgorCQkJ CQkgKiBXZSByZWx5IG9uIHRoZSBhc3N1bXB0aW9uIHRoYXQgbm90IGFkdmFuY2luZyBraXRlbSBo ZXJlCisJCQkJCSAqIHdpbGwgcHJldmVudCB1cyBmcm9tIGNvbnNpZGVyaW5nIHRoZSBwb3N0aW5n IGxpc3QgdHVwbGUKKwkJCQkJICogZnVsbHkgZGVhZCBieSBub3QgbWF0Y2hpbmcgaXRzIG5leHQg aGVhcCBUSUQgaW4gbmV4dAorCQkJCQkgKiBsb29wIGl0ZXJhdGlvbi4KKwkJCQkJICoKKwkJCQkJ ICogSWYsIG9uIHRoZSBvdGhlciBoYW5kLCB0aGlzIGlzIHRoZSBmaW5hbCBoZWFwIFRJRCBpbgor CQkJCQkgKiB0aGUgcG9zdGluZyBsaXN0IHR1cGxlLCB0aGVuIHR1cGxlIGdldHMga2lsbGVkCisJ CQkJCSAqIHJlZ2FyZGxlc3MgKGkuZS4gd2UgaGFuZGxlIHRoZSBjYXNlIHdoZXJlIHRoZSBsYXN0 CisJCQkJCSAqIGtpdGVtIGlzIGFsc28gdGhlIGxhc3QgaGVhcCBUSUQgaW4gdGhlIGxhc3QgaW5k ZXggdHVwbGUKKwkJCQkJICogY29ycmVjdGx5IC0tIHBvc3RpbmcgdHVwbGUgc3RpbGwgZ2V0cyBr aWxsZWQpLgorCQkJCQkgKi8KKwkJCQkJaWYgKHBpIDwgYmF0Y2gtPm51bURlYWQpCisJCQkJCQlr aXRlbSA9ICZiYXRjaC0+aXRlbXNbYmF0Y2gtPmRlYWRJdGVtc1twaSsrXV07CisJCQkJfQorCisJ CQkJLyoKKwkJCQkgKiBEb24ndCBib3RoZXIgYWR2YW5jaW5nIHRoZSBvdXRlcm1vc3QgbG9vcCdz IGludCBpdGVyYXRvciB0bworCQkJCSAqIGF2b2lkIHByb2Nlc3NpbmcgZGVhZCBpdGVtcyB0aGF0 IHJlbGF0ZSB0byB0aGUgc2FtZQorCQkJCSAqIG9mZm51bS9wb3N0aW5nIGxpc3QgdHVwbGUuICBU aGlzIG1pY3JvLW9wdGltaXphdGlvbiBoYXJkbHkKKwkJCQkgKiBzZWVtcyB3b3J0aCBpdC4gIChG dXJ0aGVyIGl0ZXJhdGlvbnMgb2YgdGhlIG91dGVybW9zdCBsb29wCisJCQkJICogd2lsbCBmYWls IHRvIG1hdGNoIG9uIHRoaXMgc2FtZSBwb3N0aW5nIGxpc3QncyBmaXJzdCBoZWFwCisJCQkJICog VElEIGluc3RlYWQsIHNvIHdlJ2xsIGFkdmFuY2UgdG8gdGhlIG5leHQgb2ZmbnVtL2luZGV4CisJ CQkJICogdHVwbGUgcHJldHR5IHF1aWNrbHkuKQorCQkJCSAqLworCQkJCWlmIChqID09IG5wb3N0 aW5nKQorCQkJCQlraWxsdHVwbGUgPSB0cnVlOworCQkJfQorCQkJZWxzZSBpZiAoSXRlbVBvaW50 ZXJFcXVhbHMoJml0dXBsZS0+dF90aWQsICZraXRlbS0+dGFibGVUaWQpKQorCQkJCWtpbGx0dXBs ZSA9IHRydWU7CisKKwkJCS8qCisJCQkgKiBNYXJrIGluZGV4IGl0ZW0gYXMgZGVhZCwgaWYgaXQg aXNuJ3QgYWxyZWFkeS4gIFNpbmNlIHRoaXMKKwkJCSAqIGhhcHBlbnMgd2hpbGUgaG9sZGluZyBh IHNoYXJlZCBidWZmZXIgbG9jaywgaXQncyBwb3NzaWJsZSB0aGF0CisJCQkgKiBtdWx0aXBsZSBw cm9jZXNzZXMgYXR0ZW1wdCB0byBkbyB0aGlzIHNpbXVsdGFuZW91c2x5LCBsZWFkaW5nCisJCQkg KiB0byBtdWx0aXBsZSBmdWxsLXBhZ2UgaW1hZ2VzIGJlaW5nIHNlbnQgdG8gV0FMIChpZgorCQkJ ICogd2FsX2xvZ19oaW50cyBvciBkYXRhIGNoZWNrc3VtcyBhcmUgZW5hYmxlZCksIHdoaWNoIGlz CisJCQkgKiB1bmRlc2lyYWJsZS4KKwkJCSAqLworCQkJaWYgKGtpbGx0dXBsZSAmJiAhSXRlbUlk SXNEZWFkKGlpZCkpCisJCQl7CisJCQkJaWYgKCFraWxsZWRzb21ldGhpbmcpCisJCQkJeworCQkJ CQkvKgorCQkJCQkgKiBVc2UgdGhlIGhpbnQgYml0IGluZnJhc3RydWN0dXJlIHRvIGNoZWNrIGlm IHdlIGNhbgorCQkJCQkgKiB1cGRhdGUgdGhlIHBhZ2Ugd2hpbGUganVzdCBob2xkaW5nIGEgc2hh cmUgbG9jay4gSWYgd2UKKwkJCQkJICogYXJlIG5vdCBhbGxvd2VkLCB0aGVyZSdzIG5vIHBvaW50 IGNvbnRpbnVpbmcuCisJCQkJCSAqLworCQkJCQlpZiAoIUJ1ZmZlckJlZ2luU2V0SGludEJpdHMo YnVmKSkKKwkJCQkJCWdvdG8gdW5sb2NrX3BhZ2U7CisJCQkJfQorCisJCQkJLyogZm91bmQgdGhl IGl0ZW0vYWxsIHBvc3RpbmcgbGlzdCBpdGVtcyAqLworCQkJCUl0ZW1JZE1hcmtEZWFkKGlpZCk7 CisJCQkJa2lsbGVkc29tZXRoaW5nID0gdHJ1ZTsKKwkJCQlicmVhazsJCQkvKiBvdXQgb2YgaW5u ZXIgc2VhcmNoIGxvb3AgKi8KKwkJCX0KKwkJCW9mZm51bSA9IE9mZnNldE51bWJlck5leHQob2Zm bnVtKTsKKwkJfQorCX0KKworCS8qCisJICogU2luY2UgdGhpcyBjYW4gYmUgcmVkb25lIGxhdGVy IGlmIG5lZWRlZCwgbWFyayBhcyBkaXJ0eSBoaW50LgorCSAqCisJICogV2hlbmV2ZXIgd2UgbWFy ayBhbnl0aGluZyBMUF9ERUFELCB3ZSBhbHNvIHNldCB0aGUgcGFnZSdzCisJICogQlRQX0hBU19H QVJCQUdFIGZsYWcsIHdoaWNoIGlzIGxpa2V3aXNlIGp1c3QgYSBoaW50LiAgKE5vdGUgdGhhdCB3 ZQorCSAqIG9ubHkgcmVseSBvbiB0aGUgcGFnZS1sZXZlbCBmbGFnIGluICFoZWFwa2V5c3BhY2Ug aW5kZXhlcy4pCisJICovCisJaWYgKGtpbGxlZHNvbWV0aGluZykKKwl7CisJCW9wYXF1ZS0+YnRw b19mbGFncyB8PSBCVFBfSEFTX0dBUkJBR0U7CisJCUJ1ZmZlckZpbmlzaFNldEhpbnRCaXRzKGJ1 ZiwgdHJ1ZSwgdHJ1ZSk7CisJfQorCit1bmxvY2tfcGFnZToKKwlfYnRfcmVsYnVmKHJlbCwgYnVm KTsKK30KKwogLyoKICAqCWJ0ZW5kc2NhbigpIC0tIGNsb3NlIGRvd24gYSBzY2FuCiAgKi8KQEAg LTQ1NiwxMTYgKzU0OSw2MyBAQCBidGVuZHNjYW4oSW5kZXhTY2FuRGVzYyBzY2FuKQogewogCUJU U2Nhbk9wYXF1ZSBzbyA9IChCVFNjYW5PcGFxdWUpIHNjYW4tPm9wYXF1ZTsKIAotCS8qIHdlIGFy ZW4ndCBob2xkaW5nIGFueSByZWFkIGxvY2tzLCBidXQgZ290dGEgZHJvcCB0aGUgcGlucyAqLwot CWlmIChCVFNjYW5Qb3NJc1ZhbGlkKHNvLT5jdXJyUG9zKSkKLQl7Ci0JCS8qIEJlZm9yZSBsZWF2 aW5nIGN1cnJlbnQgcGFnZSwgZGVhbCB3aXRoIGFueSBraWxsZWQgaXRlbXMgKi8KLQkJaWYgKHNv LT5udW1LaWxsZWQgPiAwKQotCQkJX2J0X2tpbGxpdGVtcyhzY2FuKTsKLQkJQlRTY2FuUG9zVW5w aW5JZlBpbm5lZChzby0+Y3VyclBvcyk7Ci0JfQotCi0Jc28tPm1hcmtJdGVtSW5kZXggPSAtMTsK LQlCVFNjYW5Qb3NVbnBpbklmUGlubmVkKHNvLT5tYXJrUG9zKTsKLQotCS8qIE5vIG5lZWQgdG8g aW52YWxpZGF0ZSBwb3NpdGlvbnMsIHRoZSBSQU0gaXMgYWJvdXQgdG8gYmUgZnJlZWQuICovCi0K IAkvKiBSZWxlYXNlIHN0b3JhZ2UgKi8KIAlpZiAoc28tPmtleURhdGEgIT0gTlVMTCkKIAkJcGZy ZWUoc28tPmtleURhdGEpOwogCS8qIHNvLT5hcnJheUtleXMgYW5kIHNvLT5vcmRlclByb2NzIGFy ZSBpbiBhcnJheUNvbnRleHQgKi8KIAlpZiAoc28tPmFycmF5Q29udGV4dCAhPSBOVUxMKQogCQlN ZW1vcnlDb250ZXh0RGVsZXRlKHNvLT5hcnJheUNvbnRleHQpOwotCWlmIChzby0+a2lsbGVkSXRl bXMgIT0gTlVMTCkKLQkJcGZyZWUoc28tPmtpbGxlZEl0ZW1zKTsKLQlpZiAoc28tPmN1cnJUdXBs ZXMgIT0gTlVMTCkKLQkJcGZyZWUoc28tPmN1cnJUdXBsZXMpOwotCS8qIHNvLT5tYXJrVHVwbGVz IHNob3VsZCBub3QgYmUgcGZyZWUnZCwgc2VlIGJ0cmVzY2FuICovCiAJcGZyZWUoc28pOwogfQog CiAvKgotICoJYnRtYXJrcG9zKCkgLS0gc2F2ZSBjdXJyZW50IHNjYW4gcG9zaXRpb24KKyAqCWJ0 cG9zcmVzZXQoKSAtLSByZXNldCBhcnJheSBrZXkgc3RhdGUgZm9yIHNjYW4gcG9zaXRpb24gY2hh bmdlCisgKgorICogQ2FsbGVkIGJ5IHRoZSBjb3JlIHN5c3RlbSB3aGVuIHRoZSBzY2FuJ3MgbG9n aWNhbCBwb3NpdGlvbiBpcyBhYm91dCB0bworICogY2hhbmdlIGluIGEgd2F5IHRoYXQgaW52YWxp ZGF0ZXMgb3VyIGFycmF5IGtleSBzdGF0ZS4gIFRoaXMgaGFwcGVucyB3aGVuCisgKiByZXN0b3Jp bmcgYSBtYXJrZWQgcG9zaXRpb24sIG9yIHdoZW4gdGhlIHNjYW4gY3Jvc3NlcyBhIGJhdGNoIGJv dW5kYXJ5CisgKiB3aGlsZSBtb3ZpbmcgaW4gdGhlIG9wcG9zaXRlIGRpcmVjdGlvbiB0byB0aGUg b25lIG9yaWdpbmFsbHkgdXNlZC4KKyAqCisgKiBGb3IgZGlyZWN0aW9uIGNoYW5nZXMsIHRoZSBj b3JlIHN5c3RlbSB3aWxsIGhhdmUgYWxyZWFkeSBmbGlwcGVkIHRoZQorICogYmF0Y2gncyBkaXIg ZmllbGQgYmVmb3JlIGNhbGxpbmcgaGVyZTsgd2UgdXNlIHRoaXMgdXBkYXRlZCBkaXJlY3Rpb24g d2hlbgorICogcmVzZXR0aW5nIG91ciBhcnJheSBrZXlzLiAgRm9yIG1hcmsgcmVzdG9yYXRpb24s IHRoZSBiYXRjaCdzIGRpciB3aWxsCisgKiByZXRhaW4gaXRzIG9yaWdpbmFsIHZhbHVlIChmcm9t IHdoZW4gYnRnZXRiYXRjaCByZXR1cm5lZCBpdCkuCiAgKi8KIHZvaWQKLWJ0bWFya3BvcyhJbmRl eFNjYW5EZXNjIHNjYW4pCitidHBvc3Jlc2V0KEluZGV4U2NhbkRlc2Mgc2NhbiwgSW5kZXhTY2Fu QmF0Y2ggYmF0Y2gpCiB7CiAJQlRTY2FuT3BhcXVlIHNvID0gKEJUU2Nhbk9wYXF1ZSkgc2Nhbi0+ b3BhcXVlOworCUJUQmF0Y2hEYXRhICpidGJhdGNoID0gQlRCYXRjaEdldERhdGEoc2NhbiwgYmF0 Y2gpOwogCi0JLyogVGhlcmUgbWF5IGJlIGFuIG9sZCBtYXJrIHdpdGggYSBwaW4gKGJ1dCBubyBs b2NrKS4gKi8KLQlCVFNjYW5Qb3NVbnBpbklmUGlubmVkKHNvLT5tYXJrUG9zKTsKKwlpZiAoIXNv LT5udW1BcnJheUtleXMpCisJCXJldHVybjsKIAogCS8qCi0JICogSnVzdCByZWNvcmQgdGhlIGN1 cnJlbnQgaXRlbUluZGV4LiAgSWYgd2UgbGF0ZXIgc3RlcCB0byBuZXh0IHBhZ2UKLQkgKiBiZWZv cmUgcmVsZWFzaW5nIHRoZSBtYXJrZWQgcG9zaXRpb24sIF9idF9zdGVwcGFnZSBtYWtlcyBhIGZ1 bGwgY29weSBvZgotCSAqIHRoZSBjdXJyUG9zIHN0cnVjdCBpbiBtYXJrUG9zLiAgSWYgKGFzIG9m dGVuIGhhcHBlbnMpIHRoZSBtYXJrIGlzIG1vdmVkCi0JICogYmVmb3JlIHdlIGxlYXZlIHRoZSBw YWdlLCB3ZSBkb24ndCBoYXZlIHRvIGRvIHRoYXQgd29yay4KKwkgKiBSZXNldCBhcnJheSBrZXlz IHRvIGluaXRpYWwgc3RhdGUgZm9yIHRoZSBiYXRjaCdzIHNjYW4gZGlyZWN0aW9uLiAgQWxzbwor CSAqIGNsZWFyIG5lZWRQcmltU2NhbiBhbmQgcmVsYXRlZCBmbGFncy4gIFRoZXNlIHdlcmUgc2V0 IGJhc2VkIG9uIHRoZSBzb2Z0CisJICogYXNzdW1wdGlvbiB0aGF0IHRoZSBzY2FuIHdvdWxkIGFs d2F5cyBwcm9jZWVkIGluIHRoZSBzYW1lIGRpcmVjdGlvbi4KKwkgKgorCSAqIFRoZXNlIHN0ZXBz IHdvcmsgYXJvdW5kIHRoZSBzb2Z0IGFzc3VtcHRpb24gYmVpbmcgdmlvbGF0ZWQ6IHRoZXkgZm9y Y2UKKwkgKiB0aGUgc2NhbiB0byBzdGVwIHRvIHRoZSBuZXh0L3ByZXZpb3VzIHBhZ2UsIG1ha2lu ZyB0aGUgYXJyYXlzIHJlY292ZXIuCisJICogV2hlbiB3ZSBnbyB0byByZWFkIHRoYXQgcGFnZSwg X2J0X3JlYWRwYWdlIHdpbGwgcmVsaWFibHkgZGV0ZXJtaW5lIGlmIGEKKwkgKiBwcmltaXRpdmUg c2NhbiByZWFsbHkgaXMgbmVlZGVkIGJhc2VkIG9uIHRoZSBwYWdlJ3MgdHVwbGVzLiAgSWYgdGhl cmUncworCSAqIGEgcHJpbWl0aXZlIHNjYW4sIGl0IHdpbGwgcmVwb3NpdGlvbiB0aGUgc2NhbiB1 c2luZyBuZXcgYXJyYXkgdmFsdWVzCisJICogKGJhc2VkIG9uIHRoZSB0dXBsZXMgZnJvbSB0aGUg bmVpZ2hib3JpbmcgcGFnZSB3ZSdsbCBzdGVwIG9uIHRvKS4KKwkgKgorCSAqIFdlIG5lZWQgdG8g cmVzZXQgdGhlIGFycmF5IGtleSBzdGF0ZSBpbiB0aGUgY29ycmVjdCBkaXJlY3Rpb24gc28gdGhh dAorCSAqIHdlIHdvbid0IGdldCBjb25mdXNlZC4gIFdoZW4gdGhlIGFycmF5IGtleXMgYXJlIGJl aGluZCB0aGUga2V5IHNwYWNlCisJICogZm9yIHRoZSBwYWdlIHdlJ3JlIHN0ZXBwaW5nIG9uIHRv IChiZWhpbmQgaW4gdGVybXMgb2YgdGhlIHNjYW4gZGlyKSwKKwkgKiB0aGV5IHdpbGwgY2F0Y2gg dXAgYXV0b21hdGljYWxseS4gIEJ1dCB3aGVuIHRoZXkncmUgYWhlYWQgb2YgdGhhdAorCSAqIHBh Z2UncyBrZXkgc3BhY2UsIHRoZSBzY2FuIGNvdWxkIG1pc3MgbWF0Y2hpbmcgdHVwbGVzLgogCSAq LwotCWlmIChCVFNjYW5Qb3NJc1ZhbGlkKHNvLT5jdXJyUG9zKSkKLQkJc28tPm1hcmtJdGVtSW5k ZXggPSBzby0+Y3VyclBvcy5pdGVtSW5kZXg7CisJX2J0X3N0YXJ0X2FycmF5X2tleXMoc2Nhbiwg YmF0Y2gtPmRpcik7CisJaWYgKFNjYW5EaXJlY3Rpb25Jc0ZvcndhcmQoYmF0Y2gtPmRpcikpCisJ CWJ0YmF0Y2gtPm1vcmVSaWdodCA9IHRydWU7CiAJZWxzZQotCXsKLQkJQlRTY2FuUG9zSW52YWxp ZGF0ZShzby0+bWFya1Bvcyk7Ci0JCXNvLT5tYXJrSXRlbUluZGV4ID0gLTE7Ci0JfQotfQotCi0v KgotICoJYnRyZXN0cnBvcygpIC0tIHJlc3RvcmUgc2NhbiB0byBsYXN0IHNhdmVkIHBvc2l0aW9u Ci0gKi8KLXZvaWQKLWJ0cmVzdHJwb3MoSW5kZXhTY2FuRGVzYyBzY2FuKQotewotCUJUU2Nhbk9w YXF1ZSBzbyA9IChCVFNjYW5PcGFxdWUpIHNjYW4tPm9wYXF1ZTsKLQotCWlmIChzby0+bWFya0l0 ZW1JbmRleCA+PSAwKQotCXsKLQkJLyoKLQkJICogVGhlIHNjYW4gaGFzIG5ldmVyIG1vdmVkIHRv IGEgbmV3IHBhZ2Ugc2luY2UgdGhlIGxhc3QgbWFyay4gIEp1c3QKLQkJICogcmVzdG9yZSB0aGUg aXRlbUluZGV4LgotCQkgKgotCQkgKiBOQjogSW4gdGhpcyBjYXNlIHdlIGNhbid0IGNvdW50IG9u IGFueXRoaW5nIGluIHNvLT5tYXJrUG9zIHRvIGJlCi0JCSAqIGFjY3VyYXRlLgotCQkgKi8KLQkJ c28tPmN1cnJQb3MuaXRlbUluZGV4ID0gc28tPm1hcmtJdGVtSW5kZXg7Ci0JfQotCWVsc2UKLQl7 Ci0JCS8qCi0JCSAqIFRoZSBzY2FuIG1vdmVkIHRvIGEgbmV3IHBhZ2UgYWZ0ZXIgbGFzdCBtYXJr IG9yIHJlc3RvcmUsIGFuZCB3ZSBhcmUKLQkJICogbm93IHJlc3RvcmluZyB0byB0aGUgbWFya2Vk IHBhZ2UuICBXZSBhcmVuJ3QgaG9sZGluZyBhbnkgcmVhZAotCQkgKiBsb2NrcywgYnV0IGlmIHdl J3JlIHN0aWxsIGhvbGRpbmcgdGhlIHBpbiBmb3IgdGhlIGN1cnJlbnQgcG9zaXRpb24sCi0JCSAq IHdlIG11c3QgZHJvcCBpdC4KLQkJICovCi0JCWlmIChCVFNjYW5Qb3NJc1ZhbGlkKHNvLT5jdXJy UG9zKSkKLQkJewotCQkJLyogQmVmb3JlIGxlYXZpbmcgY3VycmVudCBwYWdlLCBkZWFsIHdpdGgg YW55IGtpbGxlZCBpdGVtcyAqLwotCQkJaWYgKHNvLT5udW1LaWxsZWQgPiAwKQotCQkJCV9idF9r aWxsaXRlbXMoc2Nhbik7Ci0JCQlCVFNjYW5Qb3NVbnBpbklmUGlubmVkKHNvLT5jdXJyUG9zKTsK LQkJfQotCi0JCWlmIChCVFNjYW5Qb3NJc1ZhbGlkKHNvLT5tYXJrUG9zKSkKLQkJewotCQkJLyog YnVtcCBwaW4gb24gbWFyayBidWZmZXIgZm9yIGFzc2lnbm1lbnQgdG8gY3VycmVudCBidWZmZXIg Ki8KLQkJCWlmIChCVFNjYW5Qb3NJc1Bpbm5lZChzby0+bWFya1BvcykpCi0JCQkJSW5jckJ1ZmZl clJlZkNvdW50KHNvLT5tYXJrUG9zLmJ1Zik7Ci0JCQltZW1jcHkoJnNvLT5jdXJyUG9zLCAmc28t Pm1hcmtQb3MsCi0JCQkJICAgb2Zmc2V0b2YoQlRTY2FuUG9zRGF0YSwgaXRlbXNbMV0pICsKLQkJ CQkgICBzby0+bWFya1Bvcy5sYXN0SXRlbSAqIHNpemVvZihCVFNjYW5Qb3NJdGVtKSk7Ci0JCQlp ZiAoc28tPmN1cnJUdXBsZXMpCi0JCQkJbWVtY3B5KHNvLT5jdXJyVHVwbGVzLCBzby0+bWFya1R1 cGxlcywKLQkJCQkJICAgc28tPm1hcmtQb3MubmV4dFR1cGxlT2Zmc2V0KTsKLQkJCS8qIFJlc2V0 IHRoZSBzY2FuJ3MgYXJyYXkga2V5cyAoc2VlIF9idF9zdGVwcGFnZSBmb3Igd2h5KSAqLwotCQkJ aWYgKHNvLT5udW1BcnJheUtleXMpCi0JCQl7Ci0JCQkJX2J0X3N0YXJ0X2FycmF5X2tleXMoc2Nh biwgc28tPmN1cnJQb3MuZGlyKTsKLQkJCQlzby0+bmVlZFByaW1TY2FuID0gZmFsc2U7Ci0JCQl9 Ci0JCX0KLQkJZWxzZQotCQkJQlRTY2FuUG9zSW52YWxpZGF0ZShzby0+Y3VyclBvcyk7Ci0JfQor CQlidGJhdGNoLT5tb3JlTGVmdCA9IHRydWU7CisJc28tPm5lZWRQcmltU2NhbiA9IGZhbHNlOwor CXNvLT5zY2FuQmVoaW5kID0gZmFsc2U7CisJc28tPm9wcG9zaXRlRGlyQ2hlY2sgPSBmYWxzZTsK IH0KIAogLyoKQEAgLTg4MSwxNSArOTIxLDYgQEAgX2J0X3BhcmFsbGVsX3NlaXplKEluZGV4U2Nh bkRlc2Mgc2NhbiwgQmxvY2tOdW1iZXIgKm5leHRfc2Nhbl9wYWdlLAogCSpuZXh0X3NjYW5fcGFn ZSA9IEludmFsaWRCbG9ja051bWJlcjsKIAkqbGFzdF9jdXJyX3BhZ2UgPSBJbnZhbGlkQmxvY2tO dW1iZXI7CiAKLQkvKgotCSAqIFJlc2V0IHNvLT5jdXJyUG9zLCBhbmQgaW5pdGlhbGl6ZSBtb3Jl TGVmdC9tb3JlUmlnaHQgc3VjaCB0aGF0IHRoZSBuZXh0Ci0JICogY2FsbCB0byBfYnRfcmVhZG5l eHRwYWdlIHRyZWF0cyB0aGlzIGJhY2tlbmQgc2ltaWxhcmx5IHRvIGEgc2VyaWFsCi0JICogYmFj a2VuZCB0aGF0IHN0ZXBzIGZyb20gKmxhc3RfY3Vycl9wYWdlIHRvICpuZXh0X3NjYW5fcGFnZSAo dW5sZXNzIHRoaXMKLQkgKiBiYWNrZW5kJ3Mgc28tPmN1cnJQb3MgaXMgaW5pdGlhbGl6ZWQgYnkg X2J0X3JlYWRmaXJzdHBhZ2UgYmVmb3JlIHRoZW4pLgotCSAqLwotCUJUU2NhblBvc0ludmFsaWRh dGUoc28tPmN1cnJQb3MpOwotCXNvLT5jdXJyUG9zLm1vcmVMZWZ0ID0gc28tPmN1cnJQb3MubW9y ZVJpZ2h0ID0gdHJ1ZTsKLQogCWlmIChmaXJzdCkKIAl7CiAJCS8qCkBAIC0xMDM5LDggKzEwNzAs NiBAQCBfYnRfcGFyYWxsZWxfZG9uZShJbmRleFNjYW5EZXNjIHNjYW4pCiAJQlRQYXJhbGxlbFNj YW5EZXNjIGJ0c2NhbjsKIAlib29sCQlzdGF0dXNfY2hhbmdlZCA9IGZhbHNlOwogCi0JQXNzZXJ0 KCFCVFNjYW5Qb3NJc1ZhbGlkKHNvLT5jdXJyUG9zKSk7Ci0KIAkvKiBEbyBub3RoaW5nLCBmb3Ig bm9uLXBhcmFsbGVsIHNjYW5zICovCiAJaWYgKHBhcmFsbGVsX3NjYW4gPT0gTlVMTCkKIAkJcmV0 dXJuOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRzZWFyY2guYyBi L3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0c2VhcmNoLmMKaW5kZXggYWFlNmFjYjdmLi5j MDg5ZWMzOGQgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0c2VhcmNo LmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRzZWFyY2guYwpAQCAtMjMsNTMg KzIzLDQ5IEBACiAjaW5jbHVkZSAicGdzdGF0LmgiCiAjaW5jbHVkZSAic3RvcmFnZS9wcmVkaWNh dGUuaCIKICNpbmNsdWRlICJ1dGlscy9sc3lzY2FjaGUuaCIKKyNpbmNsdWRlICJ1dGlscy9tZW1k ZWJ1Zy5oIgogI2luY2x1ZGUgInV0aWxzL3JlbC5oIgogCiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBf YnRfZHJvcF9sb2NrX2FuZF9tYXliZV9waW4oUmVsYXRpb24gcmVsLCBCVFNjYW5PcGFxdWUgc28p Oworc3RhdGljIGlubGluZSB2b2lkIF9idF9iYXRjaF91bmxvY2soSW5kZXhTY2FuRGVzYyBzY2Fu LCBJbmRleFNjYW5CYXRjaCBiYXRjaCwKKwkJCQkJCQkJCUJ1ZmZlciBidWYpOwogc3RhdGljIEJ1 ZmZlciBfYnRfbW92ZXJpZ2h0KFJlbGF0aW9uIHJlbCwgUmVsYXRpb24gaGVhcHJlbCwgQlRTY2Fu SW5zZXJ0IGtleSwKIAkJCQkJCQlCdWZmZXIgYnVmLCBib29sIGZvcnVwZGF0ZSwgQlRTdGFjayBz dGFjaywKIAkJCQkJCQlpbnQgYWNjZXNzKTsKIHN0YXRpYyBPZmZzZXROdW1iZXIgX2J0X2JpbnNy Y2goUmVsYXRpb24gcmVsLCBCVFNjYW5JbnNlcnQga2V5LCBCdWZmZXIgYnVmKTsKIHN0YXRpYyBp bnQJX2J0X2JpbnNyY2hfcG9zdGluZyhCVFNjYW5JbnNlcnQga2V5LCBQYWdlIHBhZ2UsCiAJCQkJ CQkJCU9mZnNldE51bWJlciBvZmZudW0pOwotc3RhdGljIGlubGluZSB2b2lkIF9idF9yZXR1cm5p dGVtKEluZGV4U2NhbkRlc2Mgc2NhbiwgQlRTY2FuT3BhcXVlIHNvKTsKLXN0YXRpYyBib29sIF9i dF9zdGVwcGFnZShJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyKTsKLXN0YXRp YyBib29sIF9idF9yZWFkZmlyc3RwYWdlKEluZGV4U2NhbkRlc2Mgc2NhbiwgT2Zmc2V0TnVtYmVy IG9mZm51bSwKLQkJCQkJCQkgIFNjYW5EaXJlY3Rpb24gZGlyKTsKLXN0YXRpYyBib29sIF9idF9y ZWFkbmV4dHBhZ2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBCbG9ja051bWJlciBibGtubywKLQkJCQkJ CQkgQmxvY2tOdW1iZXIgbGFzdGN1cnJibGtubywgU2NhbkRpcmVjdGlvbiBkaXIsCi0JCQkJCQkJ IGJvb2wgc2VpemVkKTsKK3N0YXRpYyBJbmRleFNjYW5CYXRjaCBfYnRfcmVhZGZpcnN0cGFnZShJ bmRleFNjYW5EZXNjIHNjYW4sIEluZGV4U2NhbkJhdGNoIGZpcnN0YmF0Y2gsCisJCQkJCQkJCQkJ T2Zmc2V0TnVtYmVyIG9mZm51bSwgU2NhbkRpcmVjdGlvbiBkaXIpOworc3RhdGljIEluZGV4U2Nh bkJhdGNoIF9idF9yZWFkbmV4dHBhZ2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBCbG9ja051bWJlciBi bGtubywKKwkJCQkJCQkJCSAgIEJsb2NrTnVtYmVyIGxhc3RjdXJyYmxrbm8sCisJCQkJCQkJCQkg ICBTY2FuRGlyZWN0aW9uIGRpciwgYm9vbCBmaXJzdHBhZ2UpOwogc3RhdGljIEJ1ZmZlciBfYnRf bG9ja19hbmRfdmFsaWRhdGVfbGVmdChSZWxhdGlvbiByZWwsIEJsb2NrTnVtYmVyICpibGtubywK IAkJCQkJCQkJCQkgQmxvY2tOdW1iZXIgbGFzdGN1cnJibGtubyk7Ci1zdGF0aWMgYm9vbCBfYnRf ZW5kcG9pbnQoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcik7CitzdGF0aWMg SW5kZXhTY2FuQmF0Y2ggX2J0X2VuZHBvaW50KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVj dGlvbiBkaXIsCisJCQkJCQkJCSAgIEluZGV4U2NhbkJhdGNoIGZpcnN0YmF0Y2gpOwogCiAKIC8q Ci0gKglfYnRfZHJvcF9sb2NrX2FuZF9tYXliZV9waW4oKQorICogX2J0X2JhdGNoX3VubG9jaygp IC0tIG5idHJlZSB3cmFwcGVyIGZvciBpbmRleGFtX3V0aWxfYmF0Y2hfdW5sb2NrLgogICoKLSAq IFVubG9jayBzby0+Y3VyclBvcy5idWYuICBJZiBzY2FuIGlzIHNvLT5kcm9wUGluLCBkcm9wIHRo ZSBwaW4sIHRvby4KLSAqIERyb3BwaW5nIHRoZSBwaW4gcHJldmVudHMgVkFDVVVNIGZyb20gYmxv Y2tpbmcgb24gYWNxdWlyaW5nIGEgY2xlYW51cCBsb2NrLgorICogUGVyZm9ybXMgdGhlIHNhbWUg VmFsZ3JpbmQgaW5zdHJ1bWVudGF0aW9uIGFzIF9idF91bmxvY2tidWYuCiAgKi8KIHN0YXRpYyBp bmxpbmUgdm9pZAotX2J0X2Ryb3BfbG9ja19hbmRfbWF5YmVfcGluKFJlbGF0aW9uIHJlbCwgQlRT Y2FuT3BhcXVlIHNvKQorX2J0X2JhdGNoX3VubG9jayhJbmRleFNjYW5EZXNjIHNjYW4sIEluZGV4 U2NhbkJhdGNoIGJhdGNoLCBCdWZmZXIgYnVmKQogewotCWlmICghc28tPmRyb3BQaW4pCi0Jewot CQkvKiBKdXN0IGRyb3AgdGhlIGxvY2sgKG5vdCB0aGUgcGluKSAqLwotCQlfYnRfdW5sb2NrYnVm KHJlbCwgc28tPmN1cnJQb3MuYnVmKTsKLQkJcmV0dXJuOwotCX0KKyNpZiBkZWZpbmVkKFVTRV9W QUxHUklORCkKKwlQYWdlCQlwYWdlID0gQnVmZmVyR2V0UGFnZShidWYpOwogCi0JLyoKLQkgKiBE cm9wIGJvdGggdGhlIGxvY2sgYW5kIHRoZSBwaW4uCi0JICoKLQkgKiBIYXZlIHRvIHNldCBzby0+ Y3VyclBvcy5sc24gc28gdGhhdCBfYnRfa2lsbGl0ZW1zIGhhcyBhIHdheSB0byBkZXRlY3QKLQkg KiB3aGVuIGNvbmN1cnJlbnQgaGVhcCBUSUQgcmVjeWNsaW5nIGJ5IFZBQ1VVTSBtaWdodCBoYXZl IHRha2VuIHBsYWNlLgotCSAqLwotCXNvLT5jdXJyUG9zLmxzbiA9IEJ1ZmZlckdldExTTkF0b21p Yyhzby0+Y3VyclBvcy5idWYpOwotCV9idF9yZWxidWYocmVsLCBzby0+Y3VyclBvcy5idWYpOwot CXNvLT5jdXJyUG9zLmJ1ZiA9IEludmFsaWRCdWZmZXI7CisJVkFMR1JJTkRfQ0hFQ0tfTUVNX0lT X0RFRklORUQocGFnZSwgQkxDS1NaKTsKKyNlbmRpZgorCisJaW5kZXhhbV91dGlsX2JhdGNoX3Vu bG9jayhzY2FuLCBiYXRjaCwgYnVmKTsKKworI2lmIGRlZmluZWQoVVNFX1ZBTEdSSU5EKQorCWlm ICghUmVsYXRpb25Vc2VzTG9jYWxCdWZmZXJzKHNjYW4tPmluZGV4UmVsYXRpb24pKQorCQlWQUxH UklORF9NQUtFX01FTV9OT0FDQ0VTUyhwYWdlLCBCTENLU1opOworI2VuZGlmCiB9CiAKIC8qCkBA IC04NjAsMjYgKzg1NiwyNSBAQCBfYnRfY29tcGFyZShSZWxhdGlvbiByZWwsCiB9CiAKIC8qCi0g KglfYnRfZmlyc3QoKSAtLSBGaW5kIHRoZSBmaXJzdCBpdGVtIGluIGEgc2Nhbi4KKyAqCV9idF9m aXJzdCgpIC0tIEZpbmQgdGhlIGZpcnN0IGJhdGNoIGluIGEgc2Nhbi4KICAqCiAgKgkJV2UgbmVl ZCB0byBiZSBjbGV2ZXIgYWJvdXQgdGhlIGRpcmVjdGlvbiBvZiBzY2FuLCB0aGUgc2VhcmNoCi0g KgkJY29uZGl0aW9ucywgYW5kIHRoZSB0cmVlIG9yZGVyaW5nLiAgV2UgZmluZCB0aGUgZmlyc3Qg aXRlbSAob3IsCi0gKgkJaWYgYmFja3dhcmRzIHNjYW4sIHRoZSBsYXN0IGl0ZW0pIGluIHRoZSB0 cmVlIHRoYXQgc2F0aXNmaWVzIHRoZQotICoJCXF1YWxpZmljYXRpb25zIGluIHRoZSBzY2FuIGtl eS4gIE9uIHN1Y2Nlc3MgZXhpdCwgZGF0YSBhYm91dCB0aGUKLSAqCQltYXRjaGluZyB0dXBsZShz KSBvbiB0aGUgcGFnZSBoYXMgYmVlbiBsb2FkZWQgaW50byBzby0+Y3VyclBvcy4gIFdlJ2xsCi0g KgkJZHJvcCBhbGwgbG9ja3MgYW5kIGhvbGQgb250byBhIHBpbiBvbiBwYWdlJ3MgYnVmZmVyLCBl eGNlcHQgZHVyaW5nCi0gKgkJc28tPmRyb3BQaW4gc2NhbnMsIHdoZW4gd2UgZHJvcCBib3RoIHRo ZSBsb2NrIGFuZCB0aGUgcGluLgotICoJCV9idF9yZXR1cm5pdGVtIHNldHMgdGhlIG5leHQgaXRl bSB0byByZXR1cm4gdG8gc2NhbiBvbiBzdWNjZXNzIGV4aXQuCisgKgkJY29uZGl0aW9ucywgYW5k IHRoZSB0cmVlIG9yZGVyaW5nLiAgV2UgZmluZCB0aGUgZmlyc3QgbGVhZiBwYWdlIChvcgorICoJ CXRoZSBsYXN0IGxlYWYgcGFnZSwgd2hlbiBzY2FubmluZyBiYWNrd2FyZHMpIGluIHRoZSB0cmVl IHdpdGggYXQgbGVhc3QKKyAqCQlvbmUgdHVwbGUgdGhhdCBzYXRpc2ZpZXMgdGhlIHF1YWxpZmlj YXRpb25zIGluIHRoZSBzY2FuIGtleS4gIE9uCisgKgkJc3VjY2VzcyBleGl0LCB3ZSByZXR1cm4g YSBuZXcgYmF0Y2ggd2l0aCB0aGF0IHBhZ2UncyBtYXRjaGluZyBpdGVtcy4KICAqCi0gKiBJZiB0 aGVyZSBhcmUgbm8gbWF0Y2hpbmcgaXRlbXMgaW4gdGhlIGluZGV4LCB3ZSByZXR1cm4gZmFsc2Us IHdpdGggbm8KLSAqIHBpbnMgb3IgbG9ja3MgaGVsZC4gIHNvLT5jdXJyUG9zIHdpbGwgcmVtYWlu IGludmFsaWQuCisgKiBJZiB0aGVyZSBhcmUgbm8gbWF0Y2hpbmcgaXRlbXMgaW4gdGhlIGluZGV4 IChpbiB0aGUgZ2l2ZW4gc2NhbiBkaXJlY3Rpb24pLAorICogd2UganVzdCByZXR1cm4gTlVMTC4g IE5vdGUgdGhhdCByZXR1cm5pbmcgTlVMTCBkb2Vzbid0IG5lY2Vzc2FyaWx5IG1lYW4gdGhlCisg KiBlbmQgb2YgdGhlIHRvcC1sZXZlbCBzY2FuOyBjYWxsZXIgc2hvdWxkIGNoZWNrIHNvLT5uZWVk UHJpbVNjYW4gdG8KKyAqIGRldGVybWluZSBpZiBhbm90aGVyIHByaW1pdGl2ZSBpbmRleCBzY2Fu IGlzIHJlcXVpcmVkLgogICoKICAqIE5vdGUgdGhhdCBzY2FuLT5rZXlEYXRhW10sIGFuZCB0aGUg c28tPmtleURhdGFbXSBzY2Fua2V5IGJ1aWx0IGZyb20gaXQsCiAgKiBhcmUgYm90aCBzZWFyY2gt dHlwZSBzY2Fua2V5cyAoc2VlIG5idHJlZS9SRUFETUUgZm9yIG1vcmUgYWJvdXQgdGhpcykuCiAg KiBXaXRoaW4gdGhpcyByb3V0aW5lLCB3ZSBidWlsZCBhIHRlbXBvcmFyeSBpbnNlcnRpb24tdHlw ZSBzY2Fua2V5IHRvIHVzZQogICogaW4gbG9jYXRpbmcgdGhlIHNjYW4gc3RhcnQgcG9zaXRpb24u CiAgKi8KLWJvb2wKK0luZGV4U2NhbkJhdGNoCiBfYnRfZmlyc3QoSW5kZXhTY2FuRGVzYyBzY2Fu LCBTY2FuRGlyZWN0aW9uIGRpcikKIHsKIAlSZWxhdGlvbglyZWwgPSBzY2FuLT5pbmRleFJlbGF0 aW9uOwpAQCAtODkyLDggKzg4NywxMiBAQCBfYnRfZmlyc3QoSW5kZXhTY2FuRGVzYyBzY2FuLCBT Y2FuRGlyZWN0aW9uIGRpcikKIAlTdHJhdGVneU51bWJlciBzdHJhdF90b3RhbCA9IEludmFsaWRT dHJhdGVneTsKIAlCbG9ja051bWJlciBibGtubyA9IEludmFsaWRCbG9ja051bWJlciwKIAkJCQls YXN0Y3VycmJsa25vOworCUluZGV4U2NhbkJhdGNoIGZpcnN0YmF0Y2g7CisJQlRCYXRjaERhdGEg KmJ0Zmlyc3RiYXRjaDsKIAotCUFzc2VydCghQlRTY2FuUG9zSXNWYWxpZChzby0+Y3VyclBvcykp OworCS8qIEFsbG9jYXRlIHNwYWNlIGZvciBmaXJzdCBiYXRjaCAqLworCWZpcnN0YmF0Y2ggPSBp bmRleGFtX3V0aWxfYmF0Y2hfYWxsb2Moc2Nhbik7CisJYnRmaXJzdGJhdGNoID0gQlRCYXRjaEdl dERhdGEoc2NhbiwgZmlyc3RiYXRjaCk7CiAKIAkvKgogCSAqIEV4YW1pbmUgdGhlIHNjYW4ga2V5 cyBhbmQgZWxpbWluYXRlIGFueSByZWR1bmRhbnQga2V5czsgYWxzbyBtYXJrIHRoZQpAQCAtOTA5 LDcgKzkwOCw4IEBAIF9idF9maXJzdChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24g ZGlyKQogCXsKIAkJQXNzZXJ0KCFzby0+bmVlZFByaW1TY2FuKTsKIAkJX2J0X3BhcmFsbGVsX2Rv bmUoc2Nhbik7Ci0JCXJldHVybiBmYWxzZTsKKwkJaW5kZXhhbV91dGlsX2JhdGNoX3JlbGVhc2Uo c2NhbiwgZmlyc3RiYXRjaCk7CisJCXJldHVybiBOVUxMOwogCX0KIAogCS8qCkBAIC05MTgsNyAr OTE4LDEwIEBAIF9idF9maXJzdChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGly KQogCSAqLwogCWlmIChzY2FuLT5wYXJhbGxlbF9zY2FuICE9IE5VTEwgJiYKIAkJIV9idF9wYXJh bGxlbF9zZWl6ZShzY2FuLCAmYmxrbm8sICZsYXN0Y3VycmJsa25vLCB0cnVlKSkKLQkJcmV0dXJu IGZhbHNlOworCXsKKwkJaW5kZXhhbV91dGlsX2JhdGNoX3JlbGVhc2Uoc2NhbiwgZmlyc3RiYXRj aCk7CisJCXJldHVybiBOVUxMOwkJCS8qIGRlZmluaXRlbHkgZG9uZSAoc28tPm5lZWRQcmltU2Nh biBpcyB1bnNldCkgKi8KKwl9CiAKIAkvKgogCSAqIEluaXRpYWxpemUgdGhlIHNjYW4ncyBhcnJh eXMgKGlmIGFueSkgZm9yIHRoZSBjdXJyZW50IHNjYW4gZGlyZWN0aW9uCkBAIC05MzgsMTEgKzk0 MSw5IEBAIF9idF9maXJzdChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyKQog CQlBc3NlcnQoIXNvLT5uZWVkUHJpbVNjYW4pOwogCQlBc3NlcnQoYmxrbm8gIT0gUF9OT05FKTsK IAotCQlpZiAoIV9idF9yZWFkbmV4dHBhZ2Uoc2NhbiwgYmxrbm8sIGxhc3RjdXJyYmxrbm8sIGRp ciwgdHJ1ZSkpCi0JCQlyZXR1cm4gZmFsc2U7CisJCWluZGV4YW1fdXRpbF9iYXRjaF9yZWxlYXNl KHNjYW4sIGZpcnN0YmF0Y2gpOwogCi0JCV9idF9yZXR1cm5pdGVtKHNjYW4sIHNvKTsKLQkJcmV0 dXJuIHRydWU7CisJCXJldHVybiBfYnRfcmVhZG5leHRwYWdlKHNjYW4sIGJsa25vLCBsYXN0Y3Vy cmJsa25vLCBkaXIsIHRydWUpOwogCX0KIAogCS8qCkBAIC0xMjQyLDcgKzEyNDMsNyBAQCBfYnRf Zmlyc3QoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcikKIAkgKiBOb3RlOiBj YWxscyBfYnRfcmVhZGZpcnN0cGFnZSBmb3IgdXMsIHdoaWNoIHJlbGVhc2VzIHRoZSBwYXJhbGxl bCBzY2FuLgogCSAqLwogCWlmIChrZXlzeiA9PSAwKQotCQlyZXR1cm4gX2J0X2VuZHBvaW50KHNj YW4sIGRpcik7CisJCXJldHVybiBfYnRfZW5kcG9pbnQoc2NhbiwgZGlyLCBmaXJzdGJhdGNoKTsK IAogCS8qCiAJICogV2Ugd2FudCB0byBzdGFydCB0aGUgc2NhbiBzb21ld2hlcmUgd2l0aGluIHRo ZSBpbmRleC4gIFNldCB1cCBhbgpAQCAtMTUwMiw3ICsxNTAzLDcgQEAgX2J0X2ZpcnN0KEluZGV4 U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIpCiAJCWRlZmF1bHQ6CiAJCQkvKiBjYW4n dCBnZXQgaGVyZSwgYnV0IGtlZXAgY29tcGlsZXIgcXVpZXQgKi8KIAkJCWVsb2coRVJST1IsICJ1 bnJlY29nbml6ZWQgc3RyYXRfdG90YWw6ICVkIiwgKGludCkgc3RyYXRfdG90YWwpOwotCQkJcmV0 dXJuIGZhbHNlOworCQkJcmV0dXJuIE5VTEw7CiAJfQogCiAJLyoKQEAgLTE1MTAsOSArMTUxMSw5 IEBAIF9idF9maXJzdChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyKQogCSAq IHBvc2l0aW9uIG91cnNlbHZlcyBvbiB0aGUgdGFyZ2V0IGxlYWYgcGFnZS4KIAkgKi8KIAlBc3Nl cnQoU2NhbkRpcmVjdGlvbklzQmFja3dhcmQoZGlyKSA9PSBpbnNrZXkuYmFja3dhcmQpOwotCV9i dF9zZWFyY2gocmVsLCBOVUxMLCAmaW5za2V5LCAmc28tPmN1cnJQb3MuYnVmLCBCVF9SRUFELCBm YWxzZSk7CisJX2J0X3NlYXJjaChyZWwsIE5VTEwsICZpbnNrZXksICZidGZpcnN0YmF0Y2gtPmJ1 ZiwgQlRfUkVBRCwgZmFsc2UpOwogCi0JaWYgKCFCdWZmZXJJc1ZhbGlkKHNvLT5jdXJyUG9zLmJ1 ZikpCisJaWYgKHVubGlrZWx5KCFCdWZmZXJJc1ZhbGlkKGJ0Zmlyc3RiYXRjaC0+YnVmKSkpCiAJ ewogCQlBc3NlcnQoIXNvLT5uZWVkUHJpbVNjYW4pOwogCkBAIC0xNTI4LDIyICsxNTI5LDIzIEBA IF9idF9maXJzdChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyKQogCQlpZiAo SXNvbGF0aW9uSXNTZXJpYWxpemFibGUoKSkKIAkJewogCQkJUHJlZGljYXRlTG9ja1JlbGF0aW9u KHJlbCwgc2Nhbi0+eHNfc25hcHNob3QpOwotCQkJX2J0X3NlYXJjaChyZWwsIE5VTEwsICZpbnNr ZXksICZzby0+Y3VyclBvcy5idWYsIEJUX1JFQUQsIGZhbHNlKTsKKwkJCV9idF9zZWFyY2gocmVs LCBOVUxMLCAmaW5za2V5LCAmYnRmaXJzdGJhdGNoLT5idWYsIEJUX1JFQUQsIGZhbHNlKTsKIAkJ fQogCi0JCWlmICghQnVmZmVySXNWYWxpZChzby0+Y3VyclBvcy5idWYpKQorCQlpZiAoIUJ1ZmZl cklzVmFsaWQoYnRmaXJzdGJhdGNoLT5idWYpKQogCQl7CiAJCQlfYnRfcGFyYWxsZWxfZG9uZShz Y2FuKTsKLQkJCXJldHVybiBmYWxzZTsKKwkJCWluZGV4YW1fdXRpbF9iYXRjaF9yZWxlYXNlKHNj YW4sIGZpcnN0YmF0Y2gpOworCQkJcmV0dXJuIE5VTEw7CiAJCX0KIAl9CiAKIAkvKiBwb3NpdGlv biB0byB0aGUgcHJlY2lzZSBpdGVtIG9uIHRoZSBwYWdlICovCi0Jb2ZmbnVtID0gX2J0X2JpbnNy Y2gocmVsLCAmaW5za2V5LCBzby0+Y3VyclBvcy5idWYpOworCW9mZm51bSA9IF9idF9iaW5zcmNo KHJlbCwgJmluc2tleSwgYnRmaXJzdGJhdGNoLT5idWYpOwogCiAJLyoKIAkgKiBOb3cgbG9hZCBk YXRhIGZyb20gdGhlIGZpcnN0IHBhZ2Ugb2YgdGhlIHNjYW4gKHVzdWFsbHkgdGhlIHBhZ2UKLQkg KiBjdXJyZW50bHkgaW4gc28tPmN1cnJQb3MuYnVmKS4KKwkgKiBjdXJyZW50bHkgaW4gZmlyc3Ri YXRjaC5idWYpLgogCSAqCiAJICogSWYgaW5za2V5Lm5leHRrZXkgPSBmYWxzZSBhbmQgaW5za2V5 LmJhY2t3YXJkID0gZmFsc2UsIG9mZm51bSBpcwogCSAqIHBvc2l0aW9uZWQgYXQgdGhlIGZpcnN0 IG5vbi1waXZvdCB0dXBsZSA+PSBpbnNrZXkuc2NhbmtleXMuCkBAIC0xNTYxLDE2NCArMTU2Myw3 MiBAQCBfYnRfZmlyc3QoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcikKIAkg KiBmb3IgdGhlIHBhZ2UuICBGb3IgZXhhbXBsZSwgd2hlbiBpbnNrZXkgaXMgYm90aCA8IHRoZSBs ZWFmIHBhZ2UncyBoaWdoCiAJICoga2V5IGFuZCA+IGFsbCBvZiBpdHMgbm9uLXBpdm90IHR1cGxl cywgb2ZmbnVtIHdpbGwgYmUgIm1heG9mZiArIDEiLgogCSAqLwotCWlmICghX2J0X3JlYWRmaXJz dHBhZ2Uoc2Nhbiwgb2ZmbnVtLCBkaXIpKQotCQlyZXR1cm4gZmFsc2U7Ci0KLQlfYnRfcmV0dXJu aXRlbShzY2FuLCBzbyk7Ci0JcmV0dXJuIHRydWU7CisJcmV0dXJuIF9idF9yZWFkZmlyc3RwYWdl KHNjYW4sIGZpcnN0YmF0Y2gsIG9mZm51bSwgZGlyKTsKIH0KIAogLyoKLSAqCV9idF9uZXh0KCkg LS0gR2V0IHRoZSBuZXh0IGl0ZW0gaW4gYSBzY2FuLgorICoJX2J0X25leHQoKSAtLSBHZXQgdGhl IG5leHQgYmF0Y2ggaW4gYSBzY2FuLgogICoKLSAqCQlPbiBlbnRyeSwgc28tPmN1cnJQb3MgZGVz Y3JpYmVzIHRoZSBjdXJyZW50IHBhZ2UsIHdoaWNoIG1heSBiZSBwaW5uZWQKLSAqCQlidXQgaXMg bm90IGxvY2tlZCwgYW5kIHNvLT5jdXJyUG9zLml0ZW1JbmRleCBpZGVudGlmaWVzIHdoaWNoIGl0 ZW0gd2FzCi0gKgkJcHJldmlvdXNseSByZXR1cm5lZC4KKyAqCQlPbiBlbnRyeSwgcHJpb3JiYXRj aCBkZXNjcmliZXMgdGhlIGJhdGNoIHRoYXQgd2FzIGxhc3QgcmV0dXJuZWQgYnkKKyAqCQlidGdl dGJhdGNoLiAgV2UnbGwgdXNlIHRoZSBwcmlvciBiYXRjaCdzIHBvc2l0aW9uaW5nIGluZm9ybWF0 aW9uIHRvCisgKgkJZGVjaWRlIHdoaWNoIGxlYWYgcGFnZSB0byByZWFkIG5leHQuCiAgKgotICoJ CU9uIHN1Y2Nlc3MgZXhpdCwgc28tPmN1cnJQb3MgaXMgdXBkYXRlZCBhcyBuZWVkZWQsIGFuZCBf YnRfcmV0dXJuaXRlbQotICoJCXNldHMgdGhlIG5leHQgaXRlbSB0byByZXR1cm4gdG8gdGhlIHNj YW4uICBzby0+Y3VyclBvcyByZW1haW5zIHZhbGlkLgotICoKLSAqCQlPbiBmYWlsdXJlIGV4aXQg KG5vIG1vcmUgdHVwbGVzKSwgd2UgaW52YWxpZGF0ZSBzby0+Y3VyclBvcy4gIEl0J2xsCi0gKgkJ c3RpbGwgYmUgcG9zc2libGUgZm9yIHRoZSBzY2FuIHRvIHJldHVybiB0dXBsZXMgYnkgY2hhbmdp bmcgZGlyZWN0aW9uLAotICoJCXRob3VnaCB3ZSdsbCBuZWVkIHRvIGNhbGwgX2J0X2ZpcnN0IGFu ZXcgaW4gdGhhdCBvdGhlciBkaXJlY3Rpb24uCisgKgkJT24gc3VjY2VzcyBleGl0LCByZXR1cm5z IHRoZSBuZXh0IGJhdGNoLiAgVGhlcmUgbXVzdCBiZSBhdCBsZWFzdCBvbmUKKyAqCQltYXRjaGlu ZyB0dXBsZSBvbiBhbnkgcmV0dXJuZWQgYmF0Y2ggKGVsc2Ugd2UnZCBqdXN0IHJldHVybiBOVUxM KS4KKyAqCQlOb3RlIHRoYXQgcmV0dXJuaW5nIE5VTEwgZG9lc24ndCBuZWNlc3NhcmlseSBtZWFu IHRoZSBlbmQgb2YgdGhlCisgKgkJdG9wLWxldmVsIHNjYW47IGNhbGxlciBzaG91bGQgY2hlY2sg c28tPm5lZWRQcmltU2NhbiB0byBkZXRlcm1pbmUKKyAqCQlpZiBhbm90aGVyIHByaW1pdGl2ZSBp bmRleCBzY2FuIGlzIHJlcXVpcmVkLgogICovCi1ib29sCi1fYnRfbmV4dChJbmRleFNjYW5EZXNj IHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyKQorSW5kZXhTY2FuQmF0Y2gKK19idF9uZXh0KEluZGV4 U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIsIEluZGV4U2NhbkJhdGNoIHByaW9yYmF0 Y2gpCiB7Ci0JQlRTY2FuT3BhcXVlIHNvID0gKEJUU2Nhbk9wYXF1ZSkgc2Nhbi0+b3BhcXVlOwot Ci0JQXNzZXJ0KEJUU2NhblBvc0lzVmFsaWQoc28tPmN1cnJQb3MpKTsKLQotCS8qCi0JICogQWR2 YW5jZSB0byBuZXh0IHR1cGxlIG9uIGN1cnJlbnQgcGFnZTsgb3IgaWYgdGhlcmUncyBubyBtb3Jl LCB0cnkgdG8KLQkgKiBzdGVwIHRvIHRoZSBuZXh0IHBhZ2Ugd2l0aCBkYXRhLgotCSAqLwotCWlm IChTY2FuRGlyZWN0aW9uSXNGb3J3YXJkKGRpcikpCi0JewotCQlpZiAoKytzby0+Y3VyclBvcy5p dGVtSW5kZXggPiBzby0+Y3VyclBvcy5sYXN0SXRlbSkKLQkJewotCQkJaWYgKCFfYnRfc3RlcHBh Z2Uoc2NhbiwgZGlyKSkKLQkJCQlyZXR1cm4gZmFsc2U7Ci0JCX0KLQl9Ci0JZWxzZQotCXsKLQkJ aWYgKC0tc28tPmN1cnJQb3MuaXRlbUluZGV4IDwgc28tPmN1cnJQb3MuZmlyc3RJdGVtKQotCQl7 Ci0JCQlpZiAoIV9idF9zdGVwcGFnZShzY2FuLCBkaXIpKQotCQkJCXJldHVybiBmYWxzZTsKLQkJ fQotCX0KLQotCV9idF9yZXR1cm5pdGVtKHNjYW4sIHNvKTsKLQlyZXR1cm4gdHJ1ZTsKLX0KLQot LyoKLSAqIFJldHVybiB0aGUgaW5kZXggaXRlbSBmcm9tIHNvLT5jdXJyUG9zLml0ZW1zW3NvLT5j dXJyUG9zLml0ZW1JbmRleF0gdG8gdGhlCi0gKiBpbmRleCBzY2FuIGJ5IHNldHRpbmcgdGhlIHJl bGV2YW50IGZpZWxkcyBpbiBjYWxsZXIncyBpbmRleCBzY2FuIGRlc2NyaXB0b3IKLSAqLwotc3Rh dGljIGlubGluZSB2b2lkCi1fYnRfcmV0dXJuaXRlbShJbmRleFNjYW5EZXNjIHNjYW4sIEJUU2Nh bk9wYXF1ZSBzbykKLXsKLQlCVFNjYW5Qb3NJdGVtICpjdXJySXRlbSA9ICZzby0+Y3VyclBvcy5p dGVtc1tzby0+Y3VyclBvcy5pdGVtSW5kZXhdOwotCi0JLyogTW9zdCByZWNlbnQgX2J0X3JlYWRw YWdlIG11c3QgaGF2ZSBzdWNjZWVkZWQgKi8KLQlBc3NlcnQoQlRTY2FuUG9zSXNWYWxpZChzby0+ Y3VyclBvcykpOwotCUFzc2VydChzby0+Y3VyclBvcy5pdGVtSW5kZXggPj0gc28tPmN1cnJQb3Mu Zmlyc3RJdGVtKTsKLQlBc3NlcnQoc28tPmN1cnJQb3MuaXRlbUluZGV4IDw9IHNvLT5jdXJyUG9z Lmxhc3RJdGVtKTsKLQotCS8qIFJldHVybiBuZXh0IGl0ZW0sIHBlciBhbWdldHR1cGxlIGNvbnRy YWN0ICovCi0Jc2Nhbi0+eHNfaGVhcHRpZCA9IGN1cnJJdGVtLT5oZWFwVGlkOwotCWlmIChzby0+ Y3VyclR1cGxlcykKLQkJc2Nhbi0+eHNfaXR1cCA9IChJbmRleFR1cGxlKSAoc28tPmN1cnJUdXBs ZXMgKyBjdXJySXRlbS0+dHVwbGVPZmZzZXQpOwotfQotCi0vKgotICoJX2J0X3N0ZXBwYWdlKCkg LS0gU3RlcCB0byBuZXh0IHBhZ2UgY29udGFpbmluZyB2YWxpZCBkYXRhIGZvciBzY2FuCi0gKgot ICogV3JhcHBlciBvbiBfYnRfcmVhZG5leHRwYWdlIHRoYXQgcGVyZm9ybXMgZmluYWwgc3RlcHMg Zm9yIHRoZSBjdXJyZW50IHBhZ2UuCi0gKgotICogT24gZW50cnksIHNvLT5jdXJyUG9zIG11c3Qg YmUgdmFsaWQuICBJdHMgYnVmZmVyIHdpbGwgYmUgcGlubmVkLCB0aG91Z2gKLSAqIG5ldmVyIGxv Y2tlZC4gKEFjdHVhbGx5LCB3aGVuIHNvLT5kcm9wUGluIHRoZXJlIHdvbid0IGV2ZW4gYmUgYSBw aW4gaGVsZCwKLSAqIHRob3VnaCBzby0+Y3VyclBvcy5jdXJyUGFnZSBtdXN0IHN0aWxsIGJlIHNl dCB0byBhIHZhbGlkIGJsb2NrIG51bWJlci4pCi0gKi8KLXN0YXRpYyBib29sCi1fYnRfc3RlcHBh Z2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcikKLXsKLQlCVFNjYW5PcGFx dWUgc28gPSAoQlRTY2FuT3BhcXVlKSBzY2FuLT5vcGFxdWU7CisJQlRCYXRjaERhdGEgKmJ0cHJp b3JiYXRjaCA9IEJUQmF0Y2hHZXREYXRhKHNjYW4sIHByaW9yYmF0Y2gpOwogCUJsb2NrTnVtYmVy IGJsa25vLAogCQkJCWxhc3RjdXJyYmxrbm87Ci0KLQlBc3NlcnQoQlRTY2FuUG9zSXNWYWxpZChz by0+Y3VyclBvcykpOwotCi0JLyogQmVmb3JlIGxlYXZpbmcgY3VycmVudCBwYWdlLCBkZWFsIHdp dGggYW55IGtpbGxlZCBpdGVtcyAqLwotCWlmIChzby0+bnVtS2lsbGVkID4gMCkKLQkJX2J0X2tp bGxpdGVtcyhzY2FuKTsKKwlib29sCQltb3JlSW5EaXI7CiAKIAkvKgotCSAqIEJlZm9yZSB3ZSBt b2RpZnkgY3VyclBvcywgbWFrZSBhIGNvcHkgb2YgdGhlIHBhZ2UgZGF0YSBpZiB0aGVyZSB3YXMg YQotCSAqIG1hcmsgcG9zaXRpb24gdGhhdCBuZWVkcyBpdC4KKwkgKiBUaGUgY29yZSBjb2RlIG11 c3QgZGVhbCB3aXRoIGNyb3NzLWJhdGNoIHNjYW4gZGlyZWN0aW9uIGNoYW5nZXMgZm9yIHVzLgor CSAqIEEgYmF0Y2ggbWFuYWdlbWVudCByb3V0aW5lIHRoYXQgZmxpcHMgcHJpb3JiYXRjaCdzIHNj YW4gZGlyZWN0aW9uIChhbmQKKwkgKiBjYWxscyBidHBvc3Jlc2V0IHRvIGRlYWwgd2l0aCB0aGUg c2NhbidzIGFycmF5IGtleXMpIGlzIHVzZWQgZm9yIHRoaXMuCiAJICovCi0JaWYgKHNvLT5tYXJr SXRlbUluZGV4ID49IDApCi0JewotCQkvKiBidW1wIHBpbiBvbiBjdXJyZW50IGJ1ZmZlciBmb3Ig YXNzaWdubWVudCB0byBtYXJrIGJ1ZmZlciAqLwotCQlpZiAoQlRTY2FuUG9zSXNQaW5uZWQoc28t PmN1cnJQb3MpKQotCQkJSW5jckJ1ZmZlclJlZkNvdW50KHNvLT5jdXJyUG9zLmJ1Zik7Ci0JCW1l bWNweSgmc28tPm1hcmtQb3MsICZzby0+Y3VyclBvcywKLQkJCSAgIG9mZnNldG9mKEJUU2NhblBv c0RhdGEsIGl0ZW1zWzFdKSArCi0JCQkgICBzby0+Y3VyclBvcy5sYXN0SXRlbSAqIHNpemVvZihC VFNjYW5Qb3NJdGVtKSk7Ci0JCWlmIChzby0+bWFya1R1cGxlcykKLQkJCW1lbWNweShzby0+bWFy a1R1cGxlcywgc28tPmN1cnJUdXBsZXMsCi0JCQkJICAgc28tPmN1cnJQb3MubmV4dFR1cGxlT2Zm c2V0KTsKLQkJc28tPm1hcmtQb3MuaXRlbUluZGV4ID0gc28tPm1hcmtJdGVtSW5kZXg7Ci0JCXNv LT5tYXJrSXRlbUluZGV4ID0gLTE7Ci0KLQkJLyoKLQkJICogSWYgd2UncmUganVzdCBhYm91dCB0 byBzdGFydCB0aGUgbmV4dCBwcmltaXRpdmUgaW5kZXggc2NhbgotCQkgKiAocG9zc2libGUgd2l0 aCBhIHNjYW4gdGhhdCBoYXMgYXJyYXlzIGtleXMsIGFuZCBuZWVkcyB0byBza2lwIHRvCi0JCSAq IGNvbnRpbnVlIGluIHRoZSBjdXJyZW50IHNjYW4gZGlyZWN0aW9uKSwgbW9yZUxlZnQvbW9yZVJp Z2h0IG9ubHkKLQkJICogaW5kaWNhdGUgdGhlIGVuZCBvZiB0aGUgY3VycmVudCBwcmltaXRpdmUg aW5kZXggc2Nhbi4gIFRoZXkgbXVzdAotCQkgKiBuZXZlciBiZSB0YWtlbiB0byBpbmRpY2F0ZSB0 aGF0IHRoZSB0b3AtbGV2ZWwgaW5kZXggc2NhbiBoYXMgZW5kZWQKLQkJICogKHRoYXQgd291bGQg YmUgd3JvbmcpLgotCQkgKgotCQkgKiBXZSBjb3VsZCBoYW5kbGUgdGhpcyBjYXNlIGJ5IHRyZWF0 aW5nIHRoZSBjdXJyZW50IGFycmF5IGtleXMgYXMKLQkJICogbWFya1BvcyBzdGF0ZS4gIEJ1dCBk ZXBlbmRpbmcgb24gdGhlIGN1cnJlbnQgYXJyYXkgc3RhdGUgbGlrZSB0aGlzCi0JCSAqIHdvdWxk IGFkZCBjb21wbGV4aXR5LiAgSW5zdGVhZCwgd2UganVzdCB1bnNldCBtYXJrUG9zJ3MgY29weSBv ZgotCQkgKiBtb3JlUmlnaHQgb3IgbW9yZUxlZnQgKHdoaWNoZXZlciBtaWdodCBiZSBhZmZlY3Rl ZCksIHdoaWxlIG1ha2luZwotCQkgKiBidHJlc3RycG9zIHJlc2V0IHRoZSBzY2FuJ3MgYXJyYXlz IHRvIHRoZWlyIGluaXRpYWwgc2NhbiBwb3NpdGlvbnMuCi0JCSAqIEluIGVmZmVjdCwgYnRyZXN0 cnBvcyBsZWF2ZXMgYWR2YW5jaW5nIHRoZSBhcnJheXMgdXAgdG8gdGhlIGZpcnN0Ci0JCSAqIF9i dF9yZWFkcGFnZSBjYWxsICh0aGF0IHRha2VzIHBsYWNlIGFmdGVyIGl0IGhhcyByZXN0b3JlZCBt YXJrUG9zKS4KLQkJICovCi0JCWlmIChzby0+bmVlZFByaW1TY2FuKQotCQl7Ci0JCQlpZiAoU2Nh bkRpcmVjdGlvbklzRm9yd2FyZChzby0+Y3VyclBvcy5kaXIpKQotCQkJCXNvLT5tYXJrUG9zLm1v cmVSaWdodCA9IHRydWU7Ci0JCQllbHNlCi0JCQkJc28tPm1hcmtQb3MubW9yZUxlZnQgPSB0cnVl OwotCQl9Ci0KLQkJLyogbWFyay9yZXN0b3JlIG5vdCBzdXBwb3J0ZWQgYnkgcGFyYWxsZWwgc2Nh bnMgKi8KLQkJQXNzZXJ0KCFzY2FuLT5wYXJhbGxlbF9zY2FuKTsKLQl9Ci0KLQlCVFNjYW5Qb3NV bnBpbklmUGlubmVkKHNvLT5jdXJyUG9zKTsKKwlBc3NlcnQocHJpb3JiYXRjaC0+ZGlyID09IGRp cik7CiAKIAkvKiBXYWxrIHRvIHRoZSBuZXh0IHBhZ2Ugd2l0aCBkYXRhICovCiAJaWYgKFNjYW5E aXJlY3Rpb25Jc0ZvcndhcmQoZGlyKSkKLQkJYmxrbm8gPSBzby0+Y3VyclBvcy5uZXh0UGFnZTsK KwkJYmxrbm8gPSBidHByaW9yYmF0Y2gtPm5leHRQYWdlOwogCWVsc2UKLQkJYmxrbm8gPSBzby0+ Y3VyclBvcy5wcmV2UGFnZTsKLQlsYXN0Y3VycmJsa25vID0gc28tPmN1cnJQb3MuY3VyclBhZ2U7 CisJCWJsa25vID0gYnRwcmlvcmJhdGNoLT5wcmV2UGFnZTsKKwlsYXN0Y3VycmJsa25vID0gYnRw cmlvcmJhdGNoLT5jdXJyUGFnZTsKKwltb3JlSW5EaXIgPSBTY2FuRGlyZWN0aW9uSXNGb3J3YXJk KGRpcikgPworCQlidHByaW9yYmF0Y2gtPm1vcmVSaWdodCA6IGJ0cHJpb3JiYXRjaC0+bW9yZUxl ZnQ7CiAKIAkvKgotCSAqIENhbmNlbCBwcmltaXRpdmUgaW5kZXggc2NhbnMgdGhhdCB3ZXJlIHNj aGVkdWxlZCB3aGVuIHRoZSBjYWxsIHRvCi0JICogX2J0X3JlYWRwYWdlIGZvciBjdXJyUG9zIGhh cHBlbmVkIHRvIHVzZSB0aGUgb3Bwb3NpdGUgZGlyZWN0aW9uIHRvIHRoZQotCSAqIG9uZSB0aGF0 IHdlJ3JlIHN0ZXBwaW5nIGluIG5vdy4gIChJdCdzIG9rYXkgdG8gbGVhdmUgdGhlIHNjYW4ncyBh cnJheQotCSAqIGtleXMgYXMtaXMsIHNpbmNlIHRoZSBuZXh0IF9idF9yZWFkcGFnZSB3aWxsIGFk dmFuY2UgdGhlbS4pCisJICogRm9yIGJpdG1hcCBzY2FuIGNhbGxlcnMsIHJlbGVhc2UgdGhlIHBy aW9yIGJhdGNoIG5vdyBzbyB0aGF0CisJICogX2J0X3JlYWRuZXh0cGFnZSBjYW4gcmV1c2UgaXRz IG1lbW9yeS4gIFRoYXQgd2F5IGJpdG1hcCBzY2FucyBuZXZlcgorCSAqIG5lZWQgbW9yZSB0aGFu IG9uZSBiYXRjaCBhbGxvY2F0aW9uLgogCSAqLwotCWlmIChzby0+Y3VyclBvcy5kaXIgIT0gZGly KQotCQlzby0+bmVlZFByaW1TY2FuID0gZmFsc2U7CisJaWYgKCFzY2FuLT51c2ViYXRjaHJpbmcp CisJCWluZGV4YW1fdXRpbF9iYXRjaF9yZWxlYXNlKHNjYW4sIHByaW9yYmF0Y2gpOworCisJaWYg KGJsa25vID09IFBfTk9ORSB8fCAhbW9yZUluRGlyKQorCXsKKwkJLyoKKwkJICogcHJpb3JiYXRj aCdzIHBhZ2UgaXMga25vd24gdG8gYmUgdGhlIGZpbmFsIGxlYWYgcGFnZSB3aXRoIG1hdGNoZXMK KwkJICogaW4gdGhpcyBzY2FuIGRpcmVjdGlvbiAoaXRzIF9idF9yZWFkcGFnZSBjYWxsIGZpZ3Vy ZWQgdGhhdCBvdXQpLgorCQkgKgorCQkgKiBOb3RlOiBpZiBzby0+bmVlZFByaW1TY2FuIGlzIHNl dCwgdGhlbiBwcmlvcmJhdGNoJ3MgbGVhZiBwYWdlIGlzCisJCSAqIGFjdHVhbGx5IGp1c3QgdGhl IGZpbmFsIHBhZ2UgZm9yIHRoZSBjdXJyZW50IHByaW1pdGl2ZSBpbmRleCBzY2FuCisJCSAqIGlu IHRoaXMgc2NhbiBkaXJlY3Rpb24gKHRoZSBzY2FuIHdpbGwgY29udGludWUgaW4gX2J0X2ZpcnN0 KS4KKwkJICovCisJCV9idF9wYXJhbGxlbF9kb25lKHNjYW4pOworCQlyZXR1cm4gTlVMTDsKKwl9 CisKKwkvKiBwYXJhbGxlbCBzY2FuIG11c3Qgc2VpemUgdGhlIHNjYW4gdG8gZ2V0IG5leHQgYmxr bm8gKi8KKwlpZiAoc2Nhbi0+cGFyYWxsZWxfc2NhbiAhPSBOVUxMICYmCisJCSFfYnRfcGFyYWxs ZWxfc2VpemUoc2NhbiwgJmJsa25vLCAmbGFzdGN1cnJibGtubywgZmFsc2UpKQorCQlyZXR1cm4g TlVMTDsJCQkvKiBkb25lIGlmZiBzby0+bmVlZFByaW1TY2FuIHdhc24ndCBzZXQgKi8KIAogCXJl dHVybiBfYnRfcmVhZG5leHRwYWdlKHNjYW4sIGJsa25vLCBsYXN0Y3VycmJsa25vLCBkaXIsIGZh bHNlKTsKIH0KQEAgLTE3MzIsMTc4ICsxNjQyLDE2OSBAQCBfYnRfc3RlcHBhZ2UoSW5kZXhTY2Fu RGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcikKICAqIHRvIHN0b3AgdGhlIHNjYW4gb24gdGhp cyBwYWdlIGJ5IGNhbGxpbmcgX2J0X2NoZWNra2V5cyBhZ2FpbnN0IHRoZSBoaWdoCiAgKiBrZXku ICBTZWUgX2J0X3JlYWRwYWdlIGZvciBmdWxsIGRldGFpbHMuCiAgKgotICogT24gZW50cnksIHNv LT5jdXJyUG9zIG11c3QgYmUgcGlubmVkIGFuZCBsb2NrZWQgKHNvIG9mZm51bSBzdGF5cyB2YWxp ZCkuCisgKiBPbiBlbnRyeSwgZmlyc3RiYXRjaCBtdXN0IGJlIHBpbm5lZCBhbmQgbG9ja2VkIChz byBvZmZudW0gc3RheXMgdmFsaWQpLgogICogUGFyYWxsZWwgc2NhbiBjYWxsZXJzIG11c3QgaGF2 ZSBzZWl6ZWQgdGhlIHNjYW4gYmVmb3JlIGNhbGxpbmcgaGVyZS4KICAqCi0gKiBPbiBleGl0LCB3 ZSdsbCBoYXZlIHVwZGF0ZWQgc28tPmN1cnJQb3MgYW5kIHJldGFpbmVkIGxvY2tzIGFuZCBwaW5z Ci0gKiBhY2NvcmRpbmcgdG8gdGhlIHNhbWUgcnVsZXMgYXMgdGhvc2UgbGFpZCBvdXQgZm9yIF9i dF9yZWFkbmV4dHBhZ2UgZXhpdC4KLSAqIExpa2UgX2J0X3JlYWRuZXh0cGFnZSwgb3VyIHJldHVy biB2YWx1ZSBpbmRpY2F0ZXMgaWYgdGhlcmUgYXJlIGFueSBtYXRjaGluZwotICogcmVjb3JkcyBp biB0aGUgZ2l2ZW4gZGlyZWN0aW9uLgorICogT24gc3VjY2VzcyBleGl0LCByZXR1cm5zIHVubG9j a2VkIGJhdGNoIGNvbnRhaW5pbmcgZGF0YSBmcm9tIHRoZSBuZXh0IHBhZ2UKKyAqIHRoYXQgaGFz IGF0IGxlYXN0IG9uZSBtYXRjaGluZyBpdGVtLiAgSWYgdGhlcmUgYXJlIG5vIG1hdGNoaW5nIGl0 ZW1zIGluIHRoZQorICogZ2l2ZW4gc2NhbiBkaXJlY3Rpb24sIHdlIGp1c3QgcmV0dXJuIE5VTEwu ICBOb3RlIHRoYXQgcmV0dXJuaW5nIE5VTEwKKyAqIGRvZXNuJ3QgbmVjZXNzYXJpbHkgbWVhbiB0 aGUgZW5kIG9mIHRoZSB0b3AtbGV2ZWwgc2NhbjsgYnRnZXRiYXRjaCBhbmQKKyAqIGJ0Z2V0Yml0 bWFwIGNoZWNrIHNvLT5uZWVkUHJpbVNjYW4gdG8gZGV0ZXJtaW5lIGlmIGFub3RoZXIgcHJpbWl0 aXZlIGluZGV4CisgKiBzY2FuIGlzIHJlcXVpcmVkLgogICoKICAqIFdlIGFsd2F5cyByZWxlYXNl IHRoZSBzY2FuIGZvciBhIHBhcmFsbGVsIHNjYW4gY2FsbGVyLCByZWdhcmRsZXNzIG9mCiAgKiBz dWNjZXNzIG9yIGZhaWx1cmU7IHdlJ2xsIGNhbGwgX2J0X3BhcmFsbGVsX3JlbGVhc2UgYXMgc29v biBhcyBwb3NzaWJsZS4KICAqLwotc3RhdGljIGJvb2wKLV9idF9yZWFkZmlyc3RwYWdlKEluZGV4 U2NhbkRlc2Mgc2NhbiwgT2Zmc2V0TnVtYmVyIG9mZm51bSwgU2NhbkRpcmVjdGlvbiBkaXIpCitz dGF0aWMgSW5kZXhTY2FuQmF0Y2gKK19idF9yZWFkZmlyc3RwYWdlKEluZGV4U2NhbkRlc2Mgc2Nh biwgSW5kZXhTY2FuQmF0Y2ggZmlyc3RiYXRjaCwKKwkJCQkgIE9mZnNldE51bWJlciBvZmZudW0s IFNjYW5EaXJlY3Rpb24gZGlyKQogewogCUJUU2Nhbk9wYXF1ZSBzbyA9IChCVFNjYW5PcGFxdWUp IHNjYW4tPm9wYXF1ZTsKKwlCVEJhdGNoRGF0YSAqYnRmaXJzdGJhdGNoID0gQlRCYXRjaEdldERh dGEoc2NhbiwgZmlyc3RiYXRjaCk7CisJQmxvY2tOdW1iZXIgYmxrbm8sCisJCQkJbGFzdGN1cnJi bGtubzsKKwlib29sCQltb3JlSW5EaXI7CiAKLQlzby0+bnVtS2lsbGVkID0gMDsJCQkvKiBqdXN0 IHBhcmFub2lhICovCi0Jc28tPm1hcmtJdGVtSW5kZXggPSAtMTsJCS8qIGRpdHRvICovCi0KLQkv KiBJbml0aWFsaXplIHNvLT5jdXJyUG9zIGZvciB0aGUgZmlyc3QgcGFnZSAocGFnZSBpbiBzby0+ Y3VyclBvcy5idWYpICovCisJLyogSW5pdGlhbGl6ZSBmaXJzdGJhdGNoJ3MgcG9zaXRpb24gZm9y IHRoZSBmaXJzdCBwYWdlICovCiAJaWYgKHNvLT5uZWVkUHJpbVNjYW4pCiAJewogCQlBc3NlcnQo c28tPm51bUFycmF5S2V5cyk7CiAKLQkJc28tPmN1cnJQb3MubW9yZUxlZnQgPSB0cnVlOwotCQlz by0+Y3VyclBvcy5tb3JlUmlnaHQgPSB0cnVlOworCQlidGZpcnN0YmF0Y2gtPm1vcmVMZWZ0ID0g dHJ1ZTsKKwkJYnRmaXJzdGJhdGNoLT5tb3JlUmlnaHQgPSB0cnVlOwogCQlzby0+bmVlZFByaW1T Y2FuID0gZmFsc2U7CiAJfQogCWVsc2UgaWYgKFNjYW5EaXJlY3Rpb25Jc0ZvcndhcmQoZGlyKSkK IAl7Ci0JCXNvLT5jdXJyUG9zLm1vcmVMZWZ0ID0gZmFsc2U7Ci0JCXNvLT5jdXJyUG9zLm1vcmVS aWdodCA9IHRydWU7CisJCWJ0Zmlyc3RiYXRjaC0+bW9yZUxlZnQgPSBmYWxzZTsKKwkJYnRmaXJz dGJhdGNoLT5tb3JlUmlnaHQgPSB0cnVlOwogCX0KIAllbHNlCiAJewotCQlzby0+Y3VyclBvcy5t b3JlTGVmdCA9IHRydWU7Ci0JCXNvLT5jdXJyUG9zLm1vcmVSaWdodCA9IGZhbHNlOworCQlidGZp cnN0YmF0Y2gtPm1vcmVMZWZ0ID0gdHJ1ZTsKKwkJYnRmaXJzdGJhdGNoLT5tb3JlUmlnaHQgPSBm YWxzZTsKIAl9CiAKIAkvKgogCSAqIEF0dGVtcHQgdG8gbG9hZCBtYXRjaGluZyB0dXBsZXMgZnJv bSB0aGUgZmlyc3QgcGFnZS4KIAkgKgotCSAqIE5vdGUgdGhhdCBfYnRfcmVhZHBhZ2Ugd2lsbCBm aW5pc2ggaW5pdGlhbGl6aW5nIHRoZSBzby0+Y3VyclBvcyBmaWVsZHMuCisJICogTm90ZSB0aGF0 IF9idF9yZWFkcGFnZSB3aWxsIGZpbmlzaCBpbml0aWFsaXppbmcgdGhlIGZpcnN0YmF0Y2ggZmll bGRzLgogCSAqIF9idF9yZWFkcGFnZSBhbHNvIHJlbGVhc2VzIHBhcmFsbGVsIHNjYW4gKGV2ZW4g d2hlbiBpdCByZXR1cm5zIGZhbHNlKS4KIAkgKi8KLQlpZiAoX2J0X3JlYWRwYWdlKHNjYW4sIGRp ciwgb2ZmbnVtLCB0cnVlKSkKKwlpZiAoX2J0X3JlYWRwYWdlKHNjYW4sIGZpcnN0YmF0Y2gsIGRp ciwgb2ZmbnVtLCB0cnVlKSkKIAl7Ci0JCVJlbGF0aW9uCXJlbCA9IHNjYW4tPmluZGV4UmVsYXRp b247Ci0KLQkJLyoKLQkJICogX2J0X3JlYWRwYWdlIHN1Y2NlZWRlZC4gIERyb3AgdGhlIGxvY2sg KGFuZCBtYXliZSB0aGUgcGluKSBvbgotCQkgKiBzby0+Y3VyclBvcy5idWYgaW4gcHJlcGFyYXRp b24gZm9yIGJ0Z2V0dHVwbGUgcmV0dXJuaW5nIHR1cGxlcy4KLQkJICovCi0JCUFzc2VydChCVFNj YW5Qb3NJc1Bpbm5lZChzby0+Y3VyclBvcykpOwotCQlfYnRfZHJvcF9sb2NrX2FuZF9tYXliZV9w aW4ocmVsLCBzbyk7Ci0JCXJldHVybiB0cnVlOworCQkvKiBfYnRfcmVhZHBhZ2Ugc2F2ZWQgb25l IG9yIG1vcmUgbWF0Y2hlcyBpbiBmaXJzdGJhdGNoLml0ZW1zW10gKi8KKwkJX2J0X2JhdGNoX3Vu bG9jayhzY2FuLCBmaXJzdGJhdGNoLCBidGZpcnN0YmF0Y2gtPmJ1Zik7CisJCXJldHVybiBmaXJz dGJhdGNoOwogCX0KIAotCS8qIFRoZXJlJ3Mgbm8gYWN0dWFsbHktbWF0Y2hpbmcgZGF0YSBvbiB0 aGUgcGFnZSBpbiBzby0+Y3VyclBvcy5idWYgKi8KLQlfYnRfdW5sb2NrYnVmKHNjYW4tPmluZGV4 UmVsYXRpb24sIHNvLT5jdXJyUG9zLmJ1Zik7CisJLyogVGhlcmUncyBubyBhY3R1YWxseS1tYXRj aGluZyBkYXRhIG9uIHRoZSBwYWdlIHJldHVybmVkIGJ5IF9idF9zZWFyY2ggKi8KKwlfYnRfcmVs YnVmKHNjYW4tPmluZGV4UmVsYXRpb24sIGJ0Zmlyc3RiYXRjaC0+YnVmKTsKIAotCS8qIENhbGwg X2J0X3JlYWRuZXh0cGFnZSB1c2luZyBpdHMgX2J0X3N0ZXBwYWdlIHdyYXBwZXIgZnVuY3Rpb24g Ki8KLQlpZiAoIV9idF9zdGVwcGFnZShzY2FuLCBkaXIpKQotCQlyZXR1cm4gZmFsc2U7CisJLyog V2FsayB0byB0aGUgbmV4dCBwYWdlIHdpdGggZGF0YSAqLworCWlmIChTY2FuRGlyZWN0aW9uSXNG b3J3YXJkKGRpcikpCisJCWJsa25vID0gYnRmaXJzdGJhdGNoLT5uZXh0UGFnZTsKKwllbHNlCisJ CWJsa25vID0gYnRmaXJzdGJhdGNoLT5wcmV2UGFnZTsKKwlsYXN0Y3VycmJsa25vID0gYnRmaXJz dGJhdGNoLT5jdXJyUGFnZTsKKwltb3JlSW5EaXIgPSBTY2FuRGlyZWN0aW9uSXNGb3J3YXJkKGRp cikgPworCQlidGZpcnN0YmF0Y2gtPm1vcmVSaWdodCA6IGJ0Zmlyc3RiYXRjaC0+bW9yZUxlZnQ7 CiAKLQkvKiBfYnRfcmVhZHBhZ2UgZm9yIGEgbGF0ZXIgcGFnZSAobm93IGluIHNvLT5jdXJyUG9z KSBzdWNjZWVkZWQgKi8KLQlyZXR1cm4gdHJ1ZTsKKwkvKiBSZWxlYXNlIGZpcnN0YmF0Y2ggKHdp bGwgYmUgcmVjeWNsZWQgaWYgd2UgcmVhY2ggX2J0X3JlYWRuZXh0cGFnZSkgKi8KKwlpbmRleGFt X3V0aWxfYmF0Y2hfcmVsZWFzZShzY2FuLCBmaXJzdGJhdGNoKTsKKworCWlmIChibGtubyA9PSBQ X05PTkUgfHwgIW1vcmVJbkRpcikKKwl7CisJCS8qCisJCSAqIGZpcnN0YmF0Y2ggX2J0X3JlYWRw YWdlIGNhbGwgZW5kZWQgc2NhbiBpbiB0aGlzIGRpcmVjdGlvbiAodGhvdWdoCisJCSAqIGlmIHNv LT5uZWVkUHJpbVNjYW4gd2FzIHNldCB0aGUgc2NhbiB3aWxsIGNvbnRpbnVlIGluIF9idF9maXJz dCkKKwkJICovCisJCV9idF9wYXJhbGxlbF9kb25lKHNjYW4pOworCQlyZXR1cm4gTlVMTDsKKwl9 CisKKwkvKiBwYXJhbGxlbCBzY2FuIG11c3Qgc2VpemUgdGhlIHNjYW4gdG8gZ2V0IG5leHQgYmxr bm8gKi8KKwlpZiAoc2Nhbi0+cGFyYWxsZWxfc2NhbiAhPSBOVUxMICYmCisJCSFfYnRfcGFyYWxs ZWxfc2VpemUoc2NhbiwgJmJsa25vLCAmbGFzdGN1cnJibGtubywgZmFsc2UpKQorCQlyZXR1cm4g TlVMTDsJCQkvKiBkb25lIGlmZiBzby0+bmVlZFByaW1TY2FuIHdhc24ndCBzZXQgKi8KKworCXJl dHVybiBfYnRfcmVhZG5leHRwYWdlKHNjYW4sIGJsa25vLCBsYXN0Y3VycmJsa25vLCBkaXIsIGZh bHNlKTsKIH0KIAogLyoKICAqCV9idF9yZWFkbmV4dHBhZ2UoKSAtLSBSZWFkIG5leHQgcGFnZSBj b250YWluaW5nIHZhbGlkIGRhdGEgZm9yIF9idF9uZXh0CiAgKgotICogQ2FsbGVyJ3MgYmxrbm8g aXMgdGhlIG5leHQgaW50ZXJlc3RpbmcgcGFnZSdzIGxpbmssIHRha2VuIGZyb20gZWl0aGVyIHRo ZQotICogcHJldmlvdXNseS1zYXZlZCByaWdodCBsaW5rIG9yIGxlZnQgbGluay4gIGxhc3RjdXJy Ymxrbm8gaXMgdGhlIHBhZ2UgdGhhdAotICogd2FzIGN1cnJlbnQgYXQgdGhlIHBvaW50IHdoZXJl IHRoZSBibGtubyBsaW5rIHdhcyBzYXZlZCwgd2hpY2ggd2UgdXNlIHRvCi0gKiByZWFzb24gYWJv dXQgY29uY3VycmVudCBwYWdlIHNwbGl0cy9wYWdlIGRlbGV0aW9ucyBkdXJpbmcgYmFja3dhcmRz IHNjYW5zLgotICogSW4gdGhlIGNvbW1vbiBjYXNlIHdoZXJlIHNlaXplZD1mYWxzZSwgYmxrbm8g aXMgZWl0aGVyIHNvLT5jdXJyUG9zLm5leHRQYWdlCi0gKiBvciBzby0+Y3VyclBvcy5wcmV2UGFn ZSwgYW5kIGxhc3RjdXJyYmxrbm8gaXMgc28tPmN1cnJQb3MuY3VyclBhZ2UuCisgKiBDYWxsZXIn cyBibGtubyBpcyB0aGUgcHJpb3IgYmF0Y2gncyBuZXh0UGFnZSBvciBwcmV2UGFnZSAoZGVwZW5k aW5nIG9uIHRoZQorICogY3VycmVudCBzY2FuIGRpcmVjdGlvbiksIGFuZCBsYXN0Y3VycmJsa25v IGlzIHRoZSBwcmlvciBiYXRjaCdzIGN1cnJQYWdlLgorICogV2UgdXNlIGxhc3RjdXJyYmxrbm8g dG8gcmVhc29uIGFib3V0IGNvbmN1cnJlbnQgcGFnZSBzcGxpdHMvcGFnZSBkZWxldGlvbnMKKyAq IGR1cmluZyBiYWNrd2FyZHMgc2NhbnMuCiAgKgotICogT24gZW50cnksIHNvLT5jdXJyUG9zIHNo b3VsZG4ndCBiZSBsb2NrZWQgYnkgY2FsbGVyLiAgc28tPmN1cnJQb3MuYnVmIG11c3QKLSAqIGJl IEludmFsaWRCdWZmZXIvdW5waW5uZWQgYXMgbmVlZGVkIGJ5IGNhbGxlciAobm90ZSB0aGF0IGxh c3RjdXJyYmxrbm8KLSAqIHdvbid0IG5lZWQgdG8gYmUgcmVhZCBhZ2FpbiBpbiBhbG1vc3QgYWxs IGNhc2VzKS4gIFBhcmFsbGVsIHNjYW4gY2FsbGVycwotICogdGhhdCBzZWl6ZWQgdGhlIHNjYW4g YmVmb3JlIGNhbGxpbmcgaGVyZSBzaG91bGQgcGFzcyBzZWl6ZWQ9dHJ1ZTsgc3VjaCBhCi0gKiBj YWxsZXIncyBibGtubyBhbmQgbGFzdGN1cnJibGtubyBhcmd1bWVudHMgY29tZSBmcm9tIHRoZSBz ZWl6ZWQgc2Nhbi4KLSAqIHNlaXplZD1mYWxzZSBjYWxsZXJzIGp1c3QgcGFzcyB1cyB0aGUgYmxr bm8vbGFzdGN1cnJibGtubyB0YWtlbiBmcm9tIHRoZWlyCi0gKiBzby0+Y3VyclBvcywgd2hpY2gg KGFsb25nIHdpdGggc28tPmN1cnJQb3MgaXRzZWxmKSBjYW4gYmUgdXNlZCB0byBlbmQgdGhlCi0g KiBzY2FuLiAgQSBzZWl6ZWQ9ZmFsc2UgY2FsbGVyJ3MgYmxrbm8gY2FuIG5ldmVyIGJlIGFzc3Vt ZWQgdG8gYmUgdGhlIHBhZ2UKLSAqIHRoYXQgbXVzdCBiZSByZWFkIG5leHQgZHVyaW5nIGEgcGFy YWxsZWwgc2NhbiwgdGhvdWdoLiAgV2UgbXVzdCBmaWd1cmUgdGhhdAotICogcGFydCBvdXQgZm9y IG91cnNlbHZlcyBieSBzZWl6aW5nIHRoZSBzY2FuICh0aGUgY29ycmVjdCBwYWdlIHRvIHJlYWQg bWlnaHQKLSAqIGFscmVhZHkgYmUgYmV5b25kIHRoZSBzZWl6ZWQ9ZmFsc2UgY2FsbGVyJ3MgYmxr bm8gZHVyaW5nIGEgcGFyYWxsZWwgc2NhbiwKLSAqIHVubGVzcyBibGtuby9zby0+Y3VyclBvcy5u ZXh0UGFnZS9zby0+Y3VyclBvcy5wcmV2UGFnZSBpcyBhbHJlYWR5IFBfTk9ORSwKLSAqIG9yIHVu bGVzcyBzby0+Y3VyclBvcy5tb3JlUmlnaHQvc28tPmN1cnJQb3MubW9yZUxlZnQgaXMgYWxyZWFk eSB1bnNldCkuCisgKiBPbiBlbnRyeSwgbm8gcGFnZSBzaG91bGQgYmUgbG9ja2VkIGJ5IGNhbGxl ci4KICAqCi0gKiBPbiBzdWNjZXNzIGV4aXQsIHNvLT5jdXJyUG9zIGlzIHVwZGF0ZWQgdG8gY29u dGFpbiBkYXRhIGZyb20gdGhlIG5leHQKLSAqIGludGVyZXN0aW5nIHBhZ2UsIGFuZCB3ZSByZXR1 cm4gdHJ1ZS4gIFdlIGhvbGQgYSBwaW4gb24gdGhlIGJ1ZmZlciBvbgotICogc3VjY2VzcyBleGl0 IChleGNlcHQgZHVyaW5nIHNvLT5kcm9wUGluIGluZGV4IHNjYW5zLCB3aGVuIHdlIGRyb3AgdGhl IHBpbgotICogZWFnZXJseSB0byBhdm9pZCBibG9ja2luZyBWQUNVVU0pLgorICogT24gc3VjY2Vz cyBleGl0LCByZXR1cm5zIHVubG9ja2VkIGJhdGNoIGNvbnRhaW5pbmcgZGF0YSBmcm9tIHRoZSBu ZXh0IHBhZ2UKKyAqIHRoYXQgaGFzIGF0IGxlYXN0IG9uZSBtYXRjaGluZyBpdGVtLiAgSWYgdGhl cmUgYXJlIG5vIG1vcmUgbWF0Y2hpbmcgaXRlbXMKKyAqIGluIHRoZSBnaXZlbiBzY2FuIGRpcmVj dGlvbiwgd2UganVzdCByZXR1cm4gTlVMTC4gIE5vdGUgdGhhdCByZXR1cm5pbmcgTlVMTAorICog ZG9lc24ndCBuZWNlc3NhcmlseSBtZWFuIHRoZSBlbmQgb2YgdGhlIHRvcC1sZXZlbCBzY2FuOyBi dGdldGJhdGNoIGFuZAorICogYnRnZXRiaXRtYXAgY2hlY2sgc28tPm5lZWRQcmltU2NhbiB0byBk ZXRlcm1pbmUgaWYgYW5vdGhlciBwcmltaXRpdmUgaW5kZXgKKyAqIHNjYW4gaXMgcmVxdWlyZWQu CiAgKgotICogSWYgdGhlcmUgYXJlIG5vIG1vcmUgbWF0Y2hpbmcgcmVjb3JkcyBpbiB0aGUgZ2l2 ZW4gZGlyZWN0aW9uLCB3ZSBpbnZhbGlkYXRlCi0gKiBzby0+Y3VyclBvcyAod2hpbGUgZW5zdXJp bmcgaXQgcmV0YWlucyBubyBsb2NrcyBvciBwaW5zKSwgYW5kIHJldHVybiBmYWxzZS4KLSAqCi0g KiBXZSBhbHdheXMgcmVsZWFzZSB0aGUgc2NhbiBmb3IgYSBwYXJhbGxlbCBzY2FuIGNhbGxlciwg cmVnYXJkbGVzcyBvZgotICogc3VjY2VzcyBvciBmYWlsdXJlOyB3ZSdsbCBjYWxsIF9idF9wYXJh bGxlbF9yZWxlYXNlIGFzIHNvb24gYXMgcG9zc2libGUuCisgKiBQYXJhbGxlbCBzY2FuIGNhbGxl cnMgbXVzdCBzZWl6ZSB0aGUgc2NhbiBiZWZvcmUgY2FsbGluZyBoZXJlLiAgYmxrbm8gYW5kCisg KiBsYXN0Y3VycmJsa25vIHNob3VsZCBjb21lIGZyb20gdGhlIHNlaXplZCBzY2FuLiAgV2UnbGwg cmVsZWFzZSB0aGUgc2NhbiBhcworICogc29vbiBhcyBwb3NzaWJsZS4KICAqLwotc3RhdGljIGJv b2wKK3N0YXRpYyBJbmRleFNjYW5CYXRjaAogX2J0X3JlYWRuZXh0cGFnZShJbmRleFNjYW5EZXNj IHNjYW4sIEJsb2NrTnVtYmVyIGJsa25vLAotCQkJCSBCbG9ja051bWJlciBsYXN0Y3VycmJsa25v LCBTY2FuRGlyZWN0aW9uIGRpciwgYm9vbCBzZWl6ZWQpCisJCQkJIEJsb2NrTnVtYmVyIGxhc3Rj dXJyYmxrbm8sIFNjYW5EaXJlY3Rpb24gZGlyLCBib29sIGZpcnN0cGFnZSkKIHsKIAlSZWxhdGlv bglyZWwgPSBzY2FuLT5pbmRleFJlbGF0aW9uOwotCUJUU2Nhbk9wYXF1ZSBzbyA9IChCVFNjYW5P cGFxdWUpIHNjYW4tPm9wYXF1ZTsKKwlJbmRleFNjYW5CYXRjaCBuZXdiYXRjaDsKKwlCVEJhdGNo RGF0YSAqYnRuZXdiYXRjaDsKIAotCUFzc2VydChzby0+Y3VyclBvcy5jdXJyUGFnZSA9PSBsYXN0 Y3VycmJsa25vIHx8IHNlaXplZCk7Ci0JQXNzZXJ0KCEoYmxrbm8gPT0gUF9OT05FICYmIHNlaXpl ZCkpOwotCUFzc2VydCghQlRTY2FuUG9zSXNQaW5uZWQoc28tPmN1cnJQb3MpKTsKKwkvKiBBbGxv Y2F0ZSBzcGFjZSBmb3IgbmV3IGJhdGNoICovCisJbmV3YmF0Y2ggPSBpbmRleGFtX3V0aWxfYmF0 Y2hfYWxsb2Moc2Nhbik7CisJYnRuZXdiYXRjaCA9IEJUQmF0Y2hHZXREYXRhKHNjYW4sIG5ld2Jh dGNoKTsKIAogCS8qCi0JICogUmVtZW1iZXIgdGhhdCB0aGUgc2NhbiBhbHJlYWR5IHJlYWQgbGFz dGN1cnJibGtubywgYSBwYWdlIHRvIHRoZSBsZWZ0Ci0JICogb2YgYmxrbm8gKG9yIHJlbWVtYmVy IHJlYWRpbmcgYSBwYWdlIHRvIHRoZSByaWdodCwgZm9yIGJhY2t3YXJkcyBzY2FucykKKwkgKiBu ZXdiYXRjaCB3aWxsIGJlIHRoZSBiYXRjaCBmb3IgYmxrbm8sIGEgcGFnZSB0byB0aGUgcmlnaHQg b2YKKwkgKiBsYXN0Y3VycmJsa25vIChvciB0byB0aGUgbGVmdCwgd2hlbiB0aGUgc2NhbiBpcyBt b3ZpbmcgYmFja3dhcmRzKS4KKwkgKgorCSAqIE5vdGU6IGNhbGxlcidzIGJsa25vIGlzIHRlbnRh dGl2ZS4gIG5ld2JhdGNoIGFjdHVhbGx5IHN0b3JlcyBtYXRjaGVzCisJICogZnJvbSB0aGUgbmV4 dCBsZWFmIHBhZ2UgaW4gdGhpcyBzY2FuIGRpcmVjdGlvbiB0aGF0IGhhcyBhdCBsZWFzdCBvbmUK KwkgKiBtYXRjaGluZyBpdGVtLiAgVGhpcyBpcyB1c3VhbGx5IGNhbGxlcidzIGJsa25vIHBhZ2Us IGJ1dCBtaWdodCBiZSBzb21lCisJICogb3RoZXIgcGFnZSB0byBpdHMgcmlnaHQgKG9yIHRvIGl0 cyBsZWZ0KSBpbnN0ZWFkLgogCSAqLwotCWlmIChTY2FuRGlyZWN0aW9uSXNGb3J3YXJkKGRpcikp Ci0JCXNvLT5jdXJyUG9zLm1vcmVMZWZ0ID0gdHJ1ZTsKLQllbHNlCi0JCXNvLT5jdXJyUG9zLm1v cmVSaWdodCA9IHRydWU7CisJYnRuZXdiYXRjaC0+bW9yZUxlZnQgPSB0cnVlOwkvKiBmb3IgbGFz dGN1cnJibGtubyAob3IgdGVudGF0aXZlKSAqLworCWJ0bmV3YmF0Y2gtPm1vcmVSaWdodCA9IHRy dWU7CS8qIHRlbnRhdGl2ZSAob3IgZm9yIGxhc3RjdXJyYmxrbm8pICovCiAKIAlmb3IgKDs7KQog CXsKIAkJUGFnZQkJcGFnZTsKIAkJQlRQYWdlT3BhcXVlIG9wYXF1ZTsKIAotCQlpZiAoYmxrbm8g PT0gUF9OT05FIHx8Ci0JCQkoU2NhbkRpcmVjdGlvbklzRm9yd2FyZChkaXIpID8KLQkJCSAhc28t PmN1cnJQb3MubW9yZVJpZ2h0IDogIXNvLT5jdXJyUG9zLm1vcmVMZWZ0KSkKLQkJewotCQkJLyog bW9zdCByZWNlbnQgX2J0X3JlYWRwYWdlIGNhbGwgKGZvciBsYXN0Y3VycmJsa25vKSBlbmRlZCBz Y2FuICovCi0JCQlBc3NlcnQoc28tPmN1cnJQb3MuY3VyclBhZ2UgPT0gbGFzdGN1cnJibGtubyAm JiAhc2VpemVkKTsKLQkJCUJUU2NhblBvc0ludmFsaWRhdGUoc28tPmN1cnJQb3MpOwotCQkJX2J0 X3BhcmFsbGVsX2RvbmUoc2Nhbik7CS8qIGlmZiAhc28tPm5lZWRQcmltU2NhbiAqLwotCQkJcmV0 dXJuIGZhbHNlOwotCQl9Ci0KLQkJQXNzZXJ0KCFzby0+bmVlZFByaW1TY2FuKTsKLQotCQkvKiBw YXJhbGxlbCBzY2FuIG11c3QgbmV2ZXIgYWN0dWFsbHkgdmlzaXQgc28tPmN1cnJQb3MgYmxrbm8g Ki8KLQkJaWYgKCFzZWl6ZWQgJiYgc2Nhbi0+cGFyYWxsZWxfc2NhbiAhPSBOVUxMICYmCi0JCQkh X2J0X3BhcmFsbGVsX3NlaXplKHNjYW4sICZibGtubywgJmxhc3RjdXJyYmxrbm8sIGZhbHNlKSkK LQkJewotCQkJLyogd2hvbGUgc2NhbiBpcyBub3cgZG9uZSAob3IgYW5vdGhlciBwcmltaXRpdmUg c2NhbiByZXF1aXJlZCkgKi8KLQkJCUJUU2NhblBvc0ludmFsaWRhdGUoc28tPmN1cnJQb3MpOwot CQkJcmV0dXJuIGZhbHNlOwotCQl9CisJCUFzc2VydCghKChCVFNjYW5PcGFxdWUpIHNjYW4tPm9w YXF1ZSktPm5lZWRQcmltU2Nhbik7CisJCUFzc2VydChibGtubyAhPSBQX05PTkUgJiYgbGFzdGN1 cnJibGtubyAhPSBQX05PTkUpOwogCiAJCWlmIChTY2FuRGlyZWN0aW9uSXNGb3J3YXJkKGRpcikp CiAJCXsKIAkJCS8qIHJlYWQgYmxrbm8sIGJ1dCBjaGVjayBmb3IgaW50ZXJydXB0cyBmaXJzdCAq LwogCQkJQ0hFQ0tfRk9SX0lOVEVSUlVQVFMoKTsKLQkJCXNvLT5jdXJyUG9zLmJ1ZiA9IF9idF9n ZXRidWYocmVsLCBibGtubywgQlRfUkVBRCk7CisJCQlidG5ld2JhdGNoLT5idWYgPSBfYnRfZ2V0 YnVmKHJlbCwgYmxrbm8sIEJUX1JFQUQpOwogCQl9CiAJCWVsc2UKIAkJewogCQkJLyogcmVhZCBi bGtubywgYXZvaWRpbmcgcmFjZSAoYWxzbyBjaGVja3MgZm9yIGludGVycnVwdHMpICovCi0JCQlz by0+Y3VyclBvcy5idWYgPSBfYnRfbG9ja19hbmRfdmFsaWRhdGVfbGVmdChyZWwsICZibGtubywK KwkJCWJ0bmV3YmF0Y2gtPmJ1ZiA9IF9idF9sb2NrX2FuZF92YWxpZGF0ZV9sZWZ0KHJlbCwgJmJs a25vLAogCQkJCQkJCQkJCQkJCQkgbGFzdGN1cnJibGtubyk7Ci0JCQlpZiAoc28tPmN1cnJQb3Mu YnVmID09IEludmFsaWRCdWZmZXIpCisJCQlpZiAoYnRuZXdiYXRjaC0+YnVmID09IEludmFsaWRC dWZmZXIpCiAJCQl7CiAJCQkJLyogbXVzdCBoYXZlIGJlZW4gYSBjb25jdXJyZW50IGRlbGV0aW9u IG9mIGxlZnRtb3N0IHBhZ2UgKi8KLQkJCQlCVFNjYW5Qb3NJbnZhbGlkYXRlKHNvLT5jdXJyUG9z KTsKIAkJCQlfYnRfcGFyYWxsZWxfZG9uZShzY2FuKTsKLQkJCQlyZXR1cm4gZmFsc2U7CisJCQkJ aW5kZXhhbV91dGlsX2JhdGNoX3JlbGVhc2Uoc2NhbiwgbmV3YmF0Y2gpOworCQkJCXJldHVybiBO VUxMOwogCQkJfQogCQl9CiAKLQkJcGFnZSA9IEJ1ZmZlckdldFBhZ2Uoc28tPmN1cnJQb3MuYnVm KTsKKwkJcGFnZSA9IEJ1ZmZlckdldFBhZ2UoYnRuZXdiYXRjaC0+YnVmKTsKIAkJb3BhcXVlID0g QlRQYWdlR2V0T3BhcXVlKHBhZ2UpOwogCQlsYXN0Y3VycmJsa25vID0gYmxrbm87CiAJCWlmIChs aWtlbHkoIVBfSUdOT1JFKG9wYXF1ZSkpKQpAQCAtMTkxMSwxNyArMTgxMiwxNyBAQCBfYnRfcmVh ZG5leHRwYWdlKEluZGV4U2NhbkRlc2Mgc2NhbiwgQmxvY2tOdW1iZXIgYmxrbm8sCiAJCQkvKiBz ZWUgaWYgdGhlcmUgYXJlIGFueSBtYXRjaGVzIG9uIHRoaXMgcGFnZSAqLwogCQkJaWYgKFNjYW5E aXJlY3Rpb25Jc0ZvcndhcmQoZGlyKSkKIAkJCXsKLQkJCQkvKiBub3RlIHRoYXQgdGhpcyB3aWxs IGNsZWFyIG1vcmVSaWdodCBpZiB3ZSBjYW4gc3RvcCAqLwotCQkJCWlmIChfYnRfcmVhZHBhZ2Uo c2NhbiwgZGlyLCBQX0ZJUlNUREFUQUtFWShvcGFxdWUpLCBzZWl6ZWQpKQorCQkJCWlmIChfYnRf cmVhZHBhZ2Uoc2NhbiwgbmV3YmF0Y2gsIGRpciwKKwkJCQkJCQkJIFBfRklSU1REQVRBS0VZKG9w YXF1ZSksIGZpcnN0cGFnZSkpCiAJCQkJCWJyZWFrOwotCQkJCWJsa25vID0gc28tPmN1cnJQb3Mu bmV4dFBhZ2U7CisJCQkJYmxrbm8gPSBidG5ld2JhdGNoLT5uZXh0UGFnZTsKIAkJCX0KIAkJCWVs c2UKIAkJCXsKLQkJCQkvKiBub3RlIHRoYXQgdGhpcyB3aWxsIGNsZWFyIG1vcmVMZWZ0IGlmIHdl IGNhbiBzdG9wICovCi0JCQkJaWYgKF9idF9yZWFkcGFnZShzY2FuLCBkaXIsIFBhZ2VHZXRNYXhP ZmZzZXROdW1iZXIocGFnZSksIHNlaXplZCkpCisJCQkJaWYgKF9idF9yZWFkcGFnZShzY2FuLCBu ZXdiYXRjaCwgZGlyLAorCQkJCQkJCQkgUGFnZUdldE1heE9mZnNldE51bWJlcihwYWdlKSwgZmly c3RwYWdlKSkKIAkJCQkJYnJlYWs7Ci0JCQkJYmxrbm8gPSBzby0+Y3VyclBvcy5wcmV2UGFnZTsK KwkJCQlibGtubyA9IGJ0bmV3YmF0Y2gtPnByZXZQYWdlOwogCQkJfQogCQl9CiAJCWVsc2UKQEAg LTE5MzYsMTkgKzE4MzcsMzggQEAgX2J0X3JlYWRuZXh0cGFnZShJbmRleFNjYW5EZXNjIHNjYW4s IEJsb2NrTnVtYmVyIGJsa25vLAogCQl9CiAKIAkJLyogbm8gbWF0Y2hpbmcgdHVwbGVzIG9uIHRo aXMgcGFnZSAqLwotCQlfYnRfcmVsYnVmKHJlbCwgc28tPmN1cnJQb3MuYnVmKTsKLQkJc2VpemVk ID0gZmFsc2U7CQkJLyogcmVsZWFzZWQgYnkgX2J0X3JlYWRwYWdlIChvciBieSB1cykgKi8KKwkJ X2J0X3JlbGJ1ZihyZWwsIGJ0bmV3YmF0Y2gtPmJ1Zik7CisKKwkJLyogQ29udGludWUgdGhlIHNj YW4gaW4gdGhpcyBkaXJlY3Rpb24/ICovCisJCWlmIChibGtubyA9PSBQX05PTkUgfHwKKwkJCShT Y2FuRGlyZWN0aW9uSXNGb3J3YXJkKGRpcikgPworCQkJICFidG5ld2JhdGNoLT5tb3JlUmlnaHQg OiAhYnRuZXdiYXRjaC0+bW9yZUxlZnQpKQorCQl7CisJCQkvKgorCQkJICogYmxrbm8gX2J0X3Jl YWRwYWdlIGNhbGwgZW5kZWQgc2NhbiBpbiB0aGlzIGRpcmVjdGlvbiAodGhvdWdoIGlmCisJCQkg KiBzby0+bmVlZFByaW1TY2FuIHdhcyBzZXQgdGhlIHNjYW4gd2lsbCBjb250aW51ZSBpbiBfYnRf Zmlyc3QpCisJCQkgKi8KKwkJCV9idF9wYXJhbGxlbF9kb25lKHNjYW4pOworCQkJaW5kZXhhbV91 dGlsX2JhdGNoX3JlbGVhc2Uoc2NhbiwgbmV3YmF0Y2gpOworCQkJcmV0dXJuIE5VTEw7CisJCX0K KworCQkvKiBwYXJhbGxlbCBzY2FuIG11c3Qgc2VpemUgdGhlIHNjYW4gdG8gZ2V0IG5leHQgYmxr bm8gKi8KKwkJaWYgKHNjYW4tPnBhcmFsbGVsX3NjYW4gIT0gTlVMTCAmJgorCQkJIV9idF9wYXJh bGxlbF9zZWl6ZShzY2FuLCAmYmxrbm8sICZsYXN0Y3VycmJsa25vLCBmYWxzZSkpCisJCXsKKwkJ CWluZGV4YW1fdXRpbF9iYXRjaF9yZWxlYXNlKHNjYW4sIG5ld2JhdGNoKTsKKwkJCXJldHVybiBO VUxMOwkJLyogZG9uZSBpZmYgc28tPm5lZWRQcmltU2NhbiB3YXNuJ3Qgc2V0ICovCisJCX0KKwor CQlmaXJzdHBhZ2UgPSBmYWxzZTsJCS8qIG5leHQgcGFnZSBjYW5ub3QgYmUgZmlyc3QgKi8KIAl9 CiAKLQkvKgotCSAqIF9idF9yZWFkcGFnZSBzdWNjZWVkZWQuICBEcm9wIHRoZSBsb2NrIChhbmQg bWF5YmUgdGhlIHBpbikgb24KLQkgKiBzby0+Y3VyclBvcy5idWYgaW4gcHJlcGFyYXRpb24gZm9y IGJ0Z2V0dHVwbGUgcmV0dXJuaW5nIHR1cGxlcy4KLQkgKi8KLQlBc3NlcnQoc28tPmN1cnJQb3Mu Y3VyclBhZ2UgPT0gYmxrbm8pOwotCUFzc2VydChCVFNjYW5Qb3NJc1Bpbm5lZChzby0+Y3VyclBv cykpOwotCV9idF9kcm9wX2xvY2tfYW5kX21heWJlX3BpbihyZWwsIHNvKTsKKwkvKiBfYnRfcmVh ZHBhZ2Ugc2F2ZWQgb25lIG9yIG1vcmUgbWF0Y2hlcyBpbiBuZXdiYXRjaC5pdGVtc1tdICovCisJ QXNzZXJ0KGJ0bmV3YmF0Y2gtPmN1cnJQYWdlID09IGJsa25vKTsKKwlfYnRfYmF0Y2hfdW5sb2Nr KHNjYW4sIG5ld2JhdGNoLCBidG5ld2JhdGNoLT5idWYpOwogCi0JcmV0dXJuIHRydWU7CisJcmV0 dXJuIG5ld2JhdGNoOwogfQogCiAvKgpAQCAtMjE3NCwyNSArMjA5NCwyNCBAQCBfYnRfZ2V0X2Vu ZHBvaW50KFJlbGF0aW9uIHJlbCwgdWludDMyIGxldmVsLCBib29sIHJpZ2h0bW9zdCkKICAqIFBh cmFsbGVsIHNjYW4gY2FsbGVycyBtdXN0IGhhdmUgc2VpemVkIHRoZSBzY2FuIGJlZm9yZSBjYWxs aW5nIGhlcmUuCiAgKiBFeGl0IGNvbmRpdGlvbnMgYXJlIHRoZSBzYW1lIGFzIGZvciBfYnRfZmly c3QoKS4KICAqLwotc3RhdGljIGJvb2wKLV9idF9lbmRwb2ludChJbmRleFNjYW5EZXNjIHNjYW4s IFNjYW5EaXJlY3Rpb24gZGlyKQorc3RhdGljIEluZGV4U2NhbkJhdGNoCitfYnRfZW5kcG9pbnQo SW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpciwgSW5kZXhTY2FuQmF0Y2ggZmly c3RiYXRjaCkKIHsKIAlSZWxhdGlvbglyZWwgPSBzY2FuLT5pbmRleFJlbGF0aW9uOwotCUJUU2Nh bk9wYXF1ZSBzbyA9IChCVFNjYW5PcGFxdWUpIHNjYW4tPm9wYXF1ZTsKKwlCVEJhdGNoRGF0YSAq YnRmaXJzdGJhdGNoID0gQlRCYXRjaEdldERhdGEoc2NhbiwgZmlyc3RiYXRjaCk7CiAJUGFnZQkJ cGFnZTsKIAlCVFBhZ2VPcGFxdWUgb3BhcXVlOwogCU9mZnNldE51bWJlciBzdGFydDsKIAotCUFz c2VydCghQlRTY2FuUG9zSXNWYWxpZChzby0+Y3VyclBvcykpOwotCUFzc2VydCghc28tPm5lZWRQ cmltU2Nhbik7CisJQXNzZXJ0KCEoKEJUU2Nhbk9wYXF1ZSkgc2Nhbi0+b3BhcXVlKS0+bmVlZFBy aW1TY2FuKTsKIAogCS8qCiAJICogU2NhbiBkb3duIHRvIHRoZSBsZWZ0bW9zdCBvciByaWdodG1v c3QgbGVhZiBwYWdlLiAgVGhpcyBpcyBhIHNpbXBsaWZpZWQKIAkgKiB2ZXJzaW9uIG9mIF9idF9z ZWFyY2goKS4KIAkgKi8KLQlzby0+Y3VyclBvcy5idWYgPSBfYnRfZ2V0X2VuZHBvaW50KHJlbCwg MCwgU2NhbkRpcmVjdGlvbklzQmFja3dhcmQoZGlyKSk7CisJYnRmaXJzdGJhdGNoLT5idWYgPSBf YnRfZ2V0X2VuZHBvaW50KHJlbCwgMCwgU2NhbkRpcmVjdGlvbklzQmFja3dhcmQoZGlyKSk7CiAK LQlpZiAoIUJ1ZmZlcklzVmFsaWQoc28tPmN1cnJQb3MuYnVmKSkKKwlpZiAoIUJ1ZmZlcklzVmFs aWQoYnRmaXJzdGJhdGNoLT5idWYpKQogCXsKIAkJLyoKIAkJICogRW1wdHkgaW5kZXguIExvY2sg dGhlIHdob2xlIHJlbGF0aW9uLCBhcyBub3RoaW5nIGZpbmVyIHRvIGxvY2sKQEAgLTIyMDAsMTAg KzIxMTksMTAgQEAgX2J0X2VuZHBvaW50KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlv biBkaXIpCiAJCSAqLwogCQlQcmVkaWNhdGVMb2NrUmVsYXRpb24ocmVsLCBzY2FuLT54c19zbmFw c2hvdCk7CiAJCV9idF9wYXJhbGxlbF9kb25lKHNjYW4pOwotCQlyZXR1cm4gZmFsc2U7CisJCXJl dHVybiBOVUxMOwogCX0KIAotCXBhZ2UgPSBCdWZmZXJHZXRQYWdlKHNvLT5jdXJyUG9zLmJ1Zik7 CisJcGFnZSA9IEJ1ZmZlckdldFBhZ2UoYnRmaXJzdGJhdGNoLT5idWYpOwogCW9wYXF1ZSA9IEJU UGFnZUdldE9wYXF1ZShwYWdlKTsKIAlBc3NlcnQoUF9JU0xFQUYob3BhcXVlKSk7CiAKQEAgLTIy MjksOSArMjE0OCw1IEBAIF9idF9lbmRwb2ludChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJl Y3Rpb24gZGlyKQogCS8qCiAJICogTm93IGxvYWQgZGF0YSBmcm9tIHRoZSBmaXJzdCBwYWdlIG9m IHRoZSBzY2FuLgogCSAqLwotCWlmICghX2J0X3JlYWRmaXJzdHBhZ2Uoc2Nhbiwgc3RhcnQsIGRp cikpCi0JCXJldHVybiBmYWxzZTsKLQotCV9idF9yZXR1cm5pdGVtKHNjYW4sIHNvKTsKLQlyZXR1 cm4gdHJ1ZTsKKwlyZXR1cm4gX2J0X3JlYWRmaXJzdHBhZ2Uoc2NhbiwgZmlyc3RiYXRjaCwgc3Rh cnQsIGRpcik7CiB9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHV0 aWxzLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHV0aWxzLmMKaW5kZXggNzMyYmM3 NTBjLi40MTVlMmExYzAgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0 dXRpbHMuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHV0aWxzLmMKQEAgLTE5 LDEwICsxOSw3IEBACiAKICNpbmNsdWRlICJhY2Nlc3MvbmJ0cmVlLmgiCiAjaW5jbHVkZSAiYWNj ZXNzL3JlbG9wdGlvbnMuaCIKLSNpbmNsdWRlICJhY2Nlc3MvcmVsc2Nhbi5oIgogI2luY2x1ZGUg ImNvbW1hbmRzL3Byb2dyZXNzLmgiCi0jaW5jbHVkZSAiY29tbW9uL2ludC5oIgotI2luY2x1ZGUg ImxpYi9xdW5pcXVlLmgiCiAjaW5jbHVkZSAibWlzY2FkbWluLmgiCiAjaW5jbHVkZSAic3RvcmFn ZS9sd2xvY2suaCIKICNpbmNsdWRlICJ1dGlscy9kYXR1bS5oIgpAQCAtMzAsNyArMjcsNiBAQAog I2luY2x1ZGUgInV0aWxzL3JlbC5oIgogCiAKLXN0YXRpYyBpbnQJX2J0X2NvbXBhcmVfaW50KGNv bnN0IHZvaWQgKnZhLCBjb25zdCB2b2lkICp2Yik7CiBzdGF0aWMgaW50CV9idF9rZWVwX25hdHRz KFJlbGF0aW9uIHJlbCwgSW5kZXhUdXBsZSBsYXN0bGVmdCwKIAkJCQkJCSAgIEluZGV4VHVwbGUg Zmlyc3RyaWdodCwgQlRTY2FuSW5zZXJ0IGl0dXBfa2V5KTsKIApAQCAtMTQ1LDI0NyArMTQxLDYg QEAgX2J0X21rc2NhbmtleShSZWxhdGlvbiByZWwsIEluZGV4VHVwbGUgaXR1cCkKIAlyZXR1cm4g a2V5OwogfQogCi0vKgotICogcXNvcnQgY29tcGFyaXNvbiBmdW5jdGlvbiBmb3IgaW50IGFycmF5 cwotICovCi1zdGF0aWMgaW50Ci1fYnRfY29tcGFyZV9pbnQoY29uc3Qgdm9pZCAqdmEsIGNvbnN0 IHZvaWQgKnZiKQotewotCWludAkJCWEgPSAqKChjb25zdCBpbnQgKikgdmEpOwotCWludAkJCWIg PSAqKChjb25zdCBpbnQgKikgdmIpOwotCi0JcmV0dXJuIHBnX2NtcF9zMzIoYSwgYik7Ci19Ci0K LS8qCi0gKiBfYnRfa2lsbGl0ZW1zIC0gc2V0IExQX0RFQUQgc3RhdGUgZm9yIGl0ZW1zIGFuIGlu ZGV4c2NhbiBjYWxsZXIgaGFzCi0gKiB0b2xkIHVzIHdlcmUga2lsbGVkCi0gKgotICogc2Nhbi0+ b3BhcXVlLCByZWZlcmVuY2VkIGxvY2FsbHkgdGhyb3VnaCBzbywgY29udGFpbnMgaW5mb3JtYXRp b24gYWJvdXQgdGhlCi0gKiBjdXJyZW50IHBhZ2UgYW5kIGtpbGxlZCB0dXBsZXMgdGhlcmVvbiAo Z2VuZXJhbGx5LCB0aGlzIHNob3VsZCBvbmx5IGJlCi0gKiBjYWxsZWQgaWYgc28tPm51bUtpbGxl ZCA+IDApLgotICoKLSAqIENhbGxlciBzaG91bGQgbm90IGhhdmUgYSBsb2NrIG9uIHRoZSBzby0+ Y3VyclBvcyBwYWdlLCBidXQgbXVzdCBob2xkIGEKLSAqIGJ1ZmZlciBwaW4gd2hlbiAhc28tPmRy b3BQaW4uICBXaGVuIHdlIHJldHVybiwgaXQgc3RpbGwgd29uJ3QgYmUgbG9ja2VkLgotICogSXQn bGwgY29udGludWUgdG8gaG9sZCB3aGF0ZXZlciBwaW5zIHdlcmUgaGVsZCBiZWZvcmUgY2FsbGlu ZyBoZXJlLgotICoKLSAqIFdlIG1hdGNoIGl0ZW1zIGJ5IGhlYXAgVElEIGJlZm9yZSBhc3N1bWlu ZyB0aGV5IGFyZSB0aGUgcmlnaHQgb25lcyB0byBzZXQKLSAqIExQX0RFQUQuICBJZiB0aGUgc2Nh biBpcyBvbmUgdGhhdCBob2xkcyBhIGJ1ZmZlciBwaW4gb24gdGhlIHRhcmdldCBwYWdlCi0gKiBj b250aW51b3VzbHkgZnJvbSBpbml0aWFsbHkgcmVhZGluZyB0aGUgaXRlbXMgdW50aWwgYXBwbHlp bmcgdGhpcyBmdW5jdGlvbgotICogKGlmIGl0IGlzIGEgIXNvLT5kcm9wUGluIHNjYW4pLCBWQUNV VU0gY2Fubm90IGhhdmUgZGVsZXRlZCBhbnkgaXRlbXMgb24gdGhlCi0gKiBwYWdlLCBzbyB0aGUg cGFnZSdzIFRJRHMgY2FuJ3QgaGF2ZSBiZWVuIHJlY3ljbGVkIGJ5IG5vdy4gIFRoZXJlJ3Mgbm8g cmlzawotICogdGhhdCB3ZSdsbCBjb25mdXNlIGEgbmV3IGluZGV4IHR1cGxlIHRoYXQgaGFwcGVu cyB0byB1c2UgYSByZWN5Y2xlZCBUSUQKLSAqIHdpdGggYSBub3ctcmVtb3ZlZCB0dXBsZSB3aXRo IHRoZSBzYW1lIFRJRCAodGhhdCB1c2VkIHRvIGJlIG9uIHRoaXMgc2FtZQotICogcGFnZSkuICBX ZSBjYW4ndCByZWx5IG9uIHRoYXQgZHVyaW5nIHNjYW5zIHRoYXQgZHJvcCBidWZmZXIgcGlucyBl YWdlcmx5Ci0gKiAoc28tPmRyb3BQaW4gc2NhbnMpLCB0aG91Z2gsIHNvIHdlIG11c3QgY29uZGl0 aW9uIHNldHRpbmcgTFBfREVBRCBiaXRzIG9uCi0gKiB0aGUgcGFnZSBMU04gaGF2aW5nIG5vdCBj aGFuZ2VkIHNpbmNlIGJhY2sgd2hlbiBfYnRfcmVhZHBhZ2Ugc2F3IHRoZSBwYWdlLgotICogV2Ug dG90YWxseSBnaXZlIHVwIG9uIHNldHRpbmcgTFBfREVBRCBiaXRzIHdoZW4gdGhlIHBhZ2UgTFNO IGNoYW5nZWQuCi0gKgotICogV2UgZ2l2ZSB1cCBtdWNoIGxlc3Mgb2Z0ZW4gZHVyaW5nICFzby0+ ZHJvcFBpbiBzY2FucywgYnV0IGl0IHN0aWxsIGhhcHBlbnMuCi0gKiBXZSBjb3BlIHdpdGggY2Fz ZXMgd2hlcmUgaXRlbXMgaGF2ZSBtb3ZlZCByaWdodCBkdWUgdG8gaW5zZXJ0aW9ucy4gIElmIGFu Ci0gKiBpdGVtIGhhcyBtb3ZlZCBvZmYgdGhlIGN1cnJlbnQgcGFnZSBkdWUgdG8gYSBzcGxpdCwg d2UnbGwgZmFpbCB0byBmaW5kIGl0Ci0gKiBhbmQganVzdCBnaXZlIHVwIG9uIGl0LgotICovCi12 b2lkCi1fYnRfa2lsbGl0ZW1zKEluZGV4U2NhbkRlc2Mgc2NhbikKLXsKLQlSZWxhdGlvbglyZWwg PSBzY2FuLT5pbmRleFJlbGF0aW9uOwotCUJUU2Nhbk9wYXF1ZSBzbyA9IChCVFNjYW5PcGFxdWUp IHNjYW4tPm9wYXF1ZTsKLQlQYWdlCQlwYWdlOwotCUJUUGFnZU9wYXF1ZSBvcGFxdWU7Ci0JT2Zm c2V0TnVtYmVyIG1pbm9mZjsKLQlPZmZzZXROdW1iZXIgbWF4b2ZmOwotCWludAkJCW51bUtpbGxl ZCA9IHNvLT5udW1LaWxsZWQ7Ci0JYm9vbAkJa2lsbGVkc29tZXRoaW5nID0gZmFsc2U7Ci0JQnVm ZmVyCQlidWY7Ci0KLQlBc3NlcnQobnVtS2lsbGVkID4gMCk7Ci0JQXNzZXJ0KEJUU2NhblBvc0lz VmFsaWQoc28tPmN1cnJQb3MpKTsKLQlBc3NlcnQoc2Nhbi0+aGVhcFJlbGF0aW9uICE9IE5VTEwp OyAvKiBjYW4ndCBiZSBhIGJpdG1hcCBpbmRleCBzY2FuICovCi0KLQkvKiBBbHdheXMgaW52YWxp ZGF0ZSBzby0+a2lsbGVkSXRlbXNbXSBiZWZvcmUgbGVhdmluZyBzby0+Y3VyclBvcyAqLwotCXNv LT5udW1LaWxsZWQgPSAwOwotCi0JLyoKLQkgKiBXZSBuZWVkIHRvIGl0ZXJhdGUgdGhyb3VnaCBz by0+a2lsbGVkSXRlbXNbXSBpbiBsZWFmIHBhZ2Ugb3JkZXI7IHRoZQotCSAqIGxvb3AgYmVsb3cg ZXhwZWN0cyB0aGlzICh3aGVuIG1hcmtpbmcgcG9zdGluZyBsaXN0IHR1cGxlcywgYXQgbGVhc3Qp LgotCSAqIHNvLT5raWxsZWRJdGVtc1tdIGlzIG5vdyBpbiB3aGF0ZXZlciBvcmRlciB0aGUgc2Nh biByZXR1cm5lZCBpdGVtcyBpbi4KLQkgKiBTY3JvbGxhYmxlIGN1cnNvciBzY2FucyBtaWdodCBo YXZlIGV2ZW4gc2F2ZWQgdGhlIHNhbWUgaXRlbS9USUQgdHdpY2UuCi0JICoKLQkgKiBTb3J0IGFu ZCB1bmlxdWUtaWZ5IHNvLT5raWxsZWRJdGVtc1tdIHRvIGRlYWwgd2l0aCBhbGwgdGhpcy4KLQkg Ki8KLQlpZiAobnVtS2lsbGVkID4gMSkKLQl7Ci0JCXFzb3J0KHNvLT5raWxsZWRJdGVtcywgbnVt S2lsbGVkLCBzaXplb2YoaW50KSwgX2J0X2NvbXBhcmVfaW50KTsKLQkJbnVtS2lsbGVkID0gcXVu aXF1ZShzby0+a2lsbGVkSXRlbXMsIG51bUtpbGxlZCwgc2l6ZW9mKGludCksCi0JCQkJCQkJX2J0 X2NvbXBhcmVfaW50KTsKLQl9Ci0KLQlpZiAoIXNvLT5kcm9wUGluKQotCXsKLQkJLyoKLQkJICog V2UgaGF2ZSBoZWxkIHRoZSBwaW4gb24gdGhpcyBwYWdlIHNpbmNlIHdlIHJlYWQgdGhlIGluZGV4 IHR1cGxlcywKLQkJICogc28gYWxsIHdlIG5lZWQgdG8gZG8gaXMgbG9jayBpdC4gIFRoZSBwaW4g d2lsbCBoYXZlIHByZXZlbnRlZAotCQkgKiBjb25jdXJyZW50IFZBQ1VVTXMgZnJvbSByZWN5Y2xp bmcgYW55IG9mIHRoZSBUSURzIG9uIHRoZSBwYWdlLgotCQkgKi8KLQkJQXNzZXJ0KEJUU2NhblBv c0lzUGlubmVkKHNvLT5jdXJyUG9zKSk7Ci0JCWJ1ZiA9IHNvLT5jdXJyUG9zLmJ1ZjsKLQkJX2J0 X2xvY2tidWYocmVsLCBidWYsIEJUX1JFQUQpOwotCX0KLQllbHNlCi0JewotCQlYTG9nUmVjUHRy CWxhdGVzdGxzbjsKLQotCQlBc3NlcnQoIUJUU2NhblBvc0lzUGlubmVkKHNvLT5jdXJyUG9zKSk7 Ci0JCWJ1ZiA9IF9idF9nZXRidWYocmVsLCBzby0+Y3VyclBvcy5jdXJyUGFnZSwgQlRfUkVBRCk7 Ci0KLQkJbGF0ZXN0bHNuID0gQnVmZmVyR2V0TFNOQXRvbWljKGJ1Zik7Ci0JCUFzc2VydChzby0+ Y3VyclBvcy5sc24gPD0gbGF0ZXN0bHNuKTsKLQkJaWYgKHNvLT5jdXJyUG9zLmxzbiAhPSBsYXRl c3Rsc24pCi0JCXsKLQkJCS8qIE1vZGlmaWVkLCBnaXZlIHVwIG9uIGhpbnRpbmcgKi8KLQkJCV9i dF9yZWxidWYocmVsLCBidWYpOwotCQkJcmV0dXJuOwotCQl9Ci0KLQkJLyogVW5tb2RpZmllZCwg aGludGluZyBpcyBzYWZlICovCi0JfQotCi0JcGFnZSA9IEJ1ZmZlckdldFBhZ2UoYnVmKTsKLQlv cGFxdWUgPSBCVFBhZ2VHZXRPcGFxdWUocGFnZSk7Ci0JbWlub2ZmID0gUF9GSVJTVERBVEFLRVko b3BhcXVlKTsKLQltYXhvZmYgPSBQYWdlR2V0TWF4T2Zmc2V0TnVtYmVyKHBhZ2UpOwotCi0JLyog SXRlcmF0ZSB0aHJvdWdoIHNvLT5raWxsZWRJdGVtc1tdIGluIGxlYWYgcGFnZSBvcmRlciAqLwot CWZvciAoaW50IGkgPSAwOyBpIDwgbnVtS2lsbGVkOyBpKyspCi0JewotCQlpbnQJCQlpdGVtSW5k ZXggPSBzby0+a2lsbGVkSXRlbXNbaV07Ci0JCUJUU2NhblBvc0l0ZW0gKmtpdGVtID0gJnNvLT5j dXJyUG9zLml0ZW1zW2l0ZW1JbmRleF07Ci0JCU9mZnNldE51bWJlciBvZmZudW0gPSBraXRlbS0+ aW5kZXhPZmZzZXQ7Ci0KLQkJQXNzZXJ0KGl0ZW1JbmRleCA+PSBzby0+Y3VyclBvcy5maXJzdEl0 ZW0gJiYKLQkJCSAgIGl0ZW1JbmRleCA8PSBzby0+Y3VyclBvcy5sYXN0SXRlbSk7Ci0JCUFzc2Vy dChpID09IDAgfHwKLQkJCSAgIG9mZm51bSA+PSBzby0+Y3VyclBvcy5pdGVtc1tzby0+a2lsbGVk SXRlbXNbaSAtIDFdXS5pbmRleE9mZnNldCk7Ci0KLQkJaWYgKG9mZm51bSA8IG1pbm9mZikKLQkJ CWNvbnRpbnVlOwkJCS8qIHB1cmUgcGFyYW5vaWEgKi8KLQkJd2hpbGUgKG9mZm51bSA8PSBtYXhv ZmYpCi0JCXsKLQkJCUl0ZW1JZAkJaWlkID0gUGFnZUdldEl0ZW1JZChwYWdlLCBvZmZudW0pOwot CQkJSW5kZXhUdXBsZQlpdHVwbGUgPSAoSW5kZXhUdXBsZSkgUGFnZUdldEl0ZW0ocGFnZSwgaWlk KTsKLQkJCWJvb2wJCWtpbGx0dXBsZSA9IGZhbHNlOwotCi0JCQlpZiAoQlRyZWVUdXBsZUlzUG9z dGluZyhpdHVwbGUpKQotCQkJewotCQkJCWludAkJCXBpID0gaSArIDE7Ci0JCQkJaW50CQkJbnBv c3RpbmcgPSBCVHJlZVR1cGxlR2V0TlBvc3RpbmcoaXR1cGxlKTsKLQkJCQlpbnQJCQlqOwotCi0J CQkJLyoKLQkJCQkgKiBOb3RlIHRoYXQgdGhlIHBhZ2UgbWF5IGhhdmUgYmVlbiBtb2RpZmllZCBp biBhbG1vc3QgYW55IHdheQotCQkJCSAqIHNpbmNlIHdlIGZpcnN0IHJlYWQgaXQgKGluIHRoZSAh c28tPmRyb3BQaW4gY2FzZSksIHNvIGl0J3MKLQkJCQkgKiBwb3NzaWJsZSB0aGF0IHRoaXMgcG9z dGluZyBsaXN0IHR1cGxlIHdhc24ndCBhIHBvc3RpbmcgbGlzdAotCQkJCSAqIHR1cGxlIHdoZW4g d2UgZmlyc3QgZW5jb3VudGVyZWQgaXRzIGhlYXAgVElEcy4KLQkJCQkgKi8KLQkJCQlmb3IgKGog PSAwOyBqIDwgbnBvc3Rpbmc7IGorKykKLQkJCQl7Ci0JCQkJCUl0ZW1Qb2ludGVyIGl0ZW0gPSBC VHJlZVR1cGxlR2V0UG9zdGluZ04oaXR1cGxlLCBqKTsKLQotCQkJCQlpZiAoIUl0ZW1Qb2ludGVy RXF1YWxzKGl0ZW0sICZraXRlbS0+aGVhcFRpZCkpCi0JCQkJCQlicmVhazsJLyogb3V0IG9mIHBv c3RpbmcgbGlzdCBsb29wICovCi0KLQkJCQkJLyoKLQkJCQkJICoga2l0ZW0gbXVzdCBoYXZlIG1h dGNoaW5nIG9mZm51bSB3aGVuIGhlYXAgVElEcyBtYXRjaCwKLQkJCQkJICogdGhvdWdoIG9ubHkg aW4gdGhlIGNvbW1vbiBjYXNlIHdoZXJlIHRoZSBwYWdlIGNhbid0Ci0JCQkJCSAqIGhhdmUgYmVl biBjb25jdXJyZW50bHkgbW9kaWZpZWQKLQkJCQkJICovCi0JCQkJCUFzc2VydChraXRlbS0+aW5k ZXhPZmZzZXQgPT0gb2ZmbnVtIHx8ICFzby0+ZHJvcFBpbik7Ci0KLQkJCQkJLyoKLQkJCQkJICog UmVhZC1haGVhZCB0byBsYXRlciBraXRlbXMgaGVyZS4KLQkJCQkJICoKLQkJCQkJICogV2UgcmVs eSBvbiB0aGUgYXNzdW1wdGlvbiB0aGF0IG5vdCBhZHZhbmNpbmcga2l0ZW0gaGVyZQotCQkJCQkg KiB3aWxsIHByZXZlbnQgdXMgZnJvbSBjb25zaWRlcmluZyB0aGUgcG9zdGluZyBsaXN0IHR1cGxl Ci0JCQkJCSAqIGZ1bGx5IGRlYWQgYnkgbm90IG1hdGNoaW5nIGl0cyBuZXh0IGhlYXAgVElEIGlu IG5leHQKLQkJCQkJICogbG9vcCBpdGVyYXRpb24uCi0JCQkJCSAqCi0JCQkJCSAqIElmLCBvbiB0 aGUgb3RoZXIgaGFuZCwgdGhpcyBpcyB0aGUgZmluYWwgaGVhcCBUSUQgaW4KLQkJCQkJICogdGhl IHBvc3RpbmcgbGlzdCB0dXBsZSwgdGhlbiB0dXBsZSBnZXRzIGtpbGxlZAotCQkJCQkgKiByZWdh cmRsZXNzIChpLmUuIHdlIGhhbmRsZSB0aGUgY2FzZSB3aGVyZSB0aGUgbGFzdAotCQkJCQkgKiBr aXRlbSBpcyBhbHNvIHRoZSBsYXN0IGhlYXAgVElEIGluIHRoZSBsYXN0IGluZGV4IHR1cGxlCi0J CQkJCSAqIGNvcnJlY3RseSAtLSBwb3N0aW5nIHR1cGxlIHN0aWxsIGdldHMga2lsbGVkKS4KLQkJ CQkJICovCi0JCQkJCWlmIChwaSA8IG51bUtpbGxlZCkKLQkJCQkJCWtpdGVtID0gJnNvLT5jdXJy UG9zLml0ZW1zW3NvLT5raWxsZWRJdGVtc1twaSsrXV07Ci0JCQkJfQotCi0JCQkJLyoKLQkJCQkg KiBEb24ndCBib3RoZXIgYWR2YW5jaW5nIHRoZSBvdXRlcm1vc3QgbG9vcCdzIGludCBpdGVyYXRv ciB0bwotCQkJCSAqIGF2b2lkIHByb2Nlc3Npbmcga2lsbGVkIGl0ZW1zIHRoYXQgcmVsYXRlIHRv IHRoZSBzYW1lCi0JCQkJICogb2ZmbnVtL3Bvc3RpbmcgbGlzdCB0dXBsZS4gIFRoaXMgbWljcm8t b3B0aW1pemF0aW9uIGhhcmRseQotCQkJCSAqIHNlZW1zIHdvcnRoIGl0LiAgKEZ1cnRoZXIgaXRl cmF0aW9ucyBvZiB0aGUgb3V0ZXJtb3N0IGxvb3AKLQkJCQkgKiB3aWxsIGZhaWwgdG8gbWF0Y2gg b24gdGhpcyBzYW1lIHBvc3RpbmcgbGlzdCdzIGZpcnN0IGhlYXAKLQkJCQkgKiBUSUQgaW5zdGVh ZCwgc28gd2UnbGwgYWR2YW5jZSB0byB0aGUgbmV4dCBvZmZudW0vaW5kZXgKLQkJCQkgKiB0dXBs ZSBwcmV0dHkgcXVpY2tseS4pCi0JCQkJICovCi0JCQkJaWYgKGogPT0gbnBvc3RpbmcpCi0JCQkJ CWtpbGx0dXBsZSA9IHRydWU7Ci0JCQl9Ci0JCQllbHNlIGlmIChJdGVtUG9pbnRlckVxdWFscygm aXR1cGxlLT50X3RpZCwgJmtpdGVtLT5oZWFwVGlkKSkKLQkJCQlraWxsdHVwbGUgPSB0cnVlOwot Ci0JCQkvKgotCQkJICogTWFyayBpbmRleCBpdGVtIGFzIGRlYWQsIGlmIGl0IGlzbid0IGFscmVh ZHkuICBTaW5jZSB0aGlzCi0JCQkgKiBoYXBwZW5zIHdoaWxlIGhvbGRpbmcgYSBidWZmZXIgbG9j ayBwb3NzaWJseSBpbiBzaGFyZWQgbW9kZSwKLQkJCSAqIGl0J3MgcG9zc2libGUgdGhhdCBtdWx0 aXBsZSBwcm9jZXNzZXMgYXR0ZW1wdCB0byBkbyB0aGlzCi0JCQkgKiBzaW11bHRhbmVvdXNseSwg bGVhZGluZyB0byBtdWx0aXBsZSBmdWxsLXBhZ2UgaW1hZ2VzIGJlaW5nIHNlbnQKLQkJCSAqIHRv IFdBTCAoaWYgd2FsX2xvZ19oaW50cyBvciBkYXRhIGNoZWNrc3VtcyBhcmUgZW5hYmxlZCksIHdo aWNoCi0JCQkgKiBpcyB1bmRlc2lyYWJsZS4KLQkJCSAqLwotCQkJaWYgKGtpbGx0dXBsZSAmJiAh SXRlbUlkSXNEZWFkKGlpZCkpCi0JCQl7Ci0JCQkJaWYgKCFraWxsZWRzb21ldGhpbmcpCi0JCQkJ ewotCQkJCQkvKgotCQkJCQkgKiBVc2UgdGhlIGhpbnQgYml0IGluZnJhc3RydWN0dXJlIHRvIGNo ZWNrIGlmIHdlIGNhbgotCQkJCQkgKiB1cGRhdGUgdGhlIHBhZ2Ugd2hpbGUganVzdCBob2xkaW5n IGEgc2hhcmUgbG9jay4gSWYgd2UKLQkJCQkJICogYXJlIG5vdCBhbGxvd2VkLCB0aGVyZSdzIG5v IHBvaW50IGNvbnRpbnVpbmcuCi0JCQkJCSAqLwotCQkJCQlpZiAoIUJ1ZmZlckJlZ2luU2V0SGlu dEJpdHMoYnVmKSkKLQkJCQkJCWdvdG8gdW5sb2NrX3BhZ2U7Ci0JCQkJfQotCi0JCQkJLyogZm91 bmQgdGhlIGl0ZW0vYWxsIHBvc3RpbmcgbGlzdCBpdGVtcyAqLwotCQkJCUl0ZW1JZE1hcmtEZWFk KGlpZCk7Ci0JCQkJa2lsbGVkc29tZXRoaW5nID0gdHJ1ZTsKLQkJCQlicmVhazsJCQkvKiBvdXQg b2YgaW5uZXIgc2VhcmNoIGxvb3AgKi8KLQkJCX0KLQkJCW9mZm51bSA9IE9mZnNldE51bWJlck5l eHQob2ZmbnVtKTsKLQkJfQotCX0KLQotCS8qCi0JICogU2luY2UgdGhpcyBjYW4gYmUgcmVkb25l IGxhdGVyIGlmIG5lZWRlZCwgbWFyayBhcyBkaXJ0eSBoaW50LgotCSAqCi0JICogV2hlbmV2ZXIg d2UgbWFyayBhbnl0aGluZyBMUF9ERUFELCB3ZSBhbHNvIHNldCB0aGUgcGFnZSdzCi0JICogQlRQ X0hBU19HQVJCQUdFIGZsYWcsIHdoaWNoIGlzIGxpa2V3aXNlIGp1c3QgYSBoaW50LiAgKE5vdGUg dGhhdCB3ZQotCSAqIG9ubHkgcmVseSBvbiB0aGUgcGFnZS1sZXZlbCBmbGFnIGluICFoZWFwa2V5 c3BhY2UgaW5kZXhlcy4pCi0JICovCi0JaWYgKGtpbGxlZHNvbWV0aGluZykKLQl7Ci0JCW9wYXF1 ZS0+YnRwb19mbGFncyB8PSBCVFBfSEFTX0dBUkJBR0U7Ci0JCUJ1ZmZlckZpbmlzaFNldEhpbnRC aXRzKGJ1ZiwgdHJ1ZSwgdHJ1ZSk7Ci0JfQotCi11bmxvY2tfcGFnZToKLQlpZiAoIXNvLT5kcm9w UGluKQotCQlfYnRfdW5sb2NrYnVmKHJlbCwgYnVmKTsKLQllbHNlCi0JCV9idF9yZWxidWYocmVs LCBidWYpOwotfQotCi0KIC8qCiAgKiBUaGUgZm9sbG93aW5nIHJvdXRpbmVzIG1hbmFnZSBhIHNo YXJlZC1tZW1vcnkgYXJlYSBpbiB3aGljaCB3ZSB0cmFjawogICogYXNzaWdubWVudCBvZiAidmFj dXVtIGN5Y2xlIElEcyIgdG8gY3VycmVudGx5LWFjdGl2ZSBidHJlZSB2YWN1dW1pbmcKZGlmZiAt LWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0eGxvZy5jIGIvc3JjL2JhY2tlbmQv YWNjZXNzL25idHJlZS9uYnR4bG9nLmMKaW5kZXggZGZmN2QyODZmLi4zYmM1ZTVjY2QgMTAwNjQ0 Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0eGxvZy5jCisrKyBiL3NyYy9iYWNr ZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0eGxvZy5jCkBAIC0xMDk1LDE1ICsxMDk1LDE1IEBAIGJ0cmVl X21hc2soY2hhciAqcGFnZWRhdGEsIEJsb2NrTnVtYmVyIGJsa25vKQogCQkvKgogCQkgKiBJbiBi dHJlZSBsZWFmIHBhZ2VzLCBpdCBpcyBwb3NzaWJsZSB0byBtb2RpZnkgdGhlIExQX0ZMQUdTIHdp dGhvdXQKIAkJICogZW1pdHRpbmcgYW55IFdBTCByZWNvcmQuIEhlbmNlLCBtYXNrIHRoZSBsaW5l IHBvaW50ZXIgZmxhZ3MuIFNlZQotCQkgKiBfYnRfa2lsbGl0ZW1zKCksIF9idF9jaGVja191bmlx dWUoKSBmb3IgZGV0YWlscy4KKwkJICogYnRraWxsaXRlbXNiYXRjaCgpLCBfYnRfY2hlY2tfdW5p cXVlKCkgZm9yIGRldGFpbHMuCiAJCSAqLwogCQltYXNrX2xwX2ZsYWdzKHBhZ2UpOwogCX0KIAog CS8qCiAJICogQlRQX0hBU19HQVJCQUdFIGlzIGp1c3QgYW4gdW4tbG9nZ2VkIGhpbnQgYml0LiBT bywgbWFzayBpdC4gU2VlCi0JICogX2J0X2RlbGV0ZV9vcl9kZWR1cF9vbmVfcGFnZSgpLCBfYnRf a2lsbGl0ZW1zKCksIGFuZCBfYnRfY2hlY2tfdW5pcXVlKCkKLQkgKiBmb3IgZGV0YWlscy4KKwkg KiBfYnRfZGVsZXRlX29yX2RlZHVwX29uZV9wYWdlKCksIGJ0a2lsbGl0ZW1zYmF0Y2goKSwgYW5k CisJICogX2J0X2NoZWNrX3VuaXF1ZSgpIGZvciBkZXRhaWxzLgogCSAqLwogCW1hc2tvcGFxLT5i dHBvX2ZsYWdzICY9IH5CVFBfSEFTX0dBUkJBR0U7CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5k L2FjY2Vzcy9zcGdpc3Qvc3BndXRpbHMuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9zcGdpc3Qvc3Bn dXRpbHMuYwppbmRleCBmMmVlMzMzZjYuLjFmNDUyMzEwMiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tl bmQvYWNjZXNzL3NwZ2lzdC9zcGd1dGlscy5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9zcGdp c3Qvc3BndXRpbHMuYwpAQCAtODgsMTAgKzg4LDEyIEBAIHNwZ2hhbmRsZXIoUEdfRlVOQ1RJT05f QVJHUykKIAkJLmFtYmVnaW5zY2FuID0gc3BnYmVnaW5zY2FuLAogCQkuYW1yZXNjYW4gPSBzcGdy ZXNjYW4sCiAJCS5hbWdldHR1cGxlID0gc3BnZ2V0dHVwbGUsCisJCS5hbWdldGJhdGNoID0gTlVM TCwKKwkJLmFtdW5ndWFyZGJhdGNoID0gTlVMTCwKKwkJLmFta2lsbGl0ZW1zYmF0Y2ggPSBOVUxM LAogCQkuYW1nZXRiaXRtYXAgPSBzcGdnZXRiaXRtYXAsCiAJCS5hbWVuZHNjYW4gPSBzcGdlbmRz Y2FuLAotCQkuYW1tYXJrcG9zID0gTlVMTCwKLQkJLmFtcmVzdHJwb3MgPSBOVUxMLAorCQkuYW1w b3NyZXNldCA9IE5VTEwsCiAJCS5hbWVzdGltYXRlcGFyYWxsZWxzY2FuID0gTlVMTCwKIAkJLmFt aW5pdHBhcmFsbGVsc2NhbiA9IE5VTEwsCiAJCS5hbXBhcmFsbGVscmVzY2FuID0gTlVMTCwKZGlm ZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90YWJsZS90YWJsZWFtYXBpLmMgYi9zcmMvYmFj a2VuZC9hY2Nlc3MvdGFibGUvdGFibGVhbWFwaS5jCmluZGV4IGMwOTQ3M2I5Ny4uMGZmZjgwMWE0 IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvdGFibGUvdGFibGVhbWFwaS5jCisrKyBi L3NyYy9iYWNrZW5kL2FjY2Vzcy90YWJsZS90YWJsZWFtYXBpLmMKQEAgLTUzLDYgKzUzLDkgQEAg R2V0VGFibGVBbVJvdXRpbmUoT2lkIGFtaGFuZGxlcikKIAlBc3NlcnQocm91dGluZS0+aW5kZXhf ZmV0Y2hfYmVnaW4gIT0gTlVMTCk7CiAJQXNzZXJ0KHJvdXRpbmUtPmluZGV4X2ZldGNoX3Jlc2V0 ICE9IE5VTEwpOwogCUFzc2VydChyb3V0aW5lLT5pbmRleF9mZXRjaF9lbmQgIT0gTlVMTCk7CisJ QXNzZXJ0KHJvdXRpbmUtPmluZGV4X2ZldGNoX2JhdGNoX2luaXQgIT0gTlVMTCk7CisJQXNzZXJ0 KHJvdXRpbmUtPmluZGV4X2ZldGNoX21hcmtwb3MgIT0gTlVMTCk7CisJQXNzZXJ0KHJvdXRpbmUt PmluZGV4X2ZldGNoX3Jlc3RycG9zICE9IE5VTEwpOwogCiAJQXNzZXJ0KHJvdXRpbmUtPmZldGNo X3RpZCAhPSBOVUxMKTsKIAlBc3NlcnQocm91dGluZS0+dHVwbGVfZmV0Y2hfcm93X3ZlcnNpb24g IT0gTlVMTCk7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy9pbmRleGNtZHMuYyBi L3NyYy9iYWNrZW5kL2NvbW1hbmRzL2luZGV4Y21kcy5jCmluZGV4IGNiYTM3OTgxMC4uNTNmMWFk ODJkIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy9pbmRleGNtZHMuYworKysgYi9z cmMvYmFja2VuZC9jb21tYW5kcy9pbmRleGNtZHMuYwpAQCAtODg1LDcgKzg4NSw3IEBAIERlZmlu ZUluZGV4KFBhcnNlU3RhdGUgKnBzdGF0ZSwKIAkJCQkoZXJyY29kZShFUlJDT0RFX0ZFQVRVUkVf Tk9UX1NVUFBPUlRFRCksCiAJCQkJIGVycm1zZygiYWNjZXNzIG1ldGhvZCBcIiVzXCIgZG9lcyBu b3Qgc3VwcG9ydCBtdWx0aWNvbHVtbiBpbmRleGVzIiwKIAkJCQkJCWFjY2Vzc01ldGhvZE5hbWUp KSk7Ci0JaWYgKGV4Y2x1c2lvbiAmJiBhbVJvdXRpbmUtPmFtZ2V0dHVwbGUgPT0gTlVMTCkKKwlp ZiAoZXhjbHVzaW9uICYmIGFtUm91dGluZS0+YW1nZXR0dXBsZSA9PSBOVUxMICYmIGFtUm91dGlu ZS0+YW1nZXRiYXRjaCA9PSBOVUxMKQogCQllcmVwb3J0KEVSUk9SLAogCQkJCShlcnJjb2RlKEVS UkNPREVfRkVBVFVSRV9OT1RfU1VQUE9SVEVEKSwKIAkJCQkgZXJybXNnKCJhY2Nlc3MgbWV0aG9k IFwiJXNcIiBkb2VzIG5vdCBzdXBwb3J0IGV4Y2x1c2lvbiBjb25zdHJhaW50cyIsCmRpZmYgLS1n aXQgYS9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjQW1pLmMgYi9zcmMvYmFja2VuZC9leGVjdXRv ci9leGVjQW1pLmMKaW5kZXggMzdmZTAzZmRjLi45NzlhODUyZmUgMTAwNjQ0Ci0tLSBhL3NyYy9i YWNrZW5kL2V4ZWN1dG9yL2V4ZWNBbWkuYworKysgYi9zcmMvYmFja2VuZC9leGVjdXRvci9leGVj QW1pLmMKQEAgLTQyOSw3ICs0MjksNyBAQCBFeGVjU3VwcG9ydHNNYXJrUmVzdG9yZShQYXRoICpw YXRobm9kZSkKIAkJY2FzZSBUX0luZGV4T25seVNjYW46CiAKIAkJCS8qCi0JCQkgKiBOb3QgYWxs IGluZGV4IHR5cGVzIHN1cHBvcnQgbWFyay9yZXN0b3JlLgorCQkJICogTm90IGFsbCBpbmRleCB0 eXBlcyBzdXBwb3J0IHJlc3RvcmluZyBhIG1hcmsKIAkJCSAqLwogCQkJcmV0dXJuIGNhc3ROb2Rl KEluZGV4UGF0aCwgcGF0aG5vZGUpLT5pbmRleGluZm8tPmFtY2FubWFya3BvczsKIApkaWZmIC0t Z2l0IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZU1lcmdlam9pbi5jIGIvc3JjL2JhY2tlbmQv ZXhlY3V0b3Ivbm9kZU1lcmdlam9pbi5jCmluZGV4IGY4NDIxYTc0Yy4uNmU4ZmUwN2Y2IDEwMDY0 NAotLS0gYS9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlTWVyZ2Vqb2luLmMKKysrIGIvc3JjL2Jh Y2tlbmQvZXhlY3V0b3Ivbm9kZU1lcmdlam9pbi5jCkBAIC01NCw4ICs1NCw4IEBACiAgKgkJdGhl IGlubmVyICI1J3MiLiBUaGlzIHJlcXVpcmVzIHJlcG9zaXRpb25pbmcgdGhlIGlubmVyICJjdXJz b3IiCiAgKgkJdG8gcG9pbnQgYXQgdGhlIGZpcnN0IGlubmVyICI1Ii4gVGhpcyBpcyBkb25lIGJ5 ICJtYXJraW5nIiB0aGUKICAqCQlmaXJzdCBpbm5lciA1IHNvIHdlIGNhbiByZXN0b3JlIHRoZSAi Y3Vyc29yIiB0byBpdCBiZWZvcmUgam9pbmluZwotICoJCXdpdGggdGhlIHNlY29uZCBvdXRlciA1 LiBUaGUgYWNjZXNzIG1ldGhvZCBpbnRlcmZhY2UgcHJvdmlkZXMKLSAqCQlyb3V0aW5lcyB0byBt YXJrIGFuZCByZXN0b3JlIHRvIGEgdHVwbGUuCisgKgkJd2l0aCB0aGUgc2Vjb25kIG91dGVyIDUu IFRoZSB0YWJsZSBBTSBpbnRlcmZhY2UgcHJvdmlkZXMKKyAqCQlyb3V0aW5lcyB0byBtYXJrIGFu ZCByZXN0b3JlIHRvIGEgdHVwbGUgZHVyaW5nIGluZGV4IHNjYW5zLgogICoKICAqCiAgKgkJRXNz ZW50aWFsIG9wZXJhdGlvbiBvZiB0aGUgbWVyZ2Ugam9pbiBhbGdvcml0aG0gaXMgYXMgZm9sbG93 czoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2luZHhwYXRoLmMgYi9z cmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9pbmR4cGF0aC5jCmluZGV4IDY3ZDlkYzM1Zi4uZWRj N2U0NzM2IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9pbmR4cGF0aC5j CisrKyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2luZHhwYXRoLmMKQEAgLTQzLDcgKzQz LDcgQEAKIC8qIFdoZXRoZXIgd2UgYXJlIGxvb2tpbmcgZm9yIHBsYWluIGluZGV4c2NhbiwgYml0 bWFwIHNjYW4sIG9yIGVpdGhlciAqLwogdHlwZWRlZiBlbnVtCiB7Ci0JU1RfSU5ERVhTQ0FOLAkJ CQkvKiBtdXN0IHN1cHBvcnQgYW1nZXR0dXBsZSAqLworCVNUX0lOREVYU0NBTiwJCQkJLyogbXVz dCBzdXBwb3J0IGFtZ2V0dHVwbGUgb3IgYW1nZXRiYXRjaCAqLwogCVNUX0JJVE1BUFNDQU4sCQkJ CS8qIG11c3Qgc3VwcG9ydCBhbWdldGJpdG1hcCAqLwogCVNUX0FOWVNDQU4sCQkJCQkvKiBlaXRo ZXIgaXMgb2theSAqLwogfSBTY2FuVHlwZUNvbnRyb2w7CkBAIC03NDcsNyArNzQ3LDcgQEAgZ2V0 X2luZGV4X3BhdGhzKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpyZWwsCiAJewogCQlJ bmRleFBhdGggICppcGF0aCA9IChJbmRleFBhdGggKikgbGZpcnN0KGxjKTsKIAotCQlpZiAoaW5k ZXgtPmFtaGFzZ2V0dHVwbGUpCisJCWlmIChpbmRleC0+YW1jYW5wbGFpbnNjYW4pCiAJCQlhZGRf cGF0aChyZWwsIChQYXRoICopIGlwYXRoKTsKIAogCQlpZiAoaW5kZXgtPmFtaGFzZ2V0Yml0bWFw ICYmCkBAIC04MzUsNyArODM1LDcgQEAgYnVpbGRfaW5kZXhfcGF0aHMoUGxhbm5lckluZm8gKnJv b3QsIFJlbE9wdEluZm8gKnJlbCwKIAlzd2l0Y2ggKHNjYW50eXBlKQogCXsKIAkJY2FzZSBTVF9J TkRFWFNDQU46Ci0JCQlpZiAoIWluZGV4LT5hbWhhc2dldHR1cGxlKQorCQkJaWYgKCFpbmRleC0+ YW1jYW5wbGFpbnNjYW4pCiAJCQkJcmV0dXJuIE5JTDsKIAkJCWJyZWFrOwogCQljYXNlIFNUX0JJ VE1BUFNDQU46CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9wbGFuY2F0 LmMgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9wbGFuY2F0LmMKaW5kZXggN2M0YmUxNzQ4 Li4wNmEyZTk0OWQgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL29wdGltaXplci91dGlsL3BsYW5j YXQuYworKysgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9wbGFuY2F0LmMKQEAgLTMxMCwx MSArMzEwLDExIEBAIGdldF9yZWxhdGlvbl9pbmZvKFBsYW5uZXJJbmZvICpyb290LCBPaWQgcmVs YXRpb25PYmplY3RJZCwgYm9vbCBpbmhwYXJlbnQsCiAJCQkJaW5mby0+YW1zZWFyY2hhcnJheSA9 IGFtcm91dGluZS0+YW1zZWFyY2hhcnJheTsKIAkJCQlpbmZvLT5hbXNlYXJjaG51bGxzID0gYW1y b3V0aW5lLT5hbXNlYXJjaG51bGxzOwogCQkJCWluZm8tPmFtY2FucGFyYWxsZWwgPSBhbXJvdXRp bmUtPmFtY2FucGFyYWxsZWw7Ci0JCQkJaW5mby0+YW1oYXNnZXR0dXBsZSA9IChhbXJvdXRpbmUt PmFtZ2V0dHVwbGUgIT0gTlVMTCk7CisJCQkJaW5mby0+YW1jYW5wbGFpbnNjYW4gPSAoYW1yb3V0 aW5lLT5hbWdldGJhdGNoICE9IE5VTEwgfHwKKwkJCQkJCQkJCQlhbXJvdXRpbmUtPmFtZ2V0dHVw bGUgIT0gTlVMTCk7CiAJCQkJaW5mby0+YW1oYXNnZXRiaXRtYXAgPSBhbXJvdXRpbmUtPmFtZ2V0 Yml0bWFwICE9IE5VTEwgJiYKIAkJCQkJcmVsYXRpb24tPnJkX3RhYmxlYW0tPnNjYW5fYml0bWFw X25leHRfdHVwbGUgIT0gTlVMTDsKLQkJCQlpbmZvLT5hbWNhbm1hcmtwb3MgPSAoYW1yb3V0aW5l LT5hbW1hcmtwb3MgIT0gTlVMTCAmJgotCQkJCQkJCQkJICBhbXJvdXRpbmUtPmFtcmVzdHJwb3Mg IT0gTlVMTCk7CisJCQkJaW5mby0+YW1jYW5tYXJrcG9zID0gYW1yb3V0aW5lLT5hbWdldGJhdGNo ICE9IE5VTEw7CiAJCQkJaW5mby0+YW1jb3N0ZXN0aW1hdGUgPSBhbXJvdXRpbmUtPmFtY29zdGVz dGltYXRlOwogCQkJCUFzc2VydChpbmZvLT5hbWNvc3Rlc3RpbWF0ZSAhPSBOVUxMKTsKIApAQCAt NDExLDcgKzQxMSw3IEBAIGdldF9yZWxhdGlvbl9pbmZvKFBsYW5uZXJJbmZvICpyb290LCBPaWQg cmVsYXRpb25PYmplY3RJZCwgYm9vbCBpbmhwYXJlbnQsCiAJCQkJaW5mby0+YW1zZWFyY2hhcnJh eSA9IGZhbHNlOwogCQkJCWluZm8tPmFtc2VhcmNobnVsbHMgPSBmYWxzZTsKIAkJCQlpbmZvLT5h bWNhbnBhcmFsbGVsID0gZmFsc2U7Ci0JCQkJaW5mby0+YW1oYXNnZXR0dXBsZSA9IGZhbHNlOwor CQkJCWluZm8tPmFtY2FucGxhaW5zY2FuID0gZmFsc2U7CiAJCQkJaW5mby0+YW1oYXNnZXRiaXRt YXAgPSBmYWxzZTsKIAkJCQlpbmZvLT5hbWNhbm1hcmtwb3MgPSBmYWxzZTsKIAkJCQlpbmZvLT5h bWNvc3Rlc3RpbWF0ZSA9IE5VTEw7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlv bi9sb2dpY2FsL3JlbGF0aW9uLmMgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3Jl bGF0aW9uLmMKaW5kZXggMGIxZDgwYjViLi4wZDBiZDQ2OGYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNr ZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvcmVsYXRpb24uYworKysgYi9zcmMvYmFja2VuZC9yZXBs aWNhdGlvbi9sb2dpY2FsL3JlbGF0aW9uLmMKQEAgLTgzNiw2ICs4MzYsNyBAQCBJc0luZGV4VXNh YmxlRm9yUmVwbGljYUlkZW50aXR5RnVsbChSZWxhdGlvbiBpZHhyZWwsIEF0dHJNYXAgKmF0dHJt YXApCiB7CiAJQXR0ck51bWJlcglrZXljb2w7CiAJb2lkdmVjdG9yICAqaW5kY2xhc3M7CisJY29u c3QgSW5kZXhBbVJvdXRpbmUgKmFtcm91dGluZTsKIAogCS8qIFRoZSBpbmRleCBtdXN0IG5vdCBi ZSBhIHBhcnRpYWwgaW5kZXggKi8KIAlpZiAoIWhlYXBfYXR0aXNudWxsKGlkeHJlbC0+cmRfaW5k ZXh0dXBsZSwgQW51bV9wZ19pbmRleF9pbmRwcmVkLCBOVUxMKSkKQEAgLTg4NywxMCArODg4LDEy IEBAIElzSW5kZXhVc2FibGVGb3JSZXBsaWNhSWRlbnRpdHlGdWxsKFJlbGF0aW9uIGlkeHJlbCwg QXR0ck1hcCAqYXR0cm1hcCkKIAkJcmV0dXJuIGZhbHNlOwogCiAJLyoKLQkgKiBUaGUgZ2l2ZW4g aW5kZXggYWNjZXNzIG1ldGhvZCBtdXN0IGltcGxlbWVudCAiYW1nZXR0dXBsZSIsIHdoaWNoIHdp bGwKLQkgKiBiZSB1c2VkIGxhdGVyIHRvIGZldGNoIHRoZSB0dXBsZXMuICBTZWUgUmVsYXRpb25G aW5kUmVwbFR1cGxlQnlJbmRleCgpLgorCSAqIFRoZSBnaXZlbiBpbmRleCBhY2Nlc3MgbWV0aG9k IG11c3QgaW1wbGVtZW50ICJhbWdldHR1cGxlIiBvcgorCSAqICJhbWdldGJhdGNoIiwgd2hpY2gg d2lsbCBiZSB1c2VkIGxhdGVyIHRvIGZldGNoIHRoZSB0dXBsZXMuICBTZWUKKwkgKiBSZWxhdGlv bkZpbmRSZXBsVHVwbGVCeUluZGV4KCkuCiAJICovCi0JaWYgKEdldEluZGV4QW1Sb3V0aW5lQnlB bUlkKGlkeHJlbC0+cmRfcmVsLT5yZWxhbSwgZmFsc2UpLT5hbWdldHR1cGxlID09IE5VTEwpCisJ YW1yb3V0aW5lID0gR2V0SW5kZXhBbVJvdXRpbmVCeUFtSWQoaWR4cmVsLT5yZF9yZWwtPnJlbGFt LCBmYWxzZSk7CisJaWYgKGFtcm91dGluZS0+YW1nZXR0dXBsZSA9PSBOVUxMICYmIGFtcm91dGlu ZS0+YW1nZXRiYXRjaCA9PSBOVUxMKQogCQlyZXR1cm4gZmFsc2U7CiAKIAlyZXR1cm4gdHJ1ZTsK ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9hbXV0aWxzLmMgYi9zcmMvYmFja2Vu ZC91dGlscy9hZHQvYW11dGlscy5jCmluZGV4IGM4MWZiNjFhMC4uZGRmZDFiNTVjIDEwMDY0NAot LS0gYS9zcmMvYmFja2VuZC91dGlscy9hZHQvYW11dGlscy5jCisrKyBiL3NyYy9iYWNrZW5kL3V0 aWxzL2FkdC9hbXV0aWxzLmMKQEAgLTM2MywxMCArMzYzLDExIEBAIGluZGV4YW1fcHJvcGVydHko RnVuY3Rpb25DYWxsSW5mbyBmY2luZm8sCiAJCQkJUEdfUkVUVVJOX0JPT0wocm91dGluZS0+YW1j bHVzdGVyYWJsZSk7CiAKIAkJCWNhc2UgQU1QUk9QX0lOREVYX1NDQU46Ci0JCQkJUEdfUkVUVVJO X0JPT0wocm91dGluZS0+YW1nZXR0dXBsZSA/IHRydWUgOiBmYWxzZSk7CisJCQkJUEdfUkVUVVJO X0JPT0wocm91dGluZS0+YW1nZXR0dXBsZSAhPSBOVUxMIHx8CisJCQkJCQkJICAgcm91dGluZS0+ YW1nZXRiYXRjaCAhPSBOVUxMKTsKIAogCQkJY2FzZSBBTVBST1BfQklUTUFQX1NDQU46Ci0JCQkJ UEdfUkVUVVJOX0JPT0wocm91dGluZS0+YW1nZXRiaXRtYXAgPyB0cnVlIDogZmFsc2UpOworCQkJ CVBHX1JFVFVSTl9CT09MKHJvdXRpbmUtPmFtZ2V0Yml0bWFwICE9IE5VTEwpOwogCiAJCQljYXNl IEFNUFJPUF9CQUNLV0FSRF9TQ0FOOgogCQkJCVBHX1JFVFVSTl9CT09MKHJvdXRpbmUtPmFtY2Fu YmFja3dhcmQpOwpAQCAtMzkyLDcgKzM5Myw4IEBAIGluZGV4YW1fcHJvcGVydHkoRnVuY3Rpb25D YWxsSW5mbyBmY2luZm8sCiAJCQlQR19SRVRVUk5fQk9PTChyb3V0aW5lLT5hbWNhbm11bHRpY29s KTsKIAogCQljYXNlIEFNUFJPUF9DQU5fRVhDTFVERToKLQkJCVBHX1JFVFVSTl9CT09MKHJvdXRp bmUtPmFtZ2V0dHVwbGUgPyB0cnVlIDogZmFsc2UpOworCQkJUEdfUkVUVVJOX0JPT0wocm91dGlu ZS0+YW1nZXR0dXBsZSAhPSBOVUxMIHx8CisJCQkJCQkgICByb3V0aW5lLT5hbWdldGJhdGNoICE9 IE5VTEwpOwogCiAJCWNhc2UgQU1QUk9QX0NBTl9JTkNMVURFOgogCQkJUEdfUkVUVVJOX0JPT0wo cm91dGluZS0+YW1jYW5pbmNsdWRlKTsKZGlmZiAtLWdpdCBhL2NvbnRyaWIvYmxvb20vYmx1dGls cy5jIGIvY29udHJpYi9ibG9vbS9ibHV0aWxzLmMKaW5kZXggNTExMWNkYzZkLi42MTM5ZmI5NTkg MTAwNjQ0Ci0tLSBhL2NvbnRyaWIvYmxvb20vYmx1dGlscy5jCisrKyBiL2NvbnRyaWIvYmxvb20v Ymx1dGlscy5jCkBAIC0xNDYsMTAgKzE0NiwxMiBAQCBibGhhbmRsZXIoUEdfRlVOQ1RJT05fQVJH UykKIAkJLmFtYmVnaW5zY2FuID0gYmxiZWdpbnNjYW4sCiAJCS5hbXJlc2NhbiA9IGJscmVzY2Fu LAogCQkuYW1nZXR0dXBsZSA9IE5VTEwsCisJCS5hbWdldGJhdGNoID0gTlVMTCwKKwkJLmFtdW5n dWFyZGJhdGNoID0gTlVMTCwKKwkJLmFta2lsbGl0ZW1zYmF0Y2ggPSBOVUxMLAogCQkuYW1nZXRi aXRtYXAgPSBibGdldGJpdG1hcCwKIAkJLmFtZW5kc2NhbiA9IGJsZW5kc2NhbiwKLQkJLmFtbWFy a3BvcyA9IE5VTEwsCi0JCS5hbXJlc3RycG9zID0gTlVMTCwKKwkJLmFtcG9zcmVzZXQgPSBOVUxM LAogCQkuYW1lc3RpbWF0ZXBhcmFsbGVsc2NhbiA9IE5VTEwsCiAJCS5hbWluaXRwYXJhbGxlbHNj YW4gPSBOVUxMLAogCQkuYW1wYXJhbGxlbHJlc2NhbiA9IE5VTEwsCmRpZmYgLS1naXQgYS9kb2Mv c3JjL3NnbWwvaW5kZXhhbS5zZ21sIGIvZG9jL3NyYy9zZ21sL2luZGV4YW0uc2dtbAppbmRleCBm NDhkYTMxODUuLjMyMmJhNmI3NSAxMDA2NDQKLS0tIGEvZG9jL3NyYy9zZ21sL2luZGV4YW0uc2dt bAorKysgYi9kb2Mvc3JjL3NnbWwvaW5kZXhhbS5zZ21sCkBAIC0xNjcsMTAgKzE2NywxMiBAQCB0 eXBlZGVmIHN0cnVjdCBJbmRleEFtUm91dGluZQogICAgIGFtYmVnaW5zY2FuX2Z1bmN0aW9uIGFt YmVnaW5zY2FuOwogICAgIGFtcmVzY2FuX2Z1bmN0aW9uIGFtcmVzY2FuOwogICAgIGFtZ2V0dHVw bGVfZnVuY3Rpb24gYW1nZXR0dXBsZTsgICAgIC8qIGNhbiBiZSBOVUxMICovCisgICAgYW1nZXRi YXRjaF9mdW5jdGlvbiBhbWdldGJhdGNoOyAvKiBjYW4gYmUgTlVMTCAqLworICAgIGFtdW5ndWFy ZGJhdGNoX2Z1bmN0aW9uIGFtdW5ndWFyZGJhdGNoOyAvKiBjYW4gYmUgTlVMTCAqLworICAgIGFt a2lsbGl0ZW1zYmF0Y2hfZnVuY3Rpb24gYW1raWxsaXRlbXNiYXRjaDsJLyogY2FuIGJlIE5VTEwg Ki8KICAgICBhbWdldGJpdG1hcF9mdW5jdGlvbiBhbWdldGJpdG1hcDsgICAvKiBjYW4gYmUgTlVM TCAqLwogICAgIGFtZW5kc2Nhbl9mdW5jdGlvbiBhbWVuZHNjYW47Ci0gICAgYW1tYXJrcG9zX2Z1 bmN0aW9uIGFtbWFya3BvczsgICAgICAgLyogY2FuIGJlIE5VTEwgKi8KLSAgICBhbXJlc3RycG9z X2Z1bmN0aW9uIGFtcmVzdHJwb3M7ICAgICAvKiBjYW4gYmUgTlVMTCAqLworICAgIGFtcG9zcmVz ZXRfZnVuY3Rpb24gYW1wb3NyZXNldDsgLyogY2FuIGJlIE5VTEwgKi8KIAogICAgIC8qIGludGVy ZmFjZSBmdW5jdGlvbnMgdG8gc3VwcG9ydCBwYXJhbGxlbCBpbmRleCBzY2FucyAqLwogICAgIGFt ZXN0aW1hdGVwYXJhbGxlbHNjYW5fZnVuY3Rpb24gYW1lc3RpbWF0ZXBhcmFsbGVsc2NhbjsgICAg LyogY2FuIGJlIE5VTEwgKi8KQEAgLTY3Niw4ICs2NzgsMzggQEAgYW1iZWdpbnNjYW4gKFJlbGF0 aW9uIGluZGV4UmVsYXRpb24sCiAgICA8ZW1waGFzaXM+bXVzdDwvZW1waGFzaXM+IGNyZWF0ZSB0 aGlzIHN0cnVjdCBieSBjYWxsaW5nCiAgICA8ZnVuY3Rpb24+UmVsYXRpb25HZXRJbmRleFNjYW4o KTwvZnVuY3Rpb24+LiAgSW4gbW9zdCBjYXNlcwogICAgPGZ1bmN0aW9uPmFtYmVnaW5zY2FuPC9m dW5jdGlvbj4gZG9lcyBsaXR0bGUgYmV5b25kIG1ha2luZyB0aGF0IGNhbGwgYW5kIHBlcmhhcHMK LSAgIGFjcXVpcmluZyBsb2NrczsKKyAgIGFjcXVpcmluZyBsb2NrcyBhbmQgaW5pdGlhbGl6aW5n IHN0YW5kYXJkIDxzdHJ1Y3RuYW1lPkluZGV4U2NhbkRlc2M8L3N0cnVjdG5hbWU+IGZpZWxkczsK ICAgIHRoZSBpbnRlcmVzdGluZyBwYXJ0cyBvZiBpbmRleC1zY2FuIHN0YXJ0dXAgYXJlIGluIDxm dW5jdGlvbj5hbXJlc2NhbjwvZnVuY3Rpb24+LgorICAgSW5kZXggYWNjZXNzIG1ldGhvZHMgdGhh dCB1c2UgdGhlIDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5jdGlvbj4gaW50ZXJmYWNlCisgICBt dXN0IGFsc28gc2V0IHRoZSBmb2xsb3dpbmcgZmllbGRzIGluIHRoZSBzY2FuIGRlc2NyaXB0b3I6 CisgICA8aXRlbWl6ZWRsaXN0PgorICAgIDxsaXN0aXRlbT4KKyAgICAgPHBhcmE+CisgICAgICA8 bGl0ZXJhbD5zY2FuLSZndDttYXhpdGVtc2JhdGNoPC9saXRlcmFsPjogdGhlIG1heGltdW0gbnVt YmVyIG9mIGl0ZW1zCisgICAgICB0aGF0IGNhbiBhcHBlYXIgaW4gYSBzaW5nbGUgYmF0Y2ggKHR5 cGljYWxseSBkZXJpdmVkIGZyb20gdGhlIGluZGV4IHBhZ2UKKyAgICAgIHNpemUsIGUuZy4sIDxs aXRlcmFsPk1heEluZGV4VHVwbGVzUGVyUGFnZTwvbGl0ZXJhbD4pLgorICAgICA8L3BhcmE+Cisg ICAgPC9saXN0aXRlbT4KKyAgICA8bGlzdGl0ZW0+CisgICAgIDxwYXJhPgorICAgICAgPGxpdGVy YWw+c2Nhbi0mZ3Q7YmF0Y2hfaW5kZXhfb3BhcXVlX3NpemU8L2xpdGVyYWw+OiB0aGUKKyAgICAg IDxmdW5jdGlvbj5NQVhBTElHTjwvZnVuY3Rpb24+J2Qgc2l6ZSBvZiB0aGUgaW5kZXggQU0ncyBw ZXItYmF0Y2ggb3BhcXVlCisgICAgICBhcmVhLiAgRWFjaCBiYXRjaCBhbGxvY2F0aW9uIHJlc2Vy dmVzIHRoaXMgbXVjaCBzcGFjZSBpbW1lZGlhdGVseSBiZWZvcmUKKyAgICAgIHRoZSA8c3RydWN0 bmFtZT5JbmRleFNjYW5CYXRjaERhdGE8L3N0cnVjdG5hbWU+IHBvaW50ZXIsIGZvciB1c2UgYnkg dGhlCisgICAgICBpbmRleCBBTSB0byBzdG9yZSBwZXItcGFnZSBuYXZpZ2F0aW9uIHN0YXRlIChl LmcuLCBiYXRjaCBpbmRleCBwYWdlJ3MKKyAgICAgIGJ1ZmZlciBwaW4gYW5kIHNpYmxpbmcgcGFn ZSBsaW5rcykuCisgICAgIDwvcGFyYT4KKyAgICA8L2xpc3RpdGVtPgorICAgIDxsaXN0aXRlbT4K KyAgICAgPHBhcmE+CisgICAgICA8bGl0ZXJhbD5zY2FuLSZndDtiYXRjaF90dXBsZXNfd29ya3Nw YWNlPC9saXRlcmFsPjogdGhlIHNpemUgaW4gYnl0ZXMKKyAgICAgIG9mIHRoZSBwZXItYmF0Y2gg dHVwbGUgc3RvcmFnZSB3b3Jrc3BhY2UgdXNlZCBmb3IgaW5kZXgtb25seSBzY2FucworICAgICAg KHR5cGljYWxseSA8bGl0ZXJhbD5CTENLU1o8L2xpdGVyYWw+KSwgb3IgMCBpZiB0aGUgaW5kZXgg QU0gZG9lcyBub3QKKyAgICAgIHN1cHBvcnQgaW5kZXgtb25seSBzY2Fucy4gIFRoZSB3b3Jrc3Bh Y2UgaXMgYWNjZXNzaWJsZSB2aWEKKyAgICAgIDxzdHJ1Y3RmaWVsZD5iYXRjaC0mZ3Q7Y3VyclR1 cGxlczwvc3RydWN0ZmllbGQ+LgorICAgICA8L3BhcmE+CisgICAgPC9saXN0aXRlbT4KKyAgIDwv aXRlbWl6ZWRsaXN0PgogICA8L3BhcmE+CiAKICAgPHBhcmE+CkBAIC03NDksNiArNzgxLDI2NCBA QCBhbWdldHR1cGxlIChJbmRleFNjYW5EZXNjIHNjYW4sCiAgICA8c3RydWN0ZmllbGQ+YW1nZXR0 dXBsZTwvc3RydWN0ZmllbGQ+IGZpZWxkIGluIGl0cyA8c3RydWN0bmFtZT5JbmRleEFtUm91dGlu ZTwvc3RydWN0bmFtZT4KICAgIHN0cnVjdCBtdXN0IGJlIHNldCB0byBOVUxMLgogICA8L3BhcmE+ CisgIDxub3RlPgorICAgPHBhcmE+CisgICAgQXMgb2YgPHByb2R1Y3RuYW1lPlBvc3RncmVTUUw8 L3Byb2R1Y3RuYW1lPiB2ZXJzaW9uIDE5LCBtYXJrL3Jlc3RvcmUgb2YKKyAgICBzY2FuIHBvc2l0 aW9ucyBpcyBvbmx5IHN1cHBvcnRlZCBmb3Igc2NhbnMgdGhhdCB1c2UgdGhlCisgICAgPGZ1bmN0 aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPiBpbnRlcmZhY2UuCisgICAgPGZ1bmN0aW9uPmFtZ2V0 dHVwbGU8L2Z1bmN0aW9uPiBzY2FucyBkbyBub3Qgc3VwcG9ydCBtYXJrL3Jlc3RvcmUuICBUaGUK KyAgICBtYXJrL3Jlc3RvcmUgaW1wbGVtZW50YXRpb24gbGl2ZXMgaW4gdGhlIHRhYmxlIEFNLCB0 aHJvdWdoIGl0cworICAgIDxmdW5jdGlvbj50YWJsZV9pbmRleF9mZXRjaF9tYXJrcG9zPC9mdW5j dGlvbj4gYW5kCisgICAgPGZ1bmN0aW9uPnRhYmxlX2luZGV4X2ZldGNoX3Jlc3RycG9zPC9mdW5j dGlvbj4gaW1wbGVtZW50YXRpb25zLgorICAgPC9wYXJhPgorICA8L25vdGU+CisKKyAgPHBhcmE+ Cis8cHJvZ3JhbWxpc3Rpbmc+CitJbmRleFNjYW5CYXRjaAorYW1nZXRiYXRjaCAoSW5kZXhTY2Fu RGVzYyBzY2FuLAorICAgICAgICAgICAgSW5kZXhTY2FuQmF0Y2ggcHJpb3JiYXRjaCwKKyAgICAg ICAgICAgIFNjYW5EaXJlY3Rpb24gZGlyZWN0aW9uKTsKKzwvcHJvZ3JhbWxpc3Rpbmc+CisgICBS ZXR1cm4gdGhlIG5leHQgYmF0Y2ggb2YgaW5kZXggdHVwbGVzIGluIHRoZSBnaXZlbiBzY2FuLCBt b3ZpbmcgaW4gdGhlCisgICBnaXZlbiBkaXJlY3Rpb24gKGZvcndhcmQgb3IgYmFja3dhcmQgaW4g dGhlIGluZGV4KS4gIFJldHVybnMgYW4gaW5zdGFuY2Ugb2YKKyAgIDx0eXBlPkluZGV4U2NhbkJh dGNoPC90eXBlPiB3aXRoIGluZGV4IHR1cGxlcyBsb2FkZWQsIG9yCisgICA8bGl0ZXJhbD5OVUxM PC9saXRlcmFsPiBpZiB0aGVyZSBhcmUgbm8gbW9yZSBpbmRleCB0dXBsZXMgaW4gdGhlIGdpdmVu CisgICBzY2FuIGRpcmVjdGlvbi4KKyAgPC9wYXJhPgorCisgIDxwYXJhPgorICAgVGhlIDxmdW5j dGlvbj5hbWdldGJhdGNoPC9mdW5jdGlvbj4gaW50ZXJmYWNlIGlzIGFuIGFsdGVybmF0aXZlIHRv CisgICA8ZnVuY3Rpb24+YW1nZXR0dXBsZTwvZnVuY3Rpb24+IHRoYXQgcmV0dXJucyBtYXRjaGlu ZyBpbmRleCBlbnRyaWVzIGluIGJhdGNoZXMKKyAgIHJhdGhlciB0aGFuIG9uZSBhdCBhIHRpbWUu ICBCeSByZXR1cm5pbmcgYWxsIG1hdGNoaW5nIGluZGV4IGVudHJpZXMgZnJvbSBhCisgICBzaW5n bGUgaW5kZXggcGFnZSB0b2dldGhlciwgdGhlIHRhYmxlIEFNIGdhaW5zIHZpc2liaWxpdHkgaW50 byB3aGljaCB0YWJsZQorICAgYmxvY2tzIHdpbGwgYmUgbmVlZGVkIGluIHRoZSBuZWFyIGZ1dHVy ZS4KKyAgPC9wYXJhPgorCisgIDxwYXJhPgorICAgVGhlIHRhYmxlIEFNIHBhc3NlcyA8bGl0ZXJh bD5wcmlvcmJhdGNoPC9saXRlcmFsPiB0byBpbmRpY2F0ZSB3aGVyZSB0aGUKKyAgIGluZGV4IEFN IHNob3VsZCBjb250aW51ZSBzY2FubmluZyBmcm9tIChvciA8bGl0ZXJhbD5OVUxMPC9saXRlcmFs PiBvbiB0aGUKKyAgIGZpcnN0IGNhbGwgZm9yIHRoZSBzY2FuKS4gIFRoZSBpbmRleCBBTSB1c2Vz IGluZm9ybWF0aW9uIGZyb20KKyAgIDxsaXRlcmFsPnByaW9yYmF0Y2g8L2xpdGVyYWw+IHRvIGRl dGVybWluZSB3aGljaCBpbmRleCBwYWdlIHRvIHJlYWQgbmV4dC4KKyAgIFVubGlrZSA8ZnVuY3Rp b24+YW1nZXR0dXBsZTwvZnVuY3Rpb24+LCB3aGVyZSB0aGUgaW5kZXggQU0gbWFpbnRhaW5zIGl0 cworICAgb3duIHNjYW4gcG9zaXRpb24sIHdpdGggPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0 aW9uPiBpdCBpcyB0aGUgY2FsbGVyCisgICB0aGF0IGNvbnRyb2xzIHRoZSBwcm9ncmVzcyBvZiB0 aGUgc2NhbiB0aHJvdWdoIHRoZSBpbmRleC4gIFRoZSBjYWxsZXIKKyAgIHdpbGwgdHlwaWNhbGx5 IHBhc3MgdGhlIG1vc3QgcmVjZW50bHkgcmV0dXJuZWQgYmF0Y2gsIGJ1dCB0aGlzIGlzIG5vdAor ICAgZ3VhcmFudGVlZCAmbWRhc2g7IGZvciBleGFtcGxlLCBmb2xsb3dpbmcgdGhlIHJlc3RvcmF0 aW9uIG9mIGEgbWFya2VkCisgICBwb3NpdGlvbiwgYW4gZWFybGllciBiYXRjaCBtYXkgYmUgcGFz c2VkIGluc3RlYWQuCisgIDwvcGFyYT4KKworICA8cGFyYT4KKyAgIEEgYmF0Y2ggcmV0dXJuZWQg YnkgPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPiBpcyBhc3NvY2lhdGVkIHdpdGggYW4K KyAgIGluZGV4IHBhZ2UgY29udGFpbmluZyBhdCBsZWFzdCBvbmUgbWF0Y2hpbmcgaXRlbS90dXBs ZS4gIEEgYnVmZmVyCisgICBwaW4gY2FuIGJlIGhlbGQgb250byBieSB0aGUgdGFibGUgQU0gYXMg YW4gaW50ZXJsb2NrIGFnYWluc3QgY29uY3VycmVudCBUSUQKKyAgIHJlY3ljbGluZyBieSA8Y29t bWFuZD5WQUNVVU08L2NvbW1hbmQ+LiAgVGhlIHRhYmxlIEFNIGRyb3BzIHRoaXMgaW50ZXJsb2Nr CisgICBieSBjYWxsaW5nIDxmdW5jdGlvbj5hbXVuZ3VhcmRiYXRjaDwvZnVuY3Rpb24+IHdoZW4g aXQgaXMgc2FmZSB0byBkbyBzby4KKyAgIFNlZSA8eHJlZiBsaW5rZW5kPSJpbmRleC1sb2NraW5n Ii8+IGZvciBkZXRhaWxzIG9uIGJ1ZmZlciBwaW4gbWFuYWdlbWVudAorICAgZHVyaW5nIGluZGV4 IHNjYW5zLgorICA8L3BhcmE+CisKKyAgPHBhcmE+CisgICBBIDx0eXBlPkluZGV4U2NhbkJhdGNo PC90eXBlPiB0aGF0IGlzIHJldHVybmVkIGJ5CisgICA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVu Y3Rpb24+IGlzIG5vIGxvbmdlciBtYW5hZ2VkIGJ5IHRoZSBhY2Nlc3MgbWV0aG9kLgorICAgSXQg aXMgdXAgdG8gdGhlIHRhYmxlIEFNIGNhbGxlciB0byBkZWNpZGUgd2hlbiBpdCBzaG91bGQgYmUg ZnJlZWQgKHZpYQorICAgPGZ1bmN0aW9uPnRhYmxlYW1fdXRpbF9mcmVlX2JhdGNoPC9mdW5jdGlv bj4pLiAgTm90ZSBhbHNvIHRoYXQKKyAgIDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5jdGlvbj4g ZnVuY3Rpb25zIG11c3QgbmV2ZXIgbW9kaWZ5IHRoZQorICAgPHN0cnVjdGZpZWxkPnByaW9yYmF0 Y2g8L3N0cnVjdGZpZWxkPiBwYXJhbWV0ZXIuICBUaGUgY29yZQorICAgPGZpbGVuYW1lPnNyYy9i YWNrZW5kL2FjY2Vzcy9uYnRyZWUvPC9maWxlbmFtZT4gaW1wbGVtZW50YXRpb24gcHJvdmlkZXMg YQorICAgcmVmZXJlbmNlIGV4YW1wbGVzIG9mIHRoZSA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVu Y3Rpb24+IGludGVyZmFjZS4KKyAgPC9wYXJhPgorCisgIDxwYXJhPgorICAgVGhlIHNhbWUgY2F2 ZWF0cyBkZXNjcmliZWQgZm9yIDxmdW5jdGlvbj5hbWdldHR1cGxlPC9mdW5jdGlvbj4gYXBwbHkg aGVyZQorICAgdG9vOiBhbiBlbnRyeSBpbiB0aGUgcmV0dXJuZWQgYmF0Y2ggbWVhbnMgb25seSB0 aGF0IHRoZSBpbmRleCBjb250YWlucworICAgYW4gZW50cnkgdGhhdCBtYXRjaGVzIHRoZSBzY2Fu IGtleXMsIG5vdCB0aGF0IHRoZSB0dXBsZSBuZWNlc3NhcmlseSBzdGlsbAorICAgZXhpc3RzIGlu IHRoZSBoZWFwIG9yIHdpbGwgcGFzcyB0aGUgY2FsbGVyJ3Mgc25hcHNob3QgdGVzdC4KKyAgPC9w YXJhPgorCisgIDxwYXJhPgorICAgSW5kZXggYWNjZXNzIG1ldGhvZHMgdXNpbmcgPGZ1bmN0aW9u PmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPiBtdXN0IHNldAorICAgPGxpdGVyYWw+c2Nhbi0mZ3Q7eHNf cmVjaGVjazwvbGl0ZXJhbD4gdG8gaW5kaWNhdGUgd2hldGhlciByZWNoZWNraW5nIG9mCisgICBz Y2FuIGtleXMgaXMgcmVxdWlyZWQsIGluIHRoZSBzYW1lIHdheSBhcyA8ZnVuY3Rpb24+YW1nZXR0 dXBsZTwvZnVuY3Rpb24+CisgICBkb2VzLiBIb3dldmVyLCA8bGl0ZXJhbD5zY2FuLSZndDt4c19y ZWNoZWNrPC9saXRlcmFsPiBtdXN0IGJlIHNldCBjb25zaXN0ZW50bHkKKyAgIGZvciBhbiBlbnRp cmUgc2NhbiByYXRoZXIgdGhhbiB2YXJ5aW5nIG9uIGEgcGVyLXR1cGxlIGJhc2lzLiBUaGlzIGlz IGEga2V5CisgICBkaWZmZXJlbmNlIGZyb20gPGZ1bmN0aW9uPmFtZ2V0dHVwbGU8L2Z1bmN0aW9u Piwgd2hpY2ggY2FuIHNldAorICAgPGxpdGVyYWw+c2Nhbi0mZ3Q7eHNfcmVjaGVjazwvbGl0ZXJh bD4gaW5kZXBlbmRlbnRseSBmb3IgZWFjaCB0dXBsZSBpdCByZXR1cm5zLgorICAgSW5kZXggYWNj ZXNzIG1ldGhvZHMgdGhhdCByZXF1aXJlIGdyYW51bGFyIGNvbnRyb2wgb3ZlcgorICAgPGxpdGVy YWw+c2Nhbi0mZ3Q7eHNfcmVjaGVjazwvbGl0ZXJhbD4gbXVzdCB1c2UgdGhlIDxmdW5jdGlvbj5h bWdldHR1cGxlPC9mdW5jdGlvbj4KKyAgIGludGVyZmFjZSBpbnN0ZWFkIG9mIDxmdW5jdGlvbj5h bWdldGJhdGNoPC9mdW5jdGlvbj4uCisgIDwvcGFyYT4KKworICA8cGFyYT4KKyAgIFNpbWlsYXJs eSwgdGhlIDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5jdGlvbj4gaW50ZXJmYWNlIGRvZXMgbm90 IGN1cnJlbnRseQorICAgc3VwcG9ydCBpbmRleC1vbmx5IHNjYW5zIHRoYXQgcmV0dXJuIGRhdGEg aW4gdGhlIGZvcm0gb2YgYQorICAgPHN0cnVjdG5hbWU+SGVhcFR1cGxlPC9zdHJ1Y3RuYW1lPiBw b2ludGVyLiAgSW5kZXgtb25seSBzY2FucyB3b3JrIGJ5CisgICBjb3B5aW5nIDxzdHJ1Y3RuYW1l PkluZGV4VHVwbGU8L3N0cnVjdG5hbWU+IHJlY29yZHMgZnJvbSBpbmRleCBwYWdlcyBpbnRvIGEK KyAgIGxvY2FsIGJ1ZmZlciBhc3NvY2lhdGVkIHdpdGggZWFjaCBiYXRjaC4gIDxsaXRlcmFsPnhz X2l0dXBkZXNjPC9saXRlcmFsPgorICAgd29ya3MgaW4gdGhlIHNhbWUgd2F5IGFzIGFscmVhZHkg ZGVzY3JpYmVkIGZvciA8ZnVuY3Rpb24+YW1nZXR0dXBsZTwvZnVuY3Rpb24+LgorICAgVGhlIGlu ZGV4IGFjY2VzcyBtZXRob2QgbXVzdCBub3Qgc2V0IHRoZSA8bGl0ZXJhbD5zY2FuLSZndDt4c19p dHVwPC9saXRlcmFsPgorICAgZmllbGQgaXRzZWxmLgorICAgV2l0aCA8ZnVuY3Rpb24+YW1nZXR0 dXBsZTwvZnVuY3Rpb24+LCB0aGUgaW5kZXggQU0gc2V0cworICAgPGxpdGVyYWw+c2Nhbi0mZ3Q7 eHNfaGl0dXA8L2xpdGVyYWw+IHRvIHBvaW50IHRvIGEgcmVjb25zdHJ1Y3RlZAorICAgPHN0cnVj dG5hbWU+SGVhcFR1cGxlPC9zdHJ1Y3RuYW1lPiB3aG9zZSBsaWZldGltZSBleHRlbmRzIHVudGls IHRoZSBuZXh0CisgICA8ZnVuY3Rpb24+YW1nZXR0dXBsZTwvZnVuY3Rpb24+IGNhbGwgJm1kYXNo OyBvbmx5IG9uZSB0dXBsZSBpcyB2YWxpZCBhdCBhCisgICB0aW1lLiAgV2l0aCA8ZnVuY3Rpb24+ YW1nZXRiYXRjaDwvZnVuY3Rpb24+LCBtdWx0aXBsZSBiYXRjaGVzIGFyZSBoZWxkIG9wZW4KKyAg IHNpbXVsdGFuZW91c2x5IGFuZCBpdGVtcyBhcmUgY29uc3VtZWQgYXN5bmNocm9ub3VzbHkgYnkg dGhlIHRhYmxlIEFNLCBzbworICAgdGhlcmUgaXMgbm8gZXF1aXZhbGVudCBzaW5nbGUtdHVwbGUg bGlmZXRpbWUgZm9yIHBlci1pdGVtCisgICA8c3RydWN0bmFtZT5IZWFwVHVwbGU8L3N0cnVjdG5h bWU+IHBvaW50ZXJzLiAgVGhlIGJhdGNoIGluZnJhc3RydWN0dXJlCisgICBwcm92aWRlcyBwZXIt YmF0Y2ggc3RvcmFnZSBmb3IgPHN0cnVjdG5hbWU+SW5kZXhUdXBsZTwvc3RydWN0bmFtZT4gY29w aWVzLAorICAgYnV0IGhhcyBubyBhbmFsb2dvdXMgbWVjaGFuaXNtIGZvciA8c3RydWN0bmFtZT5I ZWFwVHVwbGU8L3N0cnVjdG5hbWU+IGRhdGEKKyAgICh1c2VkIGJ5IHNvbWUgaW5kZXggQU1zIGZv ciByZWNvbnN0cnVjdGVkIHR1cGxlcyB0aGF0IG1pZ2h0IG5vdCBmaXQgaW4KKyAgIDxzdHJ1Y3Ru YW1lPkluZGV4VHVwbGU8L3N0cnVjdG5hbWU+IGZvcm1hdCkuICBUaGlzIGxpbWl0YXRpb24gY291 bGQgYmUKKyAgIGFkZHJlc3NlZCBpbiBhIGZ1dHVyZSB2ZXJzaW9uIG9mIDxwcm9kdWN0bmFtZT5Q b3N0Z3JlU1FMPC9wcm9kdWN0bmFtZT4uCisgIDwvcGFyYT4KKworICA8cGFyYT4KKyAgIFRoZSBp bmRleCBhY2Nlc3MgbWV0aG9kIG11c3QgcHJvdmlkZSBlaXRoZXIgPGZ1bmN0aW9uPmFtZ2V0YmF0 Y2g8L2Z1bmN0aW9uPgorICAgb3IgPGZ1bmN0aW9uPmFtZ2V0dHVwbGU8L2Z1bmN0aW9uPiwgYnV0 IG5vdCBib3RoLgorICA8L3BhcmE+CisKKyAgPHBhcmE+CisgICBUaGUgPGZ1bmN0aW9uPmFtZ2V0 YmF0Y2g8L2Z1bmN0aW9uPiBmdW5jdGlvbiBuZWVkIG9ubHkgYmUgcHJvdmlkZWQgaWYgdGhlCisg ICBhY2Nlc3MgbWV0aG9kIHN1cHBvcnRzIDxxdW90ZT5wbGFpbjwvcXVvdGU+IGluZGV4IHNjYW5z LiAgSWYgaXQgZG9lc24ndCwKKyAgIHRoZSA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+ IGZpZWxkIGluIGl0cworICAgPHN0cnVjdG5hbWU+SW5kZXhBbVJvdXRpbmU8L3N0cnVjdG5hbWU+ IHN0cnVjdCBtdXN0IGJlIHNldCB0byBOVUxMLgorICA8L3BhcmE+CisKKyAgPHBhcmE+Cis8cHJv Z3JhbWxpc3Rpbmc+Cit2b2lkCithbXVuZ3VhcmRiYXRjaCAoSW5kZXhTY2FuRGVzYyBzY2FuLAor ICAgICAgICAgICAgICAgIEluZGV4U2NhbkJhdGNoIGJhdGNoKTsKKzwvcHJvZ3JhbWxpc3Rpbmc+ CisgICBDYWxsZWQgYnkgdGhlIHRhYmxlIEFNICh2aWEKKyAgIDxmdW5jdGlvbj50YWJsZWFtX3V0 aWxfdW5ndWFyZF9iYXRjaDwvZnVuY3Rpb24+KSB3aGVuIGl0IGlzIHNhZmUgdG8gZHJvcAorICAg dGhlIFRJRCByZWN5Y2xpbmcgaW50ZXJsb2NrIHRoYXQgdGhlIGluZGV4IEFNIGhvbGRzIG9uIHRo ZSBiYXRjaCdzIGluZGV4CisgICBsZWFmIHBhZ2UsIHdoaWNoIHByZXZlbnRzIGNvbmN1cnJlbnQg VElEIHJlY3ljbGluZyBieQorICAgPGNvbW1hbmQ+VkFDVVVNPC9jb21tYW5kPi4KKyAgIEZvcm1h bGx5LCBhbiBpbmRleCBBTSBtYXkgaG9sZCBhIGRpZmZlcmVudCBraW5kIG9mIGludGVybG9jaywg b3IgbXVsdGlwbGUKKyAgIGludGVybG9ja3MsIGluIGl0cyBwZXItYmF0Y2ggb3BhcXVlIGFyZWEs IGJ1dCBpbiBwcmFjdGljZSB0aGUgYnVpbHQtaW4KKyAgIGluZGV4IEFNIHRoYXQgc3VwcG9ydHMg PGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPiAmbWRhc2g7IEItdHJlZQorICAgJm1kYXNo OyBob2xkcyBhIHNpbmdsZSBidWZmZXIgcGluLiAgU2VlIDx4cmVmIGxpbmtlbmQ9ImluZGV4LWxv Y2tpbmciLz4gZm9yCisgICBkZXRhaWxzIG9uIGJ1ZmZlciBwaW4gbWFuYWdlbWVudCBkdXJpbmcg aW5kZXggc2NhbnMuICBUaGlzIGZ1bmN0aW9uIHdpbGwgYmUKKyAgIGNhbGxlZCBhdCBtb3N0IG9u Y2UgZm9yIGVhY2ggZ3VhcmRlZCBiYXRjaDsgaXQgaXMgbm90IGNhbGxlZCB3aGVuIHRoZSBpbmRl eAorICAgQU0gaGFzIGFscmVhZHkgdW5ndWFyZGVkIHRoZSBiYXRjaCBpdHNlbGYgKGFzIGl0IGRv ZXMgd2hlbgorICAgPHN0cnVjdGZpZWxkPmJhdGNoSW1tZWRpYXRlVW5ndWFyZDwvc3RydWN0Zmll bGQ+IGlzIHRydWUsIHdoaWNoIGlzIHRoZQorICAgY29tbW9uIGNhc2UpLgorICA8L3BhcmE+CisK KyAgPG5vdGU+CisgICA8cGFyYT4KKyAgICBUaGUgaW5kZXggQU0gbWF5IGNob29zZSB0byByZXRh aW4gaXRzIG93biBidWZmZXIgcGlucyB3aGVuIHRoaXMgc2VydmVzIGFuCisgICAgaW50ZXJuYWwg cHVycG9zZSAoZm9yIGV4YW1wbGUsIG1haW50YWluaW5nIGEgZGVzY2VudCBzdGFjayBvZiBwaW5u ZWQgaW5kZXgKKyAgICBwYWdlcyBmb3IgcmV1c2UgYWNyb3NzIDxmdW5jdGlvbj5hbWdldGJhdGNo PC9mdW5jdGlvbj4gY2FsbHMpLiAgSG93ZXZlciwKKyAgICBhbnkgc2NoZW1lIHRoYXQgcmV0YWlu cyBidWZmZXIgcGlucyBtYW5hZ2VkIGJ5IHRoZSBpbmRleCBBTSBtdXN0IGJlIHN1cmUKKyAgICB0 byBmcmVlIHRoZSBwaW5zIGF0IGFuIG9wcG9ydHVuZSBwb2ludCAoYXQgYSBtaW5pbXVtIHdoZW5l dmVyCisgICAgPGZ1bmN0aW9uPmFtZW5kc2NhbjwvZnVuY3Rpb24+IGlzIGNhbGxlZCwgYW5kIHR5 cGljYWxseSB3aGVuCisgICAgPGZ1bmN0aW9uPmFtcmVzY2FuPC9mdW5jdGlvbj4gaXMgY2FsbGVk KS4gIEl0IG11c3QgYWxzbyBrZWVwIHRoZSBudW1iZXIgb2YKKyAgICByZXRhaW5lZCBwaW5zIGZp eGVkIGFuZCBzbWFsbC4KKyAgIDwvcGFyYT4KKyAgPC9ub3RlPgorCisgIDxwYXJhPgorICAgVGhl IDxmdW5jdGlvbj5hbXVuZ3VhcmRiYXRjaDwvZnVuY3Rpb24+IGZ1bmN0aW9uIGlzIHJlcXVpcmVk IGZvciBhbnkgaW5kZXgKKyAgIGFjY2VzcyBtZXRob2QgdGhhdCBwcm92aWRlcyA8ZnVuY3Rpb24+ YW1nZXRiYXRjaDwvZnVuY3Rpb24+LgorICA8L3BhcmE+CisKKyAgPHBhcmE+Cis8cHJvZ3JhbWxp c3Rpbmc+Cit2b2lkCithbWtpbGxpdGVtc2JhdGNoIChJbmRleFNjYW5EZXNjIHNjYW4sCisgICAg ICAgICAgICAgICAgICBJbmRleFNjYW5CYXRjaCBiYXRjaCk7Cis8L3Byb2dyYW1saXN0aW5nPgor ICAgQ2FsbGVkIGJ5IHRoZSB0YWJsZSBBTSB3aGVuIGl0IGhhcyBmaW5pc2hlZCBwcm9jZXNzaW5n IGEgYmF0Y2ggdGhhdAorICAgY29udGFpbnMgZGVhZCBpdGVtcywgdG8gc2V0IDxsaXRlcmFsPkxQ X0RFQUQ8L2xpdGVyYWw+IGJpdHMgaW4gdGhlIGJhdGNoJ3MKKyAgIGluZGV4IHBhZ2UuICBUaGUg YmF0Y2gncyBpbmRleCBwYWdlIHdpbGwgbm90IGJlIGxvY2tlZCBieSB0aGUgY2FsbGVyOyB0aGUK KyAgIGluZGV4IEFNIG11c3QgYWNxdWlyZSBhbmQgcmVsZWFzZSBpdHMgb3duIGxvY2sgKGFuZCBw aW4pIG9uIHRoZSBpbmRleCBwYWdlLgorICA8L3BhcmE+CisKKyAgPHBhcmE+CisgICBJbXBsZW1l bnRpbmcgPGZ1bmN0aW9uPmFta2lsbGl0ZW1zYmF0Y2g8L2Z1bmN0aW9uPiBpcyBvcHRpb25hbCBm b3IKKyAgIDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5jdGlvbj4gaW5kZXggQU1zICh0aG9zZSB0 aGF0IGRvbid0IGNhbiBsZWF2ZQorICAgdGhlIGZpZWxkIHNldCB0byA8bGl0ZXJhbD5OVUxMPC9s aXRlcmFsPiksIGJ1dCBkb2luZyBzbyBpcyByZWNvbW1lbmRlZCBmb3IKKyAgIHBlcmZvcm1hbmNl LCBhcyBpdCBhbGxvd3MgZnV0dXJlIHNjYW5zIHRvIHNraXAga25vd24tZGVhZCBpbmRleCBlbnRy aWVzLgorICAgVGhlIGNvcmUgaW5kZXggYWNjZXNzIG1ldGhvZCB0aGF0IGN1cnJlbnRseSBzdXBw b3J0cworICAgPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPiAoQi10cmVlKSBpbXBsZW1l bnRzCisgICA8bGl0ZXJhbD5MUF9ERUFEPC9saXRlcmFsPiBtYXJraW5nLCB0aG91Z2ggdGhpcmQt cGFydHkgaW5kZXggYWNjZXNzIG1ldGhvZHMKKyAgIGFyZSBmcmVlIHRvIGNob29zZSB3aGV0aGVy IHRvIGltcGxlbWVudCB0aGlzIGZlYXR1cmUuICBUaGUgdGFibGUgQU0gbWF5CisgICBjYWxsIDxm dW5jdGlvbj50YWJsZWFtX3V0aWxfc2NhbnBvc19raWxsaXRlbTwvZnVuY3Rpb24+IHRvIG1hcmsg ZGVhZCBpdGVtcyBhcworICAgdGhlIHNjYW4gcHJvZ3Jlc3Nlcy4gIElmIHRoZSBiYXRjaCBjb250 YWlucyBhbnkgc3VjaCBkZWFkIGl0ZW1zLCB0aGUgYmF0Y2gncworICAgPHN0cnVjdGZpZWxkPmRl YWRJdGVtczwvc3RydWN0ZmllbGQ+IGFycmF5IHdpbGwgaGF2ZSBiZWVuIHNvcnRlZCBhbmQKKyAg IGRlZHVwbGljYXRlZCBiZWZvcmUgPGZ1bmN0aW9uPmFta2lsbGl0ZW1zYmF0Y2g8L2Z1bmN0aW9u PiBpcyBjYWxsZWQsIHdpdGgKKyAgIGl0ZW0gb2Zmc2V0cyBhcHBlYXJpbmcgaW4gYXNjZW5kaW5n IG9yZGVyICh0aGF0IGlzLCBpbiBpbmRleCBwYWdlIG9yZGVyLAorICAgd2hpY2ggaXMgYWxzbyBi YXRjaCBvcmRlcikgYW5kIG5vIG9mZnNldCBhcHBlYXJpbmcgbW9yZSB0aGFuIG9uY2UuICBJbmRl eAorICAgYWNjZXNzIG1ldGhvZHMgY2FuIHJlbHkgb24gdGhpcyBvcmRlcmluZyB3aGVuIHByb2Nl c3NpbmcgZGVhZCBpdGVtczogdGhlCisgICA8c3RydWN0ZmllbGQ+ZGVhZEl0ZW1zPC9zdHJ1Y3Rm aWVsZD4gYXJyYXkgY2FuIGJlIHdhbGtlZCBpbiBsb2Nrc3RlcCB3aXRoCisgICB0aGUgaW5kZXgg cGFnZSdzIGl0ZW0gcG9pbnRlcnMsIHNpbmNlIGJvdGggYXJlIGluIGFzY2VuZGluZyBwYWdlIG9m ZnNldAorICAgbnVtYmVyIG9yZGVyLiAgVGhpcyBhbHNvIG1lYW5zIHRoZSB0YWJsZSBBTSBuZWVk IG5vdCBjYWxsCisgICA8ZnVuY3Rpb24+dGFibGVhbV91dGlsX3NjYW5wb3Nfa2lsbGl0ZW08L2Z1 bmN0aW9uPiBpbiBhbnkgcGFydGljdWxhciBvcmRlci4KKyAgPC9wYXJhPgorCisgIDxub3RlPgor ICAgPHBhcmE+CisgICAgSW5kZXggYWNjZXNzIG1ldGhvZHMgdXNpbmcgPGZ1bmN0aW9uPmFtZ2V0 dHVwbGU8L2Z1bmN0aW9uPiByZWx5IG9uIHRoZQorICAgIDxzdHJ1Y3RmaWVsZD5raWxsX3ByaW9y X3R1cGxlPC9zdHJ1Y3RmaWVsZD4gbWVjaGFuaXNtIGluc3RlYWQgdG8gbWFyayBkZWFkCisgICAg dHVwbGVzOyB0aGUgPGZpbGVuYW1lPnNyYy9iYWNrZW5kL2FjY2Vzcy9naXN0LzwvZmlsZW5hbWU+ IGltcGxlbWVudGF0aW9uCisgICAgcHJvdmlkZXMgYSByZWZlcmVuY2UgZXhhbXBsZS4KKyAgIDwv cGFyYT4KKyAgPC9ub3RlPgorCisgIDxwYXJhPgorICAgV2hlbiBpbXBsZW1lbnRpbmcgPGZ1bmN0 aW9uPmFta2lsbGl0ZW1zYmF0Y2g8L2Z1bmN0aW9uPiwgdGhlIGluZGV4IEFNCisgICBtdXN0IHZl cmlmeSB0aGF0IHRoZSBpbmRleCBwYWdlIGhhcyBub3QgYmVlbiBtb2RpZmllZCBzaW5jZSB0aGUg YmF0Y2ggd2FzCisgICBvcmlnaW5hbGx5IHJlYWQuICBUaGUgc3RhbmRhcmQgd2F5IHRvIGRvIHRo aXMgaXMgdG8gY2FsbAorICAgPGZ1bmN0aW9uPmluZGV4YW1fdXRpbF9iYXRjaF91bmxvY2s8L2Z1 bmN0aW9uPiBkdXJpbmcKKyAgIDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5jdGlvbj4sIHdoaWNo IHJlbGVhc2VzIHRoZSBpbmRleCBwYWdlIGxvY2sgYW5kCisgICBzYXZlcyB0aGUgcGFnZSBMU04g aW4KKyAgIHRoZSBiYXRjaCdzIDxzdHJ1Y3RmaWVsZD5sc248L3N0cnVjdGZpZWxkPiBmaWVsZC4g IExhdGVyLCB3aXRoaW4KKyAgIDxmdW5jdGlvbj5hbWtpbGxpdGVtc2JhdGNoPC9mdW5jdGlvbj4s IHRoZSBpbmRleCBBTSByZS1yZWFkcyB0aGUgcGFnZSwKKyAgIGNvbXBhcmVzIHRoZSBjdXJyZW50 IHBhZ2UgTFNOIGFnYWluc3QKKyAgIDxzdHJ1Y3RmaWVsZD5iYXRjaC0mZ3Q7bHNuPC9zdHJ1Y3Rm aWVsZD4sIGFuZCBnaXZlcyB1cCBvbiBzZXR0aW5nCisgICA8bGl0ZXJhbD5MUF9ERUFEPC9saXRl cmFsPiBiaXRzIGlmIHRoZSBMU04gaGFzIGFkdmFuY2VkLiAgQW4gYWR2YW5jZWQgTFNOCisgICBp bmRpY2F0ZXMgdGhhdCB0aGUgcGFnZSB3YXMgbW9kaWZpZWQgJm1kYXNoOyBwb3NzaWJseSBieQor ICAgPGNvbW1hbmQ+VkFDVVVNPC9jb21tYW5kPiByZWN5Y2xpbmcgdGFibGUgVElEcyAmbWRhc2g7 IHNvIGl0IHdvdWxkIGJlCisgICB1bnNhZmUgdG8gYXNzdW1lIHRoYXQgaW5kZXggZW50cmllcyBz dGlsbCBwb2ludCB0byB0aGUgc2FtZSBoZWFwL3RhYmxlCisgICB0dXBsZXMuICBTaW5jZSA8bGl0 ZXJhbD5MUF9ERUFEPC9saXRlcmFsPiBtYXJraW5nIGlzIG9ubHkgYW4gb3B0aW1pemF0aW9uCisg ICBoaW50LCBpdCBpcyBhbHdheXMgc2FmZSB0byBza2lwIGl0LiAgQi10cmVlIHVzZXMgdGhpcyBh cHByb2FjaC4KKyAgPC9wYXJhPgorCisgIDx3YXJuaW5nPgorICAgPHBhcmE+CisgICAgVGhpcyBM U04gY29tcGFyaXNvbiB0ZWNobmlxdWUgcmVxdWlyZXMgdGhlIGluZGV4IEFNIHRvIHVzZSBmYWtl CisgICAgKG1vbm90b25pY2FsbHkgaW5jcmVhc2luZykgTFNOcyBvbiBpdHMgcGFnZXMgZm9yIHJl bGF0aW9ucyB3aGVyZSBXQUwgaXMKKyAgICBub3QgZ2VuZXJhdGVkLCBzaW5jZSByZWFsIExTTnMg YXJlIG5vdCBhdmFpbGFibGUgaW4gdGhhdCBjYXNlLiAgU2VlIHRoZQorICAgIEItdHJlZSBpbmRl eCBpbXBsZW1lbnRhdGlvbiBmb3IgYSByZWZlcmVuY2UgZXhhbXBsZSBvZiB0aGlzCisgICAgdGVj aG5pcXVlLiAgQW4gaW5kZXggQU0gdGhhdCBkb2VzIG5vdCBpbXBsZW1lbnQgZmFrZSBMU05zIGNh biBzdGlsbAorICAgIHByb3ZpZGUgPGZ1bmN0aW9uPmFta2lsbGl0ZW1zYmF0Y2g8L2Z1bmN0aW9u PiwgYnV0IHNob3VsZCBzaW1wbHkgZG8KKyAgICBub3RoaW5nIHdoZW4gdGhlIHJlbGF0aW9uIGRv ZXMgbm90IGdlbmVyYXRlIFdBTCAoaS5lLiwgd2hlbgorICAgIDxmdW5jdGlvbj5SZWxhdGlvbk5l ZWRzV0FMKCk8L2Z1bmN0aW9uPiBpcyBmYWxzZSksIHNpbmNlIHRoZSBMU04KKyAgICBjb21wYXJp c29uIHdvdWxkIGJlIHVucmVsaWFibGUuCisgICA8L3BhcmE+CisgIDwvd2FybmluZz4KKworICA8 dGlwPgorICAgPHBhcmE+CisgICAgSW5kZXggQU1zIGFyZSBub3Qgb2JsaWdhdGVkIHRvIHVzZQor ICAgIDxmdW5jdGlvbj5pbmRleGFtX3V0aWxfYmF0Y2hfdW5sb2NrPC9mdW5jdGlvbj4gJm1kYXNo OyB0aGV5IGNhbiBpbXBsZW1lbnQKKyAgICB0aGVpciBvd24gZXF1aXZhbGVudCwgYW5kIGFyZSBm cmVlIHRvIHVzZSB0aGUgYmF0Y2gKKyAgICA8c3RydWN0ZmllbGQ+bHNuPC9zdHJ1Y3RmaWVsZD4g ZmllbGQgaW4gd2hhdGV2ZXIgd2F5IHRoZXkgZGVlbSBuZWNlc3NhcnkKKyAgIDwvcGFyYT4KKyAg PC90aXA+CisKKyAgPHBhcmE+CisgICBUaGlzIExTTi1iYXNlZCB2ZXJpZmljYXRpb24gbWVhbnMg dGhhdCB0aGUgdGFibGUgQU0gbmVlZCBub3QgY29uc2lkZXIKKyAgIHdoZXRoZXIgdW5ndWFyZGlu ZyBhIGJhdGNoIGNvdWxkIGludHJvZHVjZSBUSUQgcmVjeWNsaW5nIGhhemFyZHMgZm9yIGEKKyAg IHN1YnNlcXVlbnQgPGZ1bmN0aW9uPmFta2lsbGl0ZW1zYmF0Y2g8L2Z1bmN0aW9uPiBjYWxsLiAg VGhlIGhhemFyZHMgYXJlIHRoZQorICAgc2FtZSBpbiBib3RoIGNhc2VzLCBidXQgc2luY2UgPGZ1 bmN0aW9uPmFta2lsbGl0ZW1zYmF0Y2g8L2Z1bmN0aW9uPgorICAgaW5kZXBlbmRlbnRseSB2ZXJp ZmllcyB0aGUgcGFnZSBMU04gYW5kIGNhbiBhbHdheXMgc2FmZWx5IGdpdmUgdXAgb24KKyAgIHNl dHRpbmcgPGxpdGVyYWw+TFBfREVBRDwvbGl0ZXJhbD4gYml0cywgY29ycmVjdG5lc3MgaXMgb2J2 aW91cyB3aXRob3V0IGFueQorICAgY291cGxpbmcgYmV0d2VlbiB0aGUgdHdvLgorICA8L3BhcmE+ CiAKICAgPHBhcmE+CiA8cHJvZ3JhbWxpc3Rpbmc+CkBAIC03NjgsOCArMTA1OCw4IEBAIGFtZ2V0 Yml0bWFwIChJbmRleFNjYW5EZXNjIHNjYW4sCiAgICBpdHNlbGYsIGFuZCB0aGVyZWZvcmUgY2Fs bGVycyByZWNoZWNrIGJvdGggdGhlIHNjYW4gY29uZGl0aW9ucyBhbmQgdGhlCiAgICBwYXJ0aWFs IGluZGV4IHByZWRpY2F0ZSAoaWYgYW55KSBmb3IgcmVjaGVja2FibGUgdHVwbGVzLiAgVGhhdCBt aWdodCBub3QKICAgIGFsd2F5cyBiZSB0cnVlLCBob3dldmVyLgotICAgPGZ1bmN0aW9uPmFtZ2V0 Yml0bWFwPC9mdW5jdGlvbj4gYW5kCi0gICA8ZnVuY3Rpb24+YW1nZXR0dXBsZTwvZnVuY3Rpb24+ IGNhbm5vdCBiZSB1c2VkIGluIHRoZSBzYW1lIGluZGV4IHNjYW47IHRoZXJlCisgICBPbmx5IG9u ZSBvZiA8ZnVuY3Rpb24+YW1nZXRiaXRtYXA8L2Z1bmN0aW9uPiwgPGZ1bmN0aW9uPmFtZ2V0YmF0 Y2g8L2Z1bmN0aW9uPiwKKyAgIG9yIDxmdW5jdGlvbj5hbWdldHR1cGxlPC9mdW5jdGlvbj4gY2Fu IGJlIHVzZWQgaW4gYW55IGdpdmVuIGluZGV4IHNjYW47IHRoZXJlCiAgICBhcmUgb3RoZXIgcmVz dHJpY3Rpb25zIHRvbyB3aGVuIHVzaW5nIDxmdW5jdGlvbj5hbWdldGJpdG1hcDwvZnVuY3Rpb24+ LCBhcyBleHBsYWluZWQKICAgIGluIDx4cmVmIGxpbmtlbmQ9ImluZGV4LXNjYW5uaW5nIi8+Lgog ICA8L3BhcmE+CkBAIC03ODEsNiArMTA3MSwzOSBAQCBhbWdldGJpdG1hcCAoSW5kZXhTY2FuRGVz YyBzY2FuLAogICAgc3RydWN0IG11c3QgYmUgc2V0IHRvIE5VTEwuCiAgIDwvcGFyYT4KIAorICA8 cGFyYT4KKyAgIEluZGV4IGFjY2VzcyBtZXRob2RzIHRoYXQgc3VwcG9ydCA8ZnVuY3Rpb24+YW1n ZXRiYXRjaDwvZnVuY3Rpb24+IHdpbGwKKyAgIHR5cGljYWxseSBhbHNvIHN1cHBvcnQgPGZ1bmN0 aW9uPmFtZ2V0Yml0bWFwPC9mdW5jdGlvbj4sIGFuZCBhbG1vc3QgYWxsIG9mCisgICB0aGUgaW5k ZXggQU0ncyBpbnRlcm5hbCBzY2FubmluZyBjb2RlIGlzIHNoYXJlZCBiZXR3ZWVuIHRoZSB0d28g cGF0aHMuICBUaGUKKyAgIG1haW4gZGlmZmVyZW5jZSBpcyB0aGF0IGR1cmluZyA8ZnVuY3Rpb24+ YW1nZXRiaXRtYXA8L2Z1bmN0aW9uPiBvbmx5IG9uZQorICAgYmF0Y2ggaXMgYWxsb2NhdGVkIGF0 IGEgdGltZSAodmlhIDxmdW5jdGlvbj5pbmRleGFtX3V0aWxfYmF0Y2hfYWxsb2M8L2Z1bmN0aW9u PiksCisgICB1bmxpa2UgPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPiB3aGVyZSB0aGUg dGFibGUgQU0gbWFuYWdlcyBzZXZlcmFsCisgICBiYXRjaGVzIGluIGEgZGVkaWNhdGVkIGJhdGNo IHJpbmcgYnVmZmVyIGRhdGEgc3RydWN0dXJlLgorICA8L3BhcmE+CisKKyAgPHBhcmE+CisgICBU aGUgb25seSBjaGFuZ2UgbmVlZGVkIHRvIG1haW50YWluIHRoaXMgaW52YXJpYW50IGlzIGEgc2lu Z2xlIGNhbGwgdG8KKyAgIDxmdW5jdGlvbj5pbmRleGFtX3V0aWxfYmF0Y2hfcmVsZWFzZTwvZnVu Y3Rpb24+IGF0IHRoZSBwb2ludCB3aGVyZSB0aGUKKyAgIHNjYW4gbW92ZXMgYmV0d2VlbiBpbmRl eCBwYWdlcywgY29uZGl0aW9uYWwgb24gdGhlIHNjYW4ncworICAgPHN0cnVjdGZpZWxkPnVzZWJh dGNocmluZzwvc3RydWN0ZmllbGQ+IGZpZWxkIGJlaW5nIGZhbHNlIChpbmRpY2F0aW5nIGEKKyAg IGJpdG1hcCBpbmRleCBzY2FuKS4gIFRoZSBpbmRleCBBTSByZWxlYXNlcyBpdHMgcHJpb3IgYmF0 Y2gKKyAgIGp1c3QgYXMgaXQgaXMgYWJvdXQgdG8gZ2VuZXJhdGUgdGhlIG5leHQgYmF0Y2ggJm1k YXNoOyB0aGUgc2FtZSBwb2ludAorICAgd2hlcmUgaXQgZXh0cmFjdHMgbmF2aWdhdGlvbiBzdGF0 ZSAoc3VjaCBhcyBzaWJsaW5nLXBhZ2UgbGlua3MpIGZyb20KKyAgIDxsaXRlcmFsPnByaW9yYmF0 Y2g8L2xpdGVyYWw+LiAgTm8gb3RoZXIgY2hhbmdlcyB0byB0aGUgaW5kZXggQU0ncworICAgc2Nh bm5pbmcgbG9naWMgYXJlIG5lZWRlZC4gIFRoaXMgZWFybHkgcmVsZWFzZSBpcyBzcGVjaWZpYyB0 bworICAgPGZ1bmN0aW9uPmFtZ2V0Yml0bWFwPC9mdW5jdGlvbj4gc2NhbnM7IGR1cmluZworICAg PGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPiBzY2FucyB0aGUgPGxpdGVyYWw+cHJpb3Ji YXRjaDwvbGl0ZXJhbD4KKyAgIGlzIHN0cmljdGx5IG93bmVkIGJ5IHRoZSBjYWxsZXIgKHRoZSB0 YWJsZSBBTSksIGFuZCB0aGUgaW5kZXggQU0gbXVzdAorICAgbmV2ZXIgcmVsZWFzZSBpdC4gIFNl ZSA8ZnVuY3Rpb24+X2J0X25leHQ8L2Z1bmN0aW9uPiBmb3IgYSByZWZlcmVuY2UKKyAgIGV4YW1w bGUuCisgIDwvcGFyYT4KKworICA8cGFyYT4KKyAgIFRoZSByZWxlYXNlZCBiYXRjaCBpcyBjYWNo ZWQgaW50ZXJuYWxseSBhbmQgcmV1c2VkIGJ5IHRoZSBuZXh0CisgICA8ZnVuY3Rpb24+aW5kZXhh bV91dGlsX2JhdGNoX2FsbG9jPC9mdW5jdGlvbj4gY2FsbCwgYXZvaWRpbmcgcmVwZWF0ZWQKKyAg IG1lbW9yeSBhbGxvY2F0aW9uIGR1cmluZyB0aGUgYml0bWFwIHNjYW4uCisgIDwvcGFyYT4KKwog ICA8cGFyYT4KIDxwcm9ncmFtbGlzdGluZz4KIHZvaWQKQEAgLTc5NSwzMiArMTExOCw1MiBAQCBh bWVuZHNjYW4gKEluZGV4U2NhbkRlc2Mgc2Nhbik7CiAgIDxwYXJhPgogPHByb2dyYW1saXN0aW5n Pgogdm9pZAotYW1tYXJrcG9zIChJbmRleFNjYW5EZXNjIHNjYW4pOworYW1wb3NyZXNldCAoSW5k ZXhTY2FuRGVzYyBzY2FuLAorICAgICAgICAgICAgSW5kZXhTY2FuQmF0Y2ggYmF0Y2gpOwogPC9w cm9ncmFtbGlzdGluZz4KLSAgIE1hcmsgY3VycmVudCBzY2FuIHBvc2l0aW9uLiAgVGhlIGFjY2Vz cyBtZXRob2QgbmVlZCBvbmx5IHN1cHBvcnQgb25lCi0gICByZW1lbWJlcmVkIHNjYW4gcG9zaXRp b24gcGVyIHNjYW4uCisgICBOb3RpZnkgdGhlIGluZGV4IEFNIHRoYXQgdGhlIHRhYmxlIEFNIGlz IGFib3V0IHRvIGNoYW5nZSB0aGUgc2NhbidzCisgICBsb2dpY2FsIHBvc2l0aW9uIGluIGEgd2F5 IHRoYXQgbWF5IGludmFsaWRhdGUgaW5kZXggQU0gc3RhdGUgdGhhdAorICAgaW5kZXBlbmRlbnRs eSB0cmFja3MgdGhlIHNjYW4ncyBwcm9ncmVzcy4gIFRoaXMgY2FsbGJhY2sgaXMgaW52b2tlZCB3 aGVuCisgICB0aGUgdGFibGUgQU0gaXMgYWJvdXQgdG8gcHJvY2VzcyBhIGJhdGNoIGluIGEgZGlm ZmVyZW50IGRpcmVjdGlvbiB0aGFuCisgICB3YXMgdXNlZCB3aGVuIHRoZSBiYXRjaCB3YXMgb3Jp Z2luYWxseSByZXR1cm5lZCBieQorICAgPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPiwg YW5kIGFsc28gd2hlbiBhIG1hcmtlZCBzY2FuIHBvc2l0aW9uIGlzCisgICBhYm91dCB0byBiZSBy ZXN0b3JlZC4gIFNvbWUgaW5kZXggQU1zIG1haW50YWluIGludGVybmFsIHN0YXRlIHRoYXQKKyAg IGFkdmFuY2VzIGluIGxvY2tzdGVwIHdpdGggdGhlIHNjYW4gdW5kZXIgdGhlIHNvZnQgYXNzdW1w dGlvbiB0aGF0IHRoZSBzY2FuCisgICBkaXJlY3Rpb24gd2lsbCBub3QgY2hhbmdlLiAgU3VjaCBz dGF0ZSBtYXkgZmFsbCBiZWhpbmQgdGhlIHNjYW4ncyB0cnVlCisgICBwb3NpdGlvbiB3aXRob3V0 IGhhcm0gKHNpbXBseSByZWFkaW5nIHRoZSBuZXh0IGluZGV4IHBhZ2Ugd2lsbCBhbGxvdyB0aGUK KyAgIHN0YXRlIHRvIDxxdW90ZT5jYXRjaCB1cDwvcXVvdGU+KSwgYnV0IG11c3QgbmV2ZXIgZ2V0 IGFoZWFkIG9mIGl0LiAgV2hlbgorICAgdGhlIHNjYW4gZGlyZWN0aW9uIGNoYW5nZXMgb3IgYSBt YXJrZWQgcG9zaXRpb24gaXMgcmVzdG9yZWQsIHRoZSBhc3N1bXB0aW9uCisgICBpcyB2aW9sYXRl ZCwgc28gdGhlIGluZGV4IEFNIG11c3QgcmVzZXQgdGhlIHN0YXRlIHRvIGEgc2FmZSBzdGFydGlu ZyBwb2ludAorICAgZm9yIHRoZSBuZXcgZGlyZWN0aW9uLiAgRm9yIGV4YW1wbGUsIEItdHJlZSB1 c2VzIHRoaXMgY2FsbGJhY2sgdG8gcmVzZXQgaXRzCisgICA8bGl0ZXJhbD5TY2FsYXJBcnJheU9w RXhwcjwvbGl0ZXJhbD4gYXJyYXkga2V5cyB0byB0aGVpciBpbml0aWFsIHBvc2l0aW9ucworICAg Zm9yIHRoZSBuZXcgc2NhbiBkaXJlY3Rpb24uCiAgIDwvcGFyYT4KIAogICA8cGFyYT4KLSAgIFRo ZSA8ZnVuY3Rpb24+YW1tYXJrcG9zPC9mdW5jdGlvbj4gZnVuY3Rpb24gbmVlZCBvbmx5IGJlIHBy b3ZpZGVkIGlmIHRoZSBhY2Nlc3MKLSAgIG1ldGhvZCBzdXBwb3J0cyBvcmRlcmVkIHNjYW5zLiAg SWYgaXQgZG9lc24ndCwKLSAgIHRoZSA8c3RydWN0ZmllbGQ+YW1tYXJrcG9zPC9zdHJ1Y3RmaWVs ZD4gZmllbGQgaW4gaXRzIDxzdHJ1Y3RuYW1lPkluZGV4QW1Sb3V0aW5lPC9zdHJ1Y3RuYW1lPgot ICAgc3RydWN0IG1heSBiZSBzZXQgdG8gTlVMTC4KKyAgIFdoZW4gPGZ1bmN0aW9uPmFtcG9zcmVz ZXQ8L2Z1bmN0aW9uPiBpcyBjYWxsZWQgZHVlIHRvIGEgY3Jvc3MtYmF0Y2gKKyAgIGRpcmVjdGlv biBjaGFuZ2UsIHRoZSBjb3JlIHN5c3RlbSB3aWxsIGhhdmUgYWxyZWFkeSBmbGlwcGVkIHRoZSBi YXRjaCdzCisgICA8c3RydWN0ZmllbGQ+ZGlyPC9zdHJ1Y3RmaWVsZD4gZmllbGQgdG8gcmVmbGVj dCB0aGUgbmV3IHNjYW4gZGlyZWN0aW9uCisgICBiZWZvcmUgbWFraW5nIHRoZSBjYWxsLiAgVGhl IGluZGV4IEFNIHNob3VsZCB1c2UgdGhpcyB1cGRhdGVkIGRpcmVjdGlvbgorICAgd2hlbiByZXNl dHRpbmcgYW55IHN0YXRlIHRoYXQgZGVwZW5kcyBvbiBrbm93aW5nIHdoaWNoIHdheSB0aGUgc2Nh biBpcworICAgcHJvY2VlZGluZy4gIFdoZW4gY2FsbGVkIHRvIHJlc3RvcmUgYSBtYXJrZWQgcG9z aXRpb24sIHRoZSBiYXRjaCdzCisgICA8c3RydWN0ZmllbGQ+ZGlyPC9zdHJ1Y3RmaWVsZD4gaXMg bm90IG1vZGlmaWVkOyBpdCByZXRhaW5zIHRoZSBkaXJlY3Rpb24KKyAgIGZyb20gd2hlbiB0aGUg YmF0Y2ggd2FzIG9yaWdpbmFsbHkgcmV0dXJuZWQuICBJbiBib3RoIGNhc2VzLCB0aGUgYmF0Y2gK KyAgIHBhc3NlZCB0byA8ZnVuY3Rpb24+YW1wb3NyZXNldDwvZnVuY3Rpb24+IGlzIHRoZSBiYXRj aCB0aGF0IHdpbGwgbmV4dCBiZQorICAgcGFzc2VkIHRvIDxmdW5jdGlvbj5hbWdldGJhdGNoPC9m dW5jdGlvbj4gYXMgaXRzCisgICA8bGl0ZXJhbD5wcmlvcmJhdGNoPC9saXRlcmFsPi4gIE5vdGUg aW4gcGFydGljdWxhciB0aGF0IHRoZQorICAgPGxpdGVyYWw+cHJpb3JiYXRjaDwvbGl0ZXJhbD4u PHN0cnVjdGZpZWxkPmRpcjwvc3RydWN0ZmllbGQ+IGZpZWxkIGlzCisgICBndWFyYW50ZWVkIHRv IGhhdmUgdGhlIHNhbWUgc2NhbiBkaXJlY3Rpb24gYXMgd2hlbgorICAgPGZ1bmN0aW9uPmFtcG9z cmVzZXQ8L2Z1bmN0aW9uPiB3YXMgY2FsbGVkLgogICA8L3BhcmE+CiAKICAgPHBhcmE+Ci08cHJv Z3JhbWxpc3Rpbmc+Ci12b2lkCi1hbXJlc3RycG9zIChJbmRleFNjYW5EZXNjIHNjYW4pOwotPC9w cm9ncmFtbGlzdGluZz4KLSAgIFJlc3RvcmUgdGhlIHNjYW4gdG8gdGhlIG1vc3QgcmVjZW50bHkg bWFya2VkIHBvc2l0aW9uLgotICA8L3BhcmE+Ci0KLSAgPHBhcmE+Ci0gICBUaGUgPGZ1bmN0aW9u PmFtcmVzdHJwb3M8L2Z1bmN0aW9uPiBmdW5jdGlvbiBuZWVkIG9ubHkgYmUgcHJvdmlkZWQgaWYg dGhlIGFjY2VzcwotICAgbWV0aG9kIHN1cHBvcnRzIG9yZGVyZWQgc2NhbnMuICBJZiBpdCBkb2Vz bid0LAotICAgdGhlIDxzdHJ1Y3RmaWVsZD5hbXJlc3RycG9zPC9zdHJ1Y3RmaWVsZD4gZmllbGQg aW4gaXRzIDxzdHJ1Y3RuYW1lPkluZGV4QW1Sb3V0aW5lPC9zdHJ1Y3RuYW1lPgotICAgc3RydWN0 IG1heSBiZSBzZXQgdG8gTlVMTC4KKyAgIEluZGV4IGFjY2VzcyBtZXRob2RzIHRoYXQgaGF2ZSBw cml2YXRlIHN0YXRlIHdoaWNoIG11c3QgYmUgcmVzZXQgd2hlbiB0aGUKKyAgIHNjYW4gcG9zaXRp b24gY2hhbmdlcyBtdXN0IHByb3ZpZGUgYW4gPGZ1bmN0aW9uPmFtcG9zcmVzZXQ8L2Z1bmN0aW9u PgorICAgaW1wbGVtZW50YXRpb24uICBJbmRleCBBTXMgd2l0aCBubyBzdWNoIHN0YXRlIG1heSBz ZXQKKyAgIDxzdHJ1Y3RmaWVsZD5hbXBvc3Jlc2V0PC9zdHJ1Y3RmaWVsZD4gdG8gTlVMTC4gIFRo ZQorICAgPGZ1bmN0aW9uPmFtcG9zcmVzZXQ8L2Z1bmN0aW9uPiBmdW5jdGlvbiBjYW4gb25seSBi ZSBwcm92aWRlZCB3aGVuIHRoZQorICAgYWNjZXNzIG1ldGhvZCBzdXBwb3J0cyBvcmRlcmVkIHNj YW5zIHRocm91Z2ggdGhlCisgICA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+IGludGVy ZmFjZS4KICAgPC9wYXJhPgogCiAgIDxwYXJhPgpAQCAtOTc1LDYgKzEzMTgsOCBAQCBhbXRyYW5z bGF0ZWNtcHR5cGUgKENvbXBhcmVUeXBlIGNtcHR5cGUsIE9pZCBvcGZhbWlseSwgT2lkIG9wY2lu dHlwZSk7CiAgICAgICAgQWNjZXNzIG1ldGhvZHMgdGhhdCBhbHdheXMgcmV0dXJuIGVudHJpZXMg aW4gdGhlIG5hdHVyYWwgb3JkZXJpbmcKICAgICAgICBvZiB0aGVpciBkYXRhIChzdWNoIGFzIGJ0 cmVlKSBzaG91bGQgc2V0CiAgICAgICAgPHN0cnVjdGZpZWxkPmFtY2Fub3JkZXI8L3N0cnVjdGZp ZWxkPiB0byB0cnVlLgorICAgICAgIEJvdGggPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9u PiBhbmQgPGZ1bmN0aW9uPmFtZ2V0dHVwbGU8L2Z1bmN0aW9uPgorICAgICAgIHNjYW5zIHN1cHBv cnQgdGhpcyBjYXBhYmlsaXR5LgogICAgICAgIEN1cnJlbnRseSwgc3VjaCBhY2Nlc3MgbWV0aG9k cyBtdXN0IHVzZSBidHJlZS1jb21wYXRpYmxlIHN0cmF0ZWd5CiAgICAgICAgbnVtYmVycyBmb3Ig dGhlaXIgZXF1YWxpdHkgYW5kIG9yZGVyaW5nIG9wZXJhdG9ycy4KICAgICAgIDwvcGFyYT4KQEAg LTk5NCwzNCArMTMzOSw0MSBAQCBhbXRyYW5zbGF0ZWNtcHR5cGUgKENvbXBhcmVUeXBlIGNtcHR5 cGUsIE9pZCBvcGZhbWlseSwgT2lkIG9wY2ludHlwZSk7CiAgIDwvcGFyYT4KIAogICA8cGFyYT4K LSAgIFRoZSA8ZnVuY3Rpb24+YW1nZXR0dXBsZTwvZnVuY3Rpb24+IGZ1bmN0aW9uIGhhcyBhIDxs aXRlcmFsPmRpcmVjdGlvbjwvbGl0ZXJhbD4gYXJndW1lbnQsCisgICBOb3RlIHRoYXQgPGZ1bmN0 aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPiBzY2FucyBkbyBub3QgY3VycmVudGx5IHN1cHBvcnQK KyAgIG9yZGVyaW5nIG9wZXJhdG9ycy4gIFRoZSBjb3JlIGV4ZWN1dG9yIGV4cGVjdHMgPGZ1bmN0 aW9uPmFtZ2V0dHVwbGU8L2Z1bmN0aW9uPgorICAgdG8gc2V0IDxzdHJ1Y3RmaWVsZD54c19vcmRl cmJ5dmFsczwvc3RydWN0ZmllbGQ+IGZvciBlYWNoIHJldHVybmVkIHR1cGxlLAorICAgYnV0IHRo ZXJlIGlzIGN1cnJlbnRseSBubyBtZWNoYW5pc20gdG8gYXNzb2NpYXRlIHBlci1pdGVtIG9yZGVy aW5nIHZhbHVlcworICAgd2l0aCBpbmRpdmlkdWFsIGl0ZW1zIHdpdGhpbiBhIGJhdGNoLiAgVGhp cyB3b3VsZCByZXF1aXJlIGFuIGFkZGl0aW9uYWwKKyAgIGxheWVyIG9mIGluZGlyZWN0aW9uIHRo YXQgZG9lcyBub3QgeWV0IGV4aXN0LCBidXQgY291bGQgYmUgYWRkZWQgaW4gYQorICAgZnV0dXJl IHZlcnNpb24gb2YgPHByb2R1Y3RuYW1lPlBvc3RncmVTUUw8L3Byb2R1Y3RuYW1lPi4KKyAgPC9w YXJhPgorCisgIDxwYXJhPgorICAgVGhlIDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5jdGlvbj4g ZnVuY3Rpb24gaGFzIGEgPGxpdGVyYWw+ZGlyZWN0aW9uPC9saXRlcmFsPiBhcmd1bWVudCwKICAg IHdoaWNoIGNhbiBiZSBlaXRoZXIgPGxpdGVyYWw+Rm9yd2FyZFNjYW5EaXJlY3Rpb248L2xpdGVy YWw+ICh0aGUgbm9ybWFsIGNhc2UpCiAgICBvciAgPGxpdGVyYWw+QmFja3dhcmRTY2FuRGlyZWN0 aW9uPC9saXRlcmFsPi4gIElmIHRoZSBmaXJzdCBjYWxsIGFmdGVyCiAgICA8ZnVuY3Rpb24+YW1y ZXNjYW48L2Z1bmN0aW9uPiBzcGVjaWZpZXMgPGxpdGVyYWw+QmFja3dhcmRTY2FuRGlyZWN0aW9u PC9saXRlcmFsPiwgdGhlbiB0aGUKLSAgIHNldCBvZiBtYXRjaGluZyBpbmRleCBlbnRyaWVzIGlz IHRvIGJlIHNjYW5uZWQgYmFjay10by1mcm9udCByYXRoZXIgdGhhbiBpbgotICAgdGhlIG5vcm1h bCBmcm9udC10by1iYWNrIGRpcmVjdGlvbiwgc28gPGZ1bmN0aW9uPmFtZ2V0dHVwbGU8L2Z1bmN0 aW9uPiBtdXN0IHJldHVybgotICAgdGhlIGxhc3QgbWF0Y2hpbmcgdHVwbGUgaW4gdGhlIGluZGV4 LCByYXRoZXIgdGhhbiB0aGUgZmlyc3Qgb25lIGFzIGl0Ci0gICBub3JtYWxseSB3b3VsZC4gIChU aGlzIHdpbGwgb25seSBvY2N1ciBmb3IgYWNjZXNzCi0gICBtZXRob2RzIHRoYXQgc2V0IDxzdHJ1 Y3RmaWVsZD5hbWNhbm9yZGVyPC9zdHJ1Y3RmaWVsZD4gdG8gdHJ1ZS4pICBBZnRlciB0aGUKLSAg IGZpcnN0IGNhbGwsIDxmdW5jdGlvbj5hbWdldHR1cGxlPC9mdW5jdGlvbj4gbXVzdCBiZSBwcmVw YXJlZCB0byBhZHZhbmNlIHRoZSBzY2FuIGluCisgICByZXR1cm5lZCBiYXRjaCBtdXN0IGJlIHRo ZSBiYXRjaCBjb250YWluaW5nIHRoZSBsYXN0IG1hdGNoaW5nIGl0ZW0ocyksCisgICByYXRoZXIg dGhhbiB0aGUgYmF0Y2ggY29udGFpbmluZyB0aGUgZmlyc3QgbWF0Y2hpbmcgaXRlbShzKS4KKyAg IDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5jdGlvbj4gbXVzdCBiZSBwcmVwYXJlZCB0byBhZHZh bmNlIHRoZSBzY2FuIGluCiAgICBlaXRoZXIgZGlyZWN0aW9uIGZyb20gdGhlIG1vc3QgcmVjZW50 bHkgcmV0dXJuZWQgZW50cnkuICAoQnV0IGlmCiAgICA8c3RydWN0ZmllbGQ+YW1jYW5iYWNrd2Fy ZDwvc3RydWN0ZmllbGQ+IGlzIGZhbHNlLCBhbGwgc3Vic2VxdWVudAogICAgY2FsbHMgd2lsbCBo YXZlIHRoZSBzYW1lIGRpcmVjdGlvbiBhcyB0aGUgZmlyc3Qgb25lLikKICAgPC9wYXJhPgogCiAg IDxwYXJhPgotICAgQWNjZXNzIG1ldGhvZHMgdGhhdCBzdXBwb3J0IG9yZGVyZWQgc2NhbnMgbXVz dCBzdXBwb3J0IDxxdW90ZT5tYXJraW5nPC9xdW90ZT4gYQotICAgcG9zaXRpb24gaW4gYSBzY2Fu IGFuZCBsYXRlciByZXR1cm5pbmcgdG8gdGhlIG1hcmtlZCBwb3NpdGlvbi4gIFRoZSBzYW1lCi0g ICBwb3NpdGlvbiBtaWdodCBiZSByZXN0b3JlZCBtdWx0aXBsZSB0aW1lcy4gIEhvd2V2ZXIsIG9u bHkgb25lIHBvc2l0aW9uIG5lZWQKLSAgIGJlIHJlbWVtYmVyZWQgcGVyIHNjYW47IGEgbmV3IDxm dW5jdGlvbj5hbW1hcmtwb3M8L2Z1bmN0aW9uPiBjYWxsIG92ZXJyaWRlcyB0aGUKLSAgIHByZXZp b3VzbHkgbWFya2VkIHBvc2l0aW9uLiAgQW4gYWNjZXNzIG1ldGhvZCB0aGF0IGRvZXMgbm90IHN1 cHBvcnQgb3JkZXJlZAotICAgc2NhbnMgbmVlZCBub3QgcHJvdmlkZSA8ZnVuY3Rpb24+YW1tYXJr cG9zPC9mdW5jdGlvbj4gYW5kIDxmdW5jdGlvbj5hbXJlc3RycG9zPC9mdW5jdGlvbj4KLSAgIGZ1 bmN0aW9ucyBpbiA8c3RydWN0bmFtZT5JbmRleEFtUm91dGluZTwvc3RydWN0bmFtZT47IHNldCB0 aG9zZSBwb2ludGVycyB0byBOVUxMCi0gICBpbnN0ZWFkLgorICAgQWxsIDxmdW5jdGlvbj5hbWdl dGJhdGNoPC9mdW5jdGlvbj4gaW5kZXggQU1zIGluaGVyZW50bHkgc3VwcG9ydAorICAgbWFyay9y ZXN0b3JlIG9mIHNjYW4gcG9zaXRpb25zICg8ZnVuY3Rpb24+YW1nZXR0dXBsZTwvZnVuY3Rpb24+ IGluZGV4IEFNcworICAgZG8gbm90KS4gIFRoZSBtYXJrL3Jlc3RvcmUgaW1wbGVtZW50YXRpb24g bGl2ZXMgaW4gdGhlIHRhYmxlIEFNIGFuZCB3b3JrcworICAgd2l0aCBhbnkgPGZ1bmN0aW9uPmFt Z2V0YmF0Y2g8L2Z1bmN0aW9uPiBpbXBsZW1lbnRhdGlvbi4gIEluZGV4IEFNcyB0aGF0CisgICBt YWludGFpbiBpbnRlcm5hbCBzdGF0ZSB3aGljaCB0cmFja3MgdGhlIHNjYW4ncyBwcm9ncmVzcyBt dXN0IHByb3ZpZGUgYW4KKyAgIDxmdW5jdGlvbj5hbXBvc3Jlc2V0PC9mdW5jdGlvbj4gY2FsbGJh Y2sgdG8gYmUgbm90aWZpZWQgd2hlbiB0aGUgc2NhbidzCisgICBsb2dpY2FsIHBvc2l0aW9uIGNo YW5nZXMgdW5leHBlY3RlZGx5LCBzdWNoIGFzIGR1cmluZyBtYXJrL3Jlc3RvcmU7IHNlZQorICAg PHhyZWYgbGlua2VuZD0iaW5kZXgtZnVuY3Rpb25zIi8+IGZvciBkZXRhaWxzLgogICA8L3BhcmE+ CiAKICAgPHBhcmE+Ci0gICBCb3RoIHRoZSBzY2FuIHBvc2l0aW9uIGFuZCB0aGUgbWFyayBwb3Np dGlvbiAoaWYgYW55KSBtdXN0IGJlIG1haW50YWluZWQKKyAgIFRoZSBzY2FuIHBvc2l0aW9uIChp ZiBhbnkpIG11c3QgYmUgbWFpbnRhaW5lZCBieSB0aGUgdGFibGUgQU0gYW5kIGluZGV4IEFNCiAg ICBjb25zaXN0ZW50bHkgaW4gdGhlIGZhY2Ugb2YgY29uY3VycmVudCBpbnNlcnRpb25zIG9yIGRl bGV0aW9ucyBpbiB0aGUKICAgIGluZGV4LiAgSXQgaXMgT0sgaWYgYSBmcmVzaGx5LWluc2VydGVk IGVudHJ5IGlzIG5vdCByZXR1cm5lZCBieSBhIHNjYW4gdGhhdAogICAgd291bGQgaGF2ZSBmb3Vu ZCB0aGUgZW50cnkgaWYgaXQgaGFkIGV4aXN0ZWQgd2hlbiB0aGUgc2NhbiBzdGFydGVkLCBvciBm b3IKQEAgLTEwNDAsMTUgKzEzOTIsMTcgQEAgYW10cmFuc2xhdGVjbXB0eXBlIChDb21wYXJlVHlw ZSBjbXB0eXBlLCBPaWQgb3BmYW1pbHksIE9pZCBvcGNpbnR5cGUpOwogICAgd2hpY2ggdGhlIGlu ZGV4IHJldHVybnMgdGhlIGFjdHVhbCBkYXRhIG5vdCBqdXN0IHRoZSBUSUQgb2YgdGhlIGhlYXAg dHVwbGUuCiAgICBUaGlzIHdpbGwgb25seSBhdm9pZCBJL08gaWYgdGhlIHZpc2liaWxpdHkgbWFw IHNob3dzIHRoYXQgdGhlIFRJRCBpcyBvbiBhbgogICAgYWxsLXZpc2libGUgcGFnZTsgZWxzZSB0 aGUgaGVhcCB0dXBsZSBtdXN0IGJlIHZpc2l0ZWQgYW55d2F5IHRvIGNoZWNrCi0gICBNVkNDIHZp c2liaWxpdHkuICBCdXQgdGhhdCBpcyBubyBjb25jZXJuIG9mIHRoZSBhY2Nlc3MgbWV0aG9kJ3Mu CisgICBNVkNDIHZpc2liaWxpdHkuICBCdXQgdGhhdCBpcyBubyBjb25jZXJuIG9mIHRoZSBpbmRl eCBhY2Nlc3MgbWV0aG9kJ3MuCiAgIDwvcGFyYT4KIAogICA8cGFyYT4KLSAgIEluc3RlYWQgb2Yg dXNpbmcgPGZ1bmN0aW9uPmFtZ2V0dHVwbGU8L2Z1bmN0aW9uPiwgYW4gaW5kZXggc2NhbiBjYW4g YmUgZG9uZSB3aXRoCi0gICA8ZnVuY3Rpb24+YW1nZXRiaXRtYXA8L2Z1bmN0aW9uPiB0byBmZXRj aCBhbGwgdHVwbGVzIGluIG9uZSBjYWxsLiAgVGhpcyBjYW4gYmUKLSAgIG5vdGljZWFibHkgbW9y ZSBlZmZpY2llbnQgdGhhbiA8ZnVuY3Rpb24+YW1nZXR0dXBsZTwvZnVuY3Rpb24+IGJlY2F1c2Ug aXQgYWxsb3dzCi0gICBhdm9pZGluZyBsb2NrL3VubG9jayBjeWNsZXMgd2l0aGluIHRoZSBhY2Nl c3MgbWV0aG9kLiAgSW4gcHJpbmNpcGxlCi0gICA8ZnVuY3Rpb24+YW1nZXRiaXRtYXA8L2Z1bmN0 aW9uPiBzaG91bGQgaGF2ZSB0aGUgc2FtZSBlZmZlY3RzIGFzIHJlcGVhdGVkCisgICBJbnN0ZWFk IG9mIHVzaW5nIDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5jdGlvbj4gb3IKKyAgIDxmdW5jdGlv bj5hbWdldHR1cGxlPC9mdW5jdGlvbj4sIGFuIGluZGV4IHNjYW4gY2FuIGJlIGRvbmUgd2l0aAor ICAgPGZ1bmN0aW9uPmFtZ2V0Yml0bWFwPC9mdW5jdGlvbj4gdG8gZmV0Y2ggYWxsIHR1cGxlcyBp biBvbmUgY2FsbC4gIFRoaXMgY2FuCisgICBiZSBub3RpY2VhYmx5IG1vcmUgZWZmaWNpZW50IHRo YW4gd2l0aCBhbiA8cXVvdGU+b3JkZXJlZDwvcXVvdGU+IHNjYW4KKyAgIGJlY2F1c2UgaXQgYWxs b3dzIGVmZmljaWVudCBzZXF1ZW50aWFsIGFjY2VzcyB0byB0YWJsZSBBTSBwYWdlcyBjb250YWlu aW5nCisgICBtYXRjaGVzLiAgSW4gcHJpbmNpcGxlIDxmdW5jdGlvbj5hbWdldGJpdG1hcDwvZnVu Y3Rpb24+IHNob3VsZCBoYXZlIHRoZQorICAgc2FtZSBlZmZlY3RzIGFzIHJlcGVhdGVkIDxmdW5j dGlvbj5hbWdldGJhdGNoPC9mdW5jdGlvbj4gb3IKICAgIDxmdW5jdGlvbj5hbWdldHR1cGxlPC9m dW5jdGlvbj4gY2FsbHMsIGJ1dCB3ZSBpbXBvc2Ugc2V2ZXJhbCByZXN0cmljdGlvbnMgdG8KICAg IHNpbXBsaWZ5IG1hdHRlcnMuICBGaXJzdCBvZiBhbGwsIDxmdW5jdGlvbj5hbWdldGJpdG1hcDwv ZnVuY3Rpb24+IHJldHVybnMgYWxsCiAgICB0dXBsZXMgYXQgb25jZSBhbmQgbWFya2luZyBvciBy ZXN0b3Jpbmcgc2NhbiBwb3NpdGlvbnMgaXNuJ3QKQEAgLTEwNTksMTUgKzE0MTMsMTUgQEAgYW10 cmFuc2xhdGVjbXB0eXBlIChDb21wYXJlVHlwZSBjbXB0eXBlLCBPaWQgb3BmYW1pbHksIE9pZCBv cGNpbnR5cGUpOwogICAgQWxzbywgdGhlcmUgaXMgbm8gcHJvdmlzaW9uIGZvciBpbmRleC1vbmx5 IHNjYW5zIHdpdGgKICAgIDxmdW5jdGlvbj5hbWdldGJpdG1hcDwvZnVuY3Rpb24+LCBzaW5jZSB0 aGVyZSBpcyBubyB3YXkgdG8gcmV0dXJuIHRoZSBjb250ZW50cyBvZgogICAgaW5kZXggdHVwbGVz LgotICAgRmluYWxseSwgPGZ1bmN0aW9uPmFtZ2V0Yml0bWFwPC9mdW5jdGlvbj4KLSAgIGRvZXMg bm90IGd1YXJhbnRlZSBhbnkgbG9ja2luZyBvZiB0aGUgcmV0dXJuZWQgdHVwbGVzLCB3aXRoIGlt cGxpY2F0aW9ucwotICAgc3BlbGxlZCBvdXQgaW4gPHhyZWYgbGlua2VuZD0iaW5kZXgtbG9ja2lu ZyIvPi4KKyAgIEZpbmFsbHksIDxmdW5jdGlvbj5hbWdldGJpdG1hcDwvZnVuY3Rpb24+IGRvZXMg bm90IGhvbGQgYW55IGluZGV4IHBhZ2UgcGlucworICAgYWZ0ZXIgaXQgcmV0dXJucyAoc2ltaWxh cmx5IHRvIDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5jdGlvbj4gc2NhbnMgd2l0aAorICAgYW4g TVZDQyBzbmFwc2hvdCksIGFzIGRlc2NyaWJlZCBpbiA8eHJlZiBsaW5rZW5kPSJpbmRleC1sb2Nr aW5nIi8+LgogICA8L3BhcmE+CiAKICAgPHBhcmE+CiAgICBOb3RlIHRoYXQgaXQgaXMgcGVybWl0 dGVkIGZvciBhbiBhY2Nlc3MgbWV0aG9kIHRvIGltcGxlbWVudCBvbmx5Ci0gICA8ZnVuY3Rpb24+ YW1nZXRiaXRtYXA8L2Z1bmN0aW9uPiBhbmQgbm90IDxmdW5jdGlvbj5hbWdldHR1cGxlPC9mdW5j dGlvbj4sIG9yIHZpY2UgdmVyc2EsCi0gICBpZiBpdHMgaW50ZXJuYWwgaW1wbGVtZW50YXRpb24g aXMgdW5zdWl0ZWQgdG8gb25lIEFQSSBvciB0aGUgb3RoZXIuCisgICA8ZnVuY3Rpb24+YW1nZXRi aXRtYXA8L2Z1bmN0aW9uPiBhbmQgbm90IDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5jdGlvbj4v PGZ1bmN0aW9uPmFtZ2V0dHVwbGU8L2Z1bmN0aW9uPiwKKyAgIG9yIHZpY2UgdmVyc2EsIGlmIGl0 cyBpbnRlcm5hbCBpbXBsZW1lbnRhdGlvbiBpcyB1bnN1aXRlZCB0byBvbmUgQVBJIG9yIHRoZSBv dGhlci4KICAgPC9wYXJhPgogCiAgPC9zZWN0MT4KQEAgLTExMjMsMTEgKzE0NzcsMTcgQEAgYW10 cmFuc2xhdGVjbXB0eXBlIChDb21wYXJlVHlwZSBjbXB0eXBlLCBPaWQgb3BmYW1pbHksIE9pZCBv cGNpbnR5cGUpOwogICAgICA8L2xpc3RpdGVtPgogICAgICA8bGlzdGl0ZW0+CiAgICAgICA8cGFy YT4KLSAgICAgICBBbiBpbmRleCBzY2FuIG11c3QgbWFpbnRhaW4gYSBwaW4KLSAgICAgICBvbiB0 aGUgaW5kZXggcGFnZSBob2xkaW5nIHRoZSBpdGVtIGxhc3QgcmV0dXJuZWQgYnkKLSAgICAgICA8 ZnVuY3Rpb24+YW1nZXR0dXBsZTwvZnVuY3Rpb24+LCBhbmQgPGZ1bmN0aW9uPmFtYnVsa2RlbGV0 ZTwvZnVuY3Rpb24+IGNhbm5vdCBkZWxldGUKLSAgICAgICBlbnRyaWVzIGZyb20gcGFnZXMgdGhh dCBhcmUgcGlubmVkIGJ5IG90aGVyIGJhY2tlbmRzLiAgVGhlIG5lZWQKLSAgICAgICBmb3IgdGhp cyBydWxlIGlzIGV4cGxhaW5lZCBiZWxvdy4KKyAgICAgICBBIHBpbiBtdXN0IGJlIGhlbGQgb24g YW55IGluZGV4IHBhZ2Ugd2hvc2UgaXRlbXMgbWlnaHQgc3RpbGwgbmVlZCB0bworICAgICAgIGJl IGZvbGxvd2VkLCBhbmQgPGZ1bmN0aW9uPmFtYnVsa2RlbGV0ZTwvZnVuY3Rpb24+IG11c3QgYWNx dWlyZSBhCisgICAgICAgY2xlYW51cCBsb2NrIG9uIGVhY2ggaW5kZXggcGFnZSwgd2hpY2ggd2ls bCBibG9jayBpZiBhbnkgb3RoZXIKKyAgICAgICBiYWNrZW5kIGhvbGRzIGEgcGluIG9uIHRoYXQg cGFnZS4KKyAgICAgICBGb3IgPGZ1bmN0aW9uPmFtZ2V0dHVwbGU8L2Z1bmN0aW9uPiBzY2Fucywg dGhlIGluZGV4IGFjY2VzcyBtZXRob2QKKyAgICAgICBtYW5hZ2VzIHRoaXMgcGluIGRpcmVjdGx5 LgorICAgICAgIEZvciA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+IHNjYW5zLCB0aGUg aW5kZXggQU0gaG9sZHMgYSBidWZmZXIKKyAgICAgICBwaW4gb24gZWFjaCBiYXRjaCdzIGluZGV4 IGxlYWYgcGFnZSAoaW4gaXRzIHBlci1iYXRjaCBvcGFxdWUgYXJlYSksCisgICAgICAgd2hpbGUg dGhlIHRhYmxlIEFNIGNvbnRyb2xzIHdoZW4gdGhlIGludGVybG9jayBpcyBkcm9wcGVkIHZpYQor ICAgICAgIDxmdW5jdGlvbj5hbXVuZ3VhcmRiYXRjaDwvZnVuY3Rpb24+LgorICAgICAgIFRoZSBu ZWVkIGZvciB0aGlzIHJ1bGUgaXMgZXhwbGFpbmVkIGJlbG93LgogICAgICAgPC9wYXJhPgogICAg ICA8L2xpc3RpdGVtPgogICAgIDwvaXRlbWl6ZWRsaXN0PgpAQCAtMTEzOCwzOSArMTQ5OCw5NCBA QCBhbXRyYW5zbGF0ZWNtcHR5cGUgKENvbXBhcmVUeXBlIGNtcHR5cGUsIE9pZCBvcGZhbWlseSwg T2lkIG9wY2ludHlwZSk7CiAgICA8Y29tbWFuZD5WQUNVVU08L2NvbW1hbmQ+LgogICAgVGhpcyBj cmVhdGVzIG5vIHNlcmlvdXMgcHJvYmxlbXMgaWYgdGhhdCBpdGVtCiAgICBudW1iZXIgaXMgc3Rp bGwgdW51c2VkIHdoZW4gdGhlIHJlYWRlciByZWFjaGVzIGl0LCBzaW5jZSBhbiBlbXB0eQotICAg aXRlbSBzbG90IHdpbGwgYmUgaWdub3JlZCBieSA8ZnVuY3Rpb24+aGVhcF9mZXRjaCgpPC9mdW5j dGlvbj4uICBCdXQgd2hhdCBpZiBhCisgICBpdGVtIHNsb3Qgd2lsbCBzaW1wbHkgYmUgdHJlYXRl ZCBhcyBub3QtdmlzaWJsZS4gIEJ1dCB3aGF0IGlmIGEKICAgIHRoaXJkIGJhY2tlbmQgaGFzIGFs cmVhZHkgcmUtdXNlZCB0aGUgaXRlbSBzbG90IGZvciBzb21ldGhpbmcgZWxzZT8KICAgIFdoZW4g dXNpbmcgYW4gTVZDQy1jb21wbGlhbnQgc25hcHNob3QsIHRoZXJlIGlzIG5vIHByb2JsZW0gYmVj YXVzZQogICAgdGhlIG5ldyBvY2N1cGFudCBvZiB0aGUgc2xvdCBpcyBjZXJ0YWluIHRvIGJlIHRv byBuZXcgdG8gcGFzcyB0aGUKICAgIHNuYXBzaG90IHRlc3QuICBIb3dldmVyLCB3aXRoIGEgbm9u LU1WQ0MtY29tcGxpYW50IHNuYXBzaG90IChzdWNoIGFzCiAgICA8bGl0ZXJhbD5TbmFwc2hvdEFu eTwvbGl0ZXJhbD4pLCBpdCB3b3VsZCBiZSBwb3NzaWJsZSB0byBhY2NlcHQgYW5kIHJldHVybgot ICAgYSByb3cgdGhhdCBkb2VzIG5vdCBpbiBmYWN0IG1hdGNoIHRoZSBzY2FuIGtleXMuICBXZSBj b3VsZCBkZWZlbmQKLSAgIGFnYWluc3QgdGhpcyBzY2VuYXJpbyBieSByZXF1aXJpbmcgdGhlIHNj YW4ga2V5cyB0byBiZSByZWNoZWNrZWQKLSAgIGFnYWluc3QgdGhlIGhlYXAgcm93IGluIGFsbCBj YXNlcywgYnV0IHRoYXQgaXMgdG9vIGV4cGVuc2l2ZS4gIEluc3RlYWQsCi0gICB3ZSB1c2UgYSBw aW4gb24gYW4gaW5kZXggcGFnZSBhcyBhIHByb3h5IHRvIGluZGljYXRlIHRoYXQgdGhlIHJlYWRl cgotICAgbWlnaHQgc3RpbGwgYmUgPHF1b3RlPmluIGZsaWdodDwvcXVvdGU+IGZyb20gdGhlIGlu ZGV4IGVudHJ5IHRvIHRoZSBtYXRjaGluZwotICAgaGVhcCBlbnRyeS4gIE1ha2luZyA8ZnVuY3Rp b24+YW1idWxrZGVsZXRlPC9mdW5jdGlvbj4gYmxvY2sgb24gc3VjaCBhIHBpbiBlbnN1cmVzCi0g ICB0aGF0IDxjb21tYW5kPlZBQ1VVTTwvY29tbWFuZD4gY2Fubm90IGRlbGV0ZSB0aGUgaGVhcCBl bnRyeSBiZWZvcmUgdGhlIHJlYWRlcgotICAgaXMgZG9uZSB3aXRoIGl0LiAgVGhpcyBzb2x1dGlv biBjb3N0cyBsaXR0bGUgaW4gcnVuIHRpbWUsIGFuZCBhZGRzIGJsb2NraW5nCi0gICBvdmVyaGVh ZCBvbmx5IGluIHRoZSByYXJlIGNhc2VzIHdoZXJlIHRoZXJlIGFjdHVhbGx5IGlzIGEgY29uZmxp Y3QuCisgICBhIHdob2xseSB1bnJlbGF0ZWQgcm93IChvbmUgdGhhdCBkb2VzIG5vdCBuZWNlc3Nh cmlseSBzYXRpc2Z5IHRoZSBzY2FuCisgICBrZXlzKS4gIFdlIGNhbiBvcHRpb25hbGx5IHVzZSBh IHBpbiBvbiBhbiBpbmRleCBwYWdlIGFzIGEgcHJveHkgdG8gaW5kaWNhdGUKKyAgIHRoYXQgdGhl IHJlYWRlciBtaWdodCBzdGlsbCBiZSA8cXVvdGU+aW4gZmxpZ2h0PC9xdW90ZT4gZnJvbSB0aGUg aW5kZXgKKyAgIGVudHJ5IHRvIHRoZSBtYXRjaGluZyBoZWFwIGVudHJ5LiAgTWFraW5nIDxmdW5j dGlvbj5hbWJ1bGtkZWxldGU8L2Z1bmN0aW9uPgorICAgYmxvY2sgb24gc3VjaCBhIHBpbiBlbnN1 cmVzIHRoYXQgPGNvbW1hbmQ+VkFDVVVNPC9jb21tYW5kPiBjYW5ub3QgZGVsZXRlCisgICB0aGUg aGVhcCBlbnRyeSBiZWZvcmUgdGhlIHJlYWRlciBpcyBkb25lIHdpdGggaXQuICBUaGlzIHNvbHV0 aW9uIGNvc3RzCisgICBsaXR0bGUgaW4gcnVuIHRpbWUsIGFuZCBhZGRzIGJsb2NraW5nIG92ZXJo ZWFkIG9ubHkgaW4gdGhlIHJhcmUgY2FzZXMgd2hlcmUKKyAgIHRoZXJlIGFjdHVhbGx5IGlzIGEg Y29uZmxpY3QuICBGb3IgcGxhaW4gaW5kZXggc2NhbnMgdGhhdCB1c2UgYW4KKyAgIE1WQ0MtY29t cGxpYW50IHNuYXBzaG90LCBob2xkaW5nIHRoZSBwaW4gaXMgdW5uZWNlc3NhcnkgYmVjYXVzZSB0 aGUgc2NhbgorICAgd2lsbCBhbHdheXMgdmlzaXQgdGhlIGhlYXAgcGFnZSwgd2hlcmUgdGhlIHNu YXBzaG90IGl0c2VsZiB3aWxsIHJlamVjdCBhbnkKKyAgIHJlY3ljbGVkIFRJRCdzIG5ldyBvY2N1 cGFudC4gIChJbmRleC1vbmx5IHNjYW5zIGFyZSBhIHNwZWNpYWwgY2FzZSwgYXMKKyAgIGRpc2N1 c3NlZCBiZWxvdy4pCiAgIDwvcGFyYT4KIAogICA8cGFyYT4KLSAgIFRoaXMgc29sdXRpb24gcmVx dWlyZXMgdGhhdCBpbmRleCBzY2FucyBiZSA8cXVvdGU+c3luY2hyb25vdXM8L3F1b3RlPjogd2Ug aGF2ZQotICAgdG8gZmV0Y2ggZWFjaCBoZWFwIHR1cGxlIGltbWVkaWF0ZWx5IGFmdGVyIHNjYW5u aW5nIHRoZSBjb3JyZXNwb25kaW5nIGluZGV4Ci0gICBlbnRyeS4gIFRoaXMgaXMgZXhwZW5zaXZl IGZvciBhIG51bWJlciBvZiByZWFzb25zLiAgQW4KLSAgIDxxdW90ZT5hc3luY2hyb25vdXM8L3F1 b3RlPiBzY2FuIGluIHdoaWNoIHdlIGNvbGxlY3QgbWFueSBUSURzIGZyb20gdGhlIGluZGV4LAot ICAgYW5kIG9ubHkgdmlzaXQgdGhlIGhlYXAgdHVwbGVzIHNvbWV0aW1lIGxhdGVyLCByZXF1aXJl cyBtdWNoIGxlc3MgaW5kZXgKLSAgIGxvY2tpbmcgb3ZlcmhlYWQgYW5kIGNhbiBhbGxvdyBhIG1v cmUgZWZmaWNpZW50IGhlYXAgYWNjZXNzIHBhdHRlcm4uCi0gICBQZXIgdGhlIGFib3ZlIGFuYWx5 c2lzLCB3ZSBtdXN0IHVzZSB0aGUgc3luY2hyb25vdXMgYXBwcm9hY2ggZm9yCi0gICBub24tTVZD Qy1jb21wbGlhbnQgc25hcHNob3RzLCBidXQgYW4gYXN5bmNocm9ub3VzIHNjYW4gaXMgd29ya2Fi bGUKLSAgIGZvciBhIHF1ZXJ5IHVzaW5nIGFuIE1WQ0Mgc25hcHNob3QuCisgICBUaGlzIHNvbHV0 aW9uIHJlcXVpcmVzIHRoYXQgPGZ1bmN0aW9uPmFtZ2V0dHVwbGU8L2Z1bmN0aW9uPiBpbmRleCBz Y2FucyBiZQorICAgPHF1b3RlPnN5bmNocm9ub3VzPC9xdW90ZT46IHRoZSB0YWJsZSBBTSBtdXN0 IGZldGNoIGVhY2ggaGVhcCB0dXBsZQorICAgaW1tZWRpYXRlbHkgYWZ0ZXIgc2Nhbm5pbmcgdGhl IGNvcnJlc3BvbmRpbmcgaW5kZXggZW50cnkuICBUaGlzIGlzCisgICBleHBlbnNpdmUgZm9yIGEg bnVtYmVyIG9mIHJlYXNvbnMuICBUaGUKKyAgIDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5jdGlv bj4gaW50ZXJmYWNlLCBieSBjb250cmFzdCwgd2FzIGRlc2lnbmVkIHRvCisgICBhbGxvdyBzY2Fu cyB0byBiZSA8cXVvdGU+YXN5bmNocm9ub3VzPC9xdW90ZT4uCiAgIDwvcGFyYT4KIAogICA8cGFy YT4KLSAgIEluIGFuIDxmdW5jdGlvbj5hbWdldGJpdG1hcDwvZnVuY3Rpb24+IGluZGV4IHNjYW4s IHRoZSBhY2Nlc3MgbWV0aG9kIGRvZXMgbm90Ci0gICBrZWVwIGFuIGluZGV4IHBpbiBvbiBhbnkg b2YgdGhlIHJldHVybmVkIHR1cGxlcy4gIFRoZXJlZm9yZQotICAgaXQgaXMgb25seSBzYWZlIHRv IHVzZSBzdWNoIHNjYW5zIHdpdGggTVZDQy1jb21wbGlhbnQgc25hcHNob3RzLgorICAgV2hldGhl ciBhIGJhdGNoJ3MgVElEIHJlY3ljbGluZyBpbnRlcmxvY2sgKHR5cGljYWxseSBhbiBpbmRleCBw YWdlIGJ1ZmZlcgorICAgcGluKSBpcyBkcm9wcGVkIGltbWVkaWF0ZWx5IG9yIGRlZmVycmVkIGlz IGNvbnRyb2xsZWQgYnkgYSBnZW5lcmljLAorICAgc2Nhbi1sZXZlbCBwb2xpY3kgdGhhdCBpcyBk ZXRlcm1pbmVkIHdoZW4gdGhlIHNjYW4gaXMgb3BlbmVkICZtZGFzaDsgaXQgaXMKKyAgIG5vdCB1 bmRlciB0aGUgY29udHJvbCBvZiBlaXRoZXIgdGhlIGluZGV4IEFNIG9yIHRoZSB0YWJsZSBBTS4g IFRoZSBzY2FuJ3MKKyAgIDxzdHJ1Y3RmaWVsZD5iYXRjaEltbWVkaWF0ZVVuZ3VhcmQ8L3N0cnVj dGZpZWxkPiBmbGFnIGVuY29kZXMgdGhpcyBwb2xpY3kuCisgICBJdCBpcyBzZXQgYmFzZWQgb24g dHdvIGNyaXRlcmlhIHRoYXQgYXJlIGtub3duIHRvIHRoZSBjb3JlIHNjYW4gbWFjaGluZXJ5Ogor ICAgd2hldGhlciB0aGUgc2NhbiB1c2VzIGFuIE1WQ0MtY29tcGxpYW50IHNuYXBzaG90LCBhbmQg d2hldGhlciBpdCBpcyBhbgorICAgaW5kZXgtb25seSBzY2FuLiAgU3BlY2lmaWNhbGx5LAorICAg PHN0cnVjdGZpZWxkPmJhdGNoSW1tZWRpYXRlVW5ndWFyZDwvc3RydWN0ZmllbGQ+IGlzIHRydWUg d2hlbiB0aGUgc2NhbiB1c2VzCisgICBhbiBNVkNDIHNuYXBzaG90IGFuZCBpcyA8ZW1waGFzaXM+ bm90PC9lbXBoYXNpcz4gYW4gaW5kZXgtb25seSBzY2FuLgorICA8L3BhcmE+CisKKyAgPHBhcmE+ CisgICBXaGVuIDxzdHJ1Y3RmaWVsZD5iYXRjaEltbWVkaWF0ZVVuZ3VhcmQ8L3N0cnVjdGZpZWxk PiBpcyB0cnVlLCB0aGUKKyAgIGludGVybG9jayBpcyBkcm9wcGVkIGluc2lkZQorICAgPGZ1bmN0 aW9uPmluZGV4YW1fdXRpbF9iYXRjaF91bmxvY2s8L2Z1bmN0aW9uPiAoYmVmb3JlIHRoZSBiYXRj aCBpcyBldmVuCisgICByZXR1cm5lZCB0byB0aGUgdGFibGUgQU0pLCBiZWNhdXNlIGEgcGxhaW4g aW5kZXggc2NhbiB3aXRoIGFuIE1WQ0MKKyAgIHNuYXBzaG90IHdpbGwgYWx3YXlzIHZpc2l0IHRo ZSBoZWFwIHBhZ2UsIHdoZXJlIHRoZSBNVkNDIHZpc2liaWxpdHkgY2hlY2sKKyAgIGlzIGF1dGhv cml0YXRpdmUgJm1kYXNoOyBldmVuIGlmIDxjb21tYW5kPlZBQ1VVTTwvY29tbWFuZD4gcmVjeWNs ZXMgYSBUSUQsCisgICB0aGUgbmV3IG9jY3VwYW50IGNhbm5vdCBwYXNzIHRoZSBzbmFwc2hvdCB0 ZXN0LgorICA8L3BhcmE+CisKKyAgPHBhcmE+CisgICBXaGVuIDxzdHJ1Y3RmaWVsZD5iYXRjaElt bWVkaWF0ZVVuZ3VhcmQ8L3N0cnVjdGZpZWxkPiBpcyBmYWxzZSwgdGhlCisgICBpbnRlcmxvY2sg aXMgcmV0YWluZWQgdW50aWwgdGhlIHRhYmxlIEFNIGV4cGxpY2l0bHkgY2FsbHMKKyAgIDxmdW5j dGlvbj5hbXVuZ3VhcmRiYXRjaDwvZnVuY3Rpb24+LCBiZWNhdXNlIHRoZSBzY2FuIGNhbm5vdCBy ZWx5IG9uIHRoYXQKKyAgIGhlYXAgcGFnZSBNVkNDIGJhY2tzdG9wLiAgRm9yIG5vbi1NVkNDIHNj YW5zLCB0aGVyZSBpcyBubyBNVkNDIHNuYXBzaG90IHRvCisgICByZWplY3QgYSByZWN5Y2xlZCBU SUQncyBuZXcgb2NjdXBhbnQgYXQgYWxsLiAgRm9yIGluZGV4LW9ubHkgc2NhbnMsIGV2ZW4KKyAg IHdpdGggYW4gTVZDQyBzbmFwc2hvdCwgdGhlIHNjYW4gdHlwaWNhbGx5IGF2b2lkcyB2aXNpdGlu ZyB0aGUgaGVhcCBwYWdlCisgICBhbHRvZ2V0aGVyICh1c2luZyB0aGUgdmlzaWJpbGl0eSBtYXAg aW5zdGVhZCksIHNvIHRoZSBNVkNDIGNoZWNrIHRoYXQgd291bGQKKyAgIGNhdGNoIGEgcmVjeWNs ZWQgVElEIHVzdWFsbHkgbmV2ZXIgcnVucy4gIEluIGJvdGggY2FzZXMgdGhlIGludGVybG9jayBv bgorICAgdGhlIGluZGV4IHBhZ2UgaXMgd2hhdCBwcmV2ZW50cyA8Y29tbWFuZD5WQUNVVU08L2Nv bW1hbmQ+IGZyb20gcmVjeWNsaW5nCisgICBUSURzIHdoaWxlIHRoZSBzY2FuIGlzIHN0aWxsIGlu IGZsaWdodC4KKyAgPC9wYXJhPgorCisgIDxwYXJhPgorICAgV2hlbiA8c3RydWN0ZmllbGQ+YmF0 Y2hJbW1lZGlhdGVVbmd1YXJkPC9zdHJ1Y3RmaWVsZD4gaXMgZmFsc2UsIHRoZSB0YWJsZQorICAg QU0gZGVjaWRlcyA8ZW1waGFzaXM+d2hlbjwvZW1waGFzaXM+IHRvIGNhbGwKKyAgIDxmdW5jdGlv bj5hbXVuZ3VhcmRiYXRjaDwvZnVuY3Rpb24+OyB0aGUgaW5kZXggQU0gZGVjaWRlcworICAgPGVt cGhhc2lzPndoYXQ8L2VtcGhhc2lzPiB0byByZWxlYXNlLiAgV2hlbgorICAgPHN0cnVjdGZpZWxk PmJhdGNoSW1tZWRpYXRlVW5ndWFyZDwvc3RydWN0ZmllbGQ+IGlzIHRydWUsIHRoZSBpbmRleCBB TQorICAgZHJvcHMgdGhlIGludGVybG9jayBpdHNlbGYgKGluc2lkZQorICAgPGZ1bmN0aW9uPmlu ZGV4YW1fdXRpbF9iYXRjaF91bmxvY2s8L2Z1bmN0aW9uPiksIGFuZAorICAgPGZ1bmN0aW9uPmFt dW5ndWFyZGJhdGNoPC9mdW5jdGlvbj4gaXMgbmV2ZXIgY2FsbGVkLgorICA8L3BhcmE+CisKKyAg PHBhcmE+CisgICBTaW1pbGFybHksIGFuIDxmdW5jdGlvbj5hbWdldGJpdG1hcDwvZnVuY3Rpb24+ IGluZGV4IHNjYW4gaXMgaW5oZXJlbnRseQorICAgYXN5bmNocm9ub3VzOiBhbGwgbWF0Y2hpbmcg VElEcyBhcmUgY29sbGVjdGVkIGludG8gYSBiaXRtYXAgYmVmb3JlIGFueSBoZWFwCisgICBhY2Nl c3MgYmVnaW5zLiAgU3VjaCBzY2FucyB0aGVyZWZvcmUgcmVxdWlyZSBhbiBNVkNDLWNvbXBsaWFu dCBzbmFwc2hvdCwKKyAgIGFuZCB0aGVyZSBpcyBubyBuZWVkIGZvciB0aGUgYWNjZXNzIG1ldGhv ZCB0byBob2xkIGluZGV4IHBhZ2UgcGlucy4KKyAgPC9wYXJhPgorCisgIDxwYXJhPgorICAgSW5k ZXggYWNjZXNzIG1ldGhvZHMgdGhhdCB1c2UgPGZ1bmN0aW9uPmFtZ2V0dHVwbGU8L2Z1bmN0aW9u PiBtdXN0IG1hbmFnZQorICAgcGluIGxpZmV0aW1lIHRoZW1zZWx2ZXMsIHNpbmNlIHRoZXJlIGlz IG5vIHRhYmxlIEFNIGludGVybWVkaWFyeSAodW5saWtlCisgICB3aXRoIDxmdW5jdGlvbj5hbWdl dGJhdGNoPC9mdW5jdGlvbj4pLiAgVGhlIGluZGV4IEFNIG11c3QgaG9sZCBhIHBpbiBvbiB0aGUK KyAgIGN1cnJlbnQgaW5kZXggcGFnZSB1bnRpbCB0aGUgc2NhbiBtb3ZlcyB0byBhIGRpZmZlcmVu dCBwYWdlIG9yIGVuZHMuCiAgIDwvcGFyYT4KIAogICA8cGFyYT4KZGlmZiAtLWdpdCBhL2RvYy9z cmMvc2dtbC9yZWYvY3JlYXRlX3RhYmxlLnNnbWwgYi9kb2Mvc3JjL3NnbWwvcmVmL2NyZWF0ZV90 YWJsZS5zZ21sCmluZGV4IDgwODI5YjIzOS4uMThkZTk4NGQyIDEwMDY0NAotLS0gYS9kb2Mvc3Jj L3NnbWwvcmVmL2NyZWF0ZV90YWJsZS5zZ21sCisrKyBiL2RvYy9zcmMvc2dtbC9yZWYvY3JlYXRl X3RhYmxlLnNnbWwKQEAgLTExNzMsMTIgKzExNzMsMTMgQEAgV0lUSCAoIE1PRFVMVVMgPHJlcGxh Y2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPm51bWVyaWNfbGl0ZXJhbDwvcmVwbGFjZWFibGU+LCBS RU0KICAgICAgPC9wYXJhPgogCiAgICAgIDxwYXJhPgotICAgICAgVGhlIGFjY2VzcyBtZXRob2Qg bXVzdCBzdXBwb3J0IDxsaXRlcmFsPmFtZ2V0dHVwbGU8L2xpdGVyYWw+IChzZWUgPHhyZWYKLSAg ICAgIGxpbmtlbmQ9ImluZGV4YW0iLz4pOyBhdCBwcmVzZW50IHRoaXMgbWVhbnMgPGFjcm9ueW0+ R0lOPC9hY3JvbnltPgotICAgICAgY2Fubm90IGJlIHVzZWQuICBBbHRob3VnaCBpdCdzIGFsbG93 ZWQsIHRoZXJlIGlzIGxpdHRsZSBwb2ludCBpbiB1c2luZwotICAgICAgQi10cmVlIG9yIGhhc2gg aW5kZXhlcyB3aXRoIGFuIGV4Y2x1c2lvbiBjb25zdHJhaW50LCBiZWNhdXNlIHRoaXMKLSAgICAg IGRvZXMgbm90aGluZyB0aGF0IGFuIG9yZGluYXJ5IHVuaXF1ZSBjb25zdHJhaW50IGRvZXNuJ3Qg ZG8gYmV0dGVyLgotICAgICAgU28gaW4gcHJhY3RpY2UgdGhlIGFjY2VzcyBtZXRob2Qgd2lsbCBh bHdheXMgYmUgPGFjcm9ueW0+R2lTVDwvYWNyb255bT4gb3IKKyAgICAgIFRoZSBhY2Nlc3MgbWV0 aG9kIG11c3Qgc3VwcG9ydCBlaXRoZXIgPGxpdGVyYWw+YW1nZXRiYXRjaDwvbGl0ZXJhbD4KKyAg ICAgIG9yIDxsaXRlcmFsPmFtZ2V0dHVwbGU8L2xpdGVyYWw+IChzZWUgPHhyZWYgbGlua2VuZD0i aW5kZXhhbSIvPik7IGF0CisgICAgICBwcmVzZW50IHRoaXMgbWVhbnMgPGFjcm9ueW0+R0lOPC9h Y3JvbnltPiBjYW5ub3QgYmUgdXNlZC4gIEFsdGhvdWdoCisgICAgICBpdCdzIGFsbG93ZWQsIHRo ZXJlIGlzIGxpdHRsZSBwb2ludCBpbiB1c2luZyBCLXRyZWUgb3IgaGFzaCBpbmRleGVzCisgICAg ICB3aXRoIGFuIGV4Y2x1c2lvbiBjb25zdHJhaW50LCBiZWNhdXNlIHRoaXMgZG9lcyBub3RoaW5n IHRoYXQgYW4KKyAgICAgIG9yZGluYXJ5IHVuaXF1ZSBjb25zdHJhaW50IGRvZXNuJ3QgZG8gYmV0 dGVyLiAgU28gaW4gcHJhY3RpY2UgdGhlCisgICAgICBhY2Nlc3MgbWV0aG9kIHdpbGwgYWx3YXlz IGJlIDxhY3JvbnltPkdpU1Q8L2Fjcm9ueW0+IG9yCiAgICAgICA8YWNyb255bT5TUC1HaVNUPC9h Y3JvbnltPi4KICAgICAgPC9wYXJhPgogCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9tb2R1bGVzL2R1 bW15X2luZGV4X2FtL2R1bW15X2luZGV4X2FtLmMgYi9zcmMvdGVzdC9tb2R1bGVzL2R1bW15X2lu ZGV4X2FtL2R1bW15X2luZGV4X2FtLmMKaW5kZXggMzFmOGQyYjgxLi5hOTc1NmY2NWUgMTAwNjQ0 Ci0tLSBhL3NyYy90ZXN0L21vZHVsZXMvZHVtbXlfaW5kZXhfYW0vZHVtbXlfaW5kZXhfYW0uYwor KysgYi9zcmMvdGVzdC9tb2R1bGVzL2R1bW15X2luZGV4X2FtL2R1bW15X2luZGV4X2FtLmMKQEAg LTMzNCwxMCArMzM0LDEyIEBAIGRpaGFuZGxlcihQR19GVU5DVElPTl9BUkdTKQogCQkuYW1iZWdp bnNjYW4gPSBkaWJlZ2luc2NhbiwKIAkJLmFtcmVzY2FuID0gZGlyZXNjYW4sCiAJCS5hbWdldHR1 cGxlID0gTlVMTCwKKwkJLmFtZ2V0YmF0Y2ggPSBOVUxMLAorCQkuYW11bmd1YXJkYmF0Y2ggPSBO VUxMLAorCQkuYW1raWxsaXRlbXNiYXRjaCA9IE5VTEwsCiAJCS5hbWdldGJpdG1hcCA9IE5VTEws CiAJCS5hbWVuZHNjYW4gPSBkaWVuZHNjYW4sCi0JCS5hbW1hcmtwb3MgPSBOVUxMLAotCQkuYW1y ZXN0cnBvcyA9IE5VTEwsCisJCS5hbXBvc3Jlc2V0ID0gTlVMTCwKIAkJLmFtZXN0aW1hdGVwYXJh bGxlbHNjYW4gPSBOVUxMLAogCQkuYW1pbml0cGFyYWxsZWxzY2FuID0gTlVMTCwKIAkJLmFtcGFy YWxsZWxyZXNjYW4gPSBOVUxMLApkaWZmIC0tZ2l0IGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVk ZWZzLmxpc3QgYi9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdAppbmRleCBjNzJmNmM1 OTUuLmUzYzhlZDY4NCAxMDA2NDQKLS0tIGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxp c3QKKysrIGIvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKQEAgLTIwOCw2ICsyMDgs NyBAQCBCT09MCiBCT09MRUFOCiBCT1gKIEJUQXJyYXlLZXlJbmZvCitCVEJhdGNoRGF0YQogQlRC dWlsZFN0YXRlCiBCVENhbGxiYWNrU3RhdGUKIEJUQ3ljbGVJZApAQCAtMjM1LDggKzIzNiw2IEBA IEJUU2Nhbkluc2VydERhdGEKIEJUU2NhbktleVByZXByb2MKIEJUU2Nhbk9wYXF1ZQogQlRTY2Fu T3BhcXVlRGF0YQotQlRTY2FuUG9zRGF0YQotQlRTY2FuUG9zSXRlbQogQlRTaGFyZWQKIEJUU29y dEFycmF5Q29udGV4dAogQlRTcG9vbApAQCAtMjY1LDYgKzI2NCw5IEBAIEJhc2VCYWNrdXBDbWQK IEJhc2VCYWNrdXBUYXJnZXRIYW5kbGUKIEJhc2VCYWNrdXBUYXJnZXRUeXBlCiBCYXRjaE1WQ0NT dGF0ZQorQmF0Y2hNYXRjaGluZ0l0ZW0KK0JhdGNoUmluZ0J1ZmZlcgorQmF0Y2hSaW5nSXRlbVBv cwogQmVnaW5EaXJlY3RNb2RpZnlfZnVuY3Rpb24KIEJlZ2luRm9yZWlnbkluc2VydF9mdW5jdGlv bgogQmVnaW5Gb3JlaWduTW9kaWZ5X2Z1bmN0aW9uCkBAIC0xMjQ2LDYgKzEyNDgsNyBAQCBIYmFM aW5lCiBIZWFkbGluZUpzb25TdGF0ZQogSGVhZGxpbmVQYXJzZWRUZXh0CiBIZWFkbGluZVdvcmRF bnRyeQorSGVhcEJhdGNoRGF0YQogSGVhcENoZWNrQ29udGV4dAogSGVhcENoZWNrUmVhZFN0cmVh bURhdGEKIEhlYXBQYWdlRnJlZXplCkBAIC0xMzI1LDYgKzEzMjgsOCBAQCBJbmRleE9yZGVyQnlE aXN0YW5jZQogSW5kZXhQYXRoCiBJbmRleFJ1bnRpbWVLZXlJbmZvCiBJbmRleFNjYW4KK0luZGV4 U2NhbkJhdGNoCitJbmRleFNjYW5CYXRjaERhdGEKIEluZGV4U2NhbkRlc2MKIEluZGV4U2NhbkRl c2NEYXRhCiBJbmRleFNjYW5JbnN0cnVtZW50YXRpb24KQEAgLTM1NDAsMTggKzM1NDUsMTcgQEAg YW1jYW5yZXR1cm5fZnVuY3Rpb24KIGFtY29zdGVzdGltYXRlX2Z1bmN0aW9uCiBhbWVuZHNjYW5f ZnVuY3Rpb24KIGFtZXN0aW1hdGVwYXJhbGxlbHNjYW5fZnVuY3Rpb24KK2FtZ2V0YmF0Y2hfZnVu Y3Rpb24KIGFtZ2V0Yml0bWFwX2Z1bmN0aW9uCiBhbWdldHRyZWVoZWlnaHRfZnVuY3Rpb24KIGFt Z2V0dHVwbGVfZnVuY3Rpb24KIGFtaW5pdHBhcmFsbGVsc2Nhbl9mdW5jdGlvbgogYW1pbnNlcnRf ZnVuY3Rpb24KIGFtaW5zZXJ0Y2xlYW51cF9mdW5jdGlvbgotYW1tYXJrcG9zX2Z1bmN0aW9uCiBh bW9wdGlvbnNfZnVuY3Rpb24KIGFtcGFyYWxsZWxyZXNjYW5fZnVuY3Rpb24KIGFtcHJvcGVydHlf ZnVuY3Rpb24KIGFtcmVzY2FuX2Z1bmN0aW9uCi1hbXJlc3RycG9zX2Z1bmN0aW9uCiBhbXRyYW5z bGF0ZV9jbXB0eXBlX2Z1bmN0aW9uCiBhbXRyYW5zbGF0ZV9zdHJhdGVneV9mdW5jdGlvbgogYW12 YWN1dW1jbGVhbnVwX2Z1bmN0aW9uCi0tIAoyLjUzLjAKCg== --0000000000002fe31c064eaff221 Content-Type: application/octet-stream; name="v23-0003-Adopt-amgetbatch-interface-in-hash-index-AM.patch" Content-Disposition: attachment; filename="v23-0003-Adopt-amgetbatch-interface-in-hash-index-AM.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mnlbta3f5 RnJvbSAyZWZmYzM5NTBjZDg3MjAxYmRlNjBjYmM1ZGNiYzdkMjk0NGY2ZWEzIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBHZW9naGVnYW4gPHBnQGJvd3QuaWU+CkRhdGU6IFR1 ZSwgMjUgTm92IDIwMjUgMTg6MDM6MTUgLTA1MDAKU3ViamVjdDogW1BBVENIIHYyMyAzLzhdIEFk b3B0IGFtZ2V0YmF0Y2ggaW50ZXJmYWNlIGluIGhhc2ggaW5kZXggQU0uCgpSZXBsYWNlIGhhc2hn ZXR0dXBsZSB3aXRoIGhhc2hnZXRiYXRjaCwgYSBmdW5jdGlvbiB0aGF0IGltcGxlbWVudHMgdGhl Cm5ldyBhbWdldGJhdGNoIGludGVyZmFjZSBhZGRlZCBieSBjb21taXQgRklYTUUuICBQbGFpbiBp bmRleCBzY2FucyBvZgpoYXNoIGluZGV4ZXMgbm93IHJldHVybiBtYXRjaGluZyBpdGVtcyBpbiBi YXRjaGVzIGNvbnNpc3Rpbmcgb2YgYWxsIG9mCnRoZSBtYXRjaGVzIGZyb20gYSBnaXZlbiBidWNr ZXQgb3Igb3ZlcmZsb3cgcGFnZS4gIFRoaXMgZ2l2ZXMgdGhlIHRhYmxlCkFNIHRoZSBhYmlsaXR5 IHRvIHBlcmZvcm0gb3B0aW1pemF0aW9ucyBsaWtlIGluZGV4IHByZWZldGNoaW5nIGR1cmluZwpo YXNoIGluZGV4IHNjYW5zLgoKYmF0Y2hJbW1lZGlhdGVVbmd1YXJkIGlzIGFsd2F5cyB0cnVlIGR1 cmluZyBoYXNoIGluZGV4IHNjYW5zIChzaW5jZSBoYXNoCmRvZXNuJ3Qgc3VwcG9ydCBpbmRleC1v bmx5IHNjYW5zIGFuZCBhbHdheXMgdXNlcyBhbiBNVkNDIHNuYXBzaG90KSwgc28KdGhlIGJ1ZmZl ciBwaW4gaW50ZXJsb2NrIGhlbGQgb24gZWFjaCBiYXRjaCBpcyBhbHdheXMgZHJvcHBlZCBhdCB1 bmxvY2sKdGltZSAtLSBiZWZvcmUgdGhlIGJhdGNoIGlzIGV2ZW4gcmV0dXJuZWQgdG8gdGhlIHRh YmxlIEFNLiAgVGhpcyBkaWZmZXJzCmZyb20gaGFzaCdzIHByZXZpb3VzIGFwcHJvYWNoIG9mIGhv bGRpbmcgb24gdG8gYSBwaW4gZm9yIGF0IGxlYXN0IGFzCmxvbmcgYXMgdGhlIHNjYW4gd2FzIHN0 b3BwZWQgb24gdGhlIHBpbm5lZCBpbmRleCBwYWdlLgoKQW4gYW11bmd1YXJkYmF0Y2ggY2FsbGJh Y2sgaXMgYSByZXF1aXJlbWVudCBmb3IgYW1nZXRiYXRjaCBpbmRleCBBTXMuCmhhc2h1bmd1YXJk YmF0Y2ggaXMgcHJvdmlkZWQsIGV2ZW4gdGhvdWdoIGl0IGlzIG5vdCBjdXJyZW50bHkgdXNlZCBk dWUKdG8gYmF0Y2hJbW1lZGlhdGVVbmd1YXJkIGFsd2F5cyBiZWluZyB0cnVlIGluIHByYWN0aWNl LiAgVGhhdCBtaWdodCBub3QKcmVtYWluIHRydWUgaW4gdGhlIGZ1dHVyZSwgd2l0aCBvdGhlciB0 YWJsZSBBTXMgdGhhdCB1c2UgYW4gYWx0ZXJuYXRpdmUKZm9ybSBvZiBpbnRlcmxvY2suICBXaGls ZSB0aGUgcnVsZXMgdGhhdCBkZXRlcm1pbmUgd2hldGhlciBhIHNjYW4gaXMKYmF0Y2hJbW1lZGlh dGVVbmd1YXJkIGNhbm5vdCBiZSBpbmZsdWVuY2VkIGJ5IHRoZSB0YWJsZSBBTSByaWdodCBub3cs CnRoYXQgbWlnaHQgdmVyeSB3ZWxsIGNoYW5nZSBhcyByZXF1aXJlbWVudHMgZnJvbSB0YWJsZSBB TXMgZGljdGF0ZS4KCkd1YXJhbnRlZWluZyB0aGF0IHJldHVybmVkIGJhdGNoZXMgaG9sZCBubyBi dWZmZXIgcGlucyBvbiBpbmRleCBwYWdlcwpncmVhdGx5IHNpbXBsaWZpZXMgcmVzb3VyY2UgbWFu YWdlbWVudCBkdXJpbmcgaW5kZXggcHJlZmV0Y2hpbmcsIHdoZXJlCnRoZSByZWFkIHN0cmVhbSBp cyBleHBlY3RlZCB0byBob2xkIG1hbnkgcGlucyBvbiBoZWFwIHBhZ2VzLiAgVGhlCmFtZ2V0YmF0 Y2ggaW50ZXJmYWNlIHJlcXVpcmVzIHRoYXQgaW5kZXggQU1zIHRha2UgdGhlIHNhbWUgc3RhbmRh cmRpemVkCmFwcHJvYWNoIHRvIHBpbiBtYW5hZ2VtZW50IGZvciBwaW5zIHRoYXQgYXJlIHVzZWQg dG8gcHJldmVudCB1bnNhZmUKY29uY3VycmVudCBUSUQgcmVjeWNsaW5nIGJ5IFZBQ1VVTSAodGhh dCB3YXkgcHJlZmV0Y2hpbmcgY2FuIGhvbGQgb3BlbgptdWx0aXBsZSBiYXRjaGVzIHdpdGhvdXQg aXQgYWZmZWN0aW5nIHRoZSByZWFkIHN0cmVhbSkuICBOb3RlLCBob3dldmVyLAp0aGF0IGhhc2gg c3RpbGwgaG9sZHMgb24gdG8gcGlucyBuZWVkZWQgZm9yIGl0cyBvd24gaW50ZXJuYWwgcHVycG9z ZXMKKGUuZy4sIGl0J2xsIHN0aWxsIGhvbGQgb250byBhIHBpbiBkdXJpbmcgYSBidWNrZXQgc3Bs aXQpLgoKaGFzaGtpbGxpdGVtc2JhdGNoICh0aGUgaGFzaCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUg bmV3IGFta2lsbGl0ZW1zYmF0Y2gKaW50ZXJmYWNlKSBwZXJmb3JtcyBMUF9ERUFEIG1hcmtpbmcg b2YgZGVhZCBpbmRleCBlbnRyaWVzLCB3aGlsZQpmb2xsb3dpbmcgc2xpZ2h0bHkgZGlmZmVyZW50 IHJ1bGVzIHRvIHRoZSBvbGQgYXBwcm9hY2guICBJdCByZWxpZXMgb24KY29tcGFyaW5nIHRoZSBi YXRjaCdzIHNhdmVkIExTTiBhZ2FpbnN0IHRoZSBjdXJyZW50IHBhZ2UgTFNOIHRvIGRldGVjdApj b25jdXJyZW50IHBhZ2UgbW9kaWZpY2F0aW9ucywgd2hpY2ggaW4gdHVybiByZXF1aXJlcyBmYWtl IExTTiBzdXBwb3J0CmZvciB1bmxvZ2dlZCByZWxhdGlvbnMuICBQcmVwYXJhdG9yeSBjb21taXQg ZTU4MzZmN2IgYWRkZWQgdGhhdCBzdXBwb3J0CnRvIHRoZSBoYXNoIGluZGV4IEFNLgoKQXV0aG9y OiBQZXRlciBHZW9naGVnYW4gPHBnQGJvd3QuaWU+ClJldmlld2VkLUJ5OiBUb21hcyBWb25kcmEg PHRvbWFzQHZvbmRyYS5tZT4KUmV2aWV3ZWQtQnk6IEFuZHJlcyBGcmV1bmQgPGFuZHJlc0BhbmFy YXplbC5kZT4KRGlzY3Vzc2lvbjogaHR0cHM6Ly9wb3N0Z3IuZXMvbS9DQUgyLVd6bVlxaGFjQkgx NjFwZUFXYjVlRj1KYTdDRkFRKzBqU0VNcT1xbmZMVlRPT2dAbWFpbC5nbWFpbC5jb20KLS0tCiBz cmMvaW5jbHVkZS9hY2Nlc3MvaGFzaC5oICAgICAgICAgICAgfCAgODEgKystLS0tLQogc3JjL2Jh Y2tlbmQvYWNjZXNzL2hhc2gvUkVBRE1FICAgICAgIHwgIDMxICstLQogc3JjL2JhY2tlbmQvYWNj ZXNzL2hhc2gvaGFzaC5jICAgICAgIHwgMjEwICsrKysrKysrKystLS0tLS0KIHNyYy9iYWNrZW5k L2FjY2Vzcy9oYXNoL2hhc2hfeGxvZy5jICB8ICAgNCArLQogc3JjL2JhY2tlbmQvYWNjZXNzL2hh c2gvaGFzaHBhZ2UuYyAgIHwgIDIxICstCiBzcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNoc2Vh cmNoLmMgfCAzNDUgKysrKysrKysrKysrLS0tLS0tLS0tLS0tLS0tCiBzcmMvYmFja2VuZC9hY2Nl c3MvaGFzaC9oYXNodXRpbC5jICAgfCAxMzAgKy0tLS0tLS0tLQogZG9jL3NyYy9zZ21sL2luZGV4 YW0uc2dtbCAgICAgICAgICAgIHwgIDI4ICsrLQogc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZz Lmxpc3QgICAgIHwgICAzICstCiA5IGZpbGVzIGNoYW5nZWQsIDM0MyBpbnNlcnRpb25zKCspLCA1 MTAgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvYWNjZXNzL2hhc2guaCBi L3NyYy9pbmNsdWRlL2FjY2Vzcy9oYXNoLmgKaW5kZXggYTg3MDJmMGU1Li4xYTJlMDJmOWUgMTAw NjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9oYXNoLmgKKysrIGIvc3JjL2luY2x1ZGUvYWNj ZXNzL2hhc2guaApAQCAtMTgsNiArMTgsNyBAQAogI2RlZmluZSBIQVNIX0gKIAogI2luY2x1ZGUg ImFjY2Vzcy9hbWFwaS5oIgorI2luY2x1ZGUgImFjY2Vzcy9pbmRleGJhdGNoLmgiCiAjaW5jbHVk ZSAiYWNjZXNzL2l0dXAuaCIKICNpbmNsdWRlICJhY2Nlc3Mvc2Rpci5oIgogI2luY2x1ZGUgImNh dGFsb2cvcGdfYW1fZC5oIgpAQCAtMTAwLDU3ICsxMDEsMTggQEAgdHlwZWRlZiBIYXNoUGFnZU9w YXF1ZURhdGEgKkhhc2hQYWdlT3BhcXVlOwogICovCiAjZGVmaW5lIEhBU0hPX1BBR0VfSUQJCTB4 RkY4MAogCi10eXBlZGVmIHN0cnVjdCBIYXNoU2NhblBvc0l0ZW0JLyogd2hhdCB3ZSByZW1lbWJl ciBhYm91dCBlYWNoIG1hdGNoICovCisvKiBQZXItYmF0Y2ggZGF0YSBwcml2YXRlIHRvIHRoZSBo YXNoIGluZGV4IEFNICovCit0eXBlZGVmIHN0cnVjdCBIYXNoQmF0Y2hEYXRhCiB7Ci0JSXRlbVBv aW50ZXJEYXRhIGhlYXBUaWQ7CS8qIFRJRCBvZiByZWZlcmVuY2VkIGhlYXAgaXRlbSAqLwotCU9m ZnNldE51bWJlciBpbmRleE9mZnNldDsJLyogaW5kZXggaXRlbSdzIGxvY2F0aW9uIHdpdGhpbiBw YWdlICovCi19IEhhc2hTY2FuUG9zSXRlbTsKKwlCdWZmZXIJCWJ1ZjsJCQkvKiBpbmRleCBwYWdl J3MgYnVmZmVyIHBpbiAqLworCUJsb2NrTnVtYmVyIGN1cnJQYWdlOwkJLyogaW5kZXggcGFnZSdz IGJsb2NrIG51bWJlciAqLworCUJsb2NrTnVtYmVyIHByZXZQYWdlOwkJLyogaW5kZXggcGFnZSdz IGxlZnQgc2libGluZyAqLworCUJsb2NrTnVtYmVyIG5leHRQYWdlOwkJLyogaW5kZXggcGFnZSdz IHJpZ2h0IHNpYmxpbmcgKi8KK30gSGFzaEJhdGNoRGF0YTsKIAotdHlwZWRlZiBzdHJ1Y3QgSGFz aFNjYW5Qb3NEYXRhCi17Ci0JQnVmZmVyCQlidWY7CQkJLyogaWYgdmFsaWQsIHRoZSBidWZmZXIg aXMgcGlubmVkICovCi0JQmxvY2tOdW1iZXIgY3VyclBhZ2U7CQkvKiBjdXJyZW50IGhhc2ggaW5k ZXggcGFnZSAqLwotCUJsb2NrTnVtYmVyIG5leHRQYWdlOwkJLyogbmV4dCBvdmVyZmxvdyBwYWdl ICovCi0JQmxvY2tOdW1iZXIgcHJldlBhZ2U7CQkvKiBwcmV2IG92ZXJmbG93IG9yIGJ1Y2tldCBw YWdlICovCi0KLQkvKgotCSAqIFRoZSBpdGVtcyBhcnJheSBpcyBhbHdheXMgb3JkZXJlZCBpbiBp bmRleCBvcmRlciAoaWUsIGluY3JlYXNpbmcKLQkgKiBpbmRleG9mZnNldCkuICBXaGVuIHNjYW5u aW5nIGJhY2t3YXJkcyBpdCBpcyBjb252ZW5pZW50IHRvIGZpbGwgdGhlCi0JICogYXJyYXkgYmFj ay10by1mcm9udCwgc28gd2Ugc3RhcnQgYXQgdGhlIGxhc3Qgc2xvdCBhbmQgZmlsbCBkb3dud2Fy ZHMuCi0JICogSGVuY2Ugd2UgbmVlZCBib3RoIGEgZmlyc3QtdmFsaWQtZW50cnkgYW5kIGEgbGFz dC12YWxpZC1lbnRyeSBjb3VudGVyLgotCSAqIGl0ZW1JbmRleCBpcyBhIGN1cnNvciBzaG93aW5n IHdoaWNoIGVudHJ5IHdhcyBsYXN0IHJldHVybmVkIHRvIGNhbGxlci4KLQkgKi8KLQlpbnQJCQlm aXJzdEl0ZW07CQkvKiBmaXJzdCB2YWxpZCBpbmRleCBpbiBpdGVtc1tdICovCi0JaW50CQkJbGFz dEl0ZW07CQkvKiBsYXN0IHZhbGlkIGluZGV4IGluIGl0ZW1zW10gKi8KLQlpbnQJCQlpdGVtSW5k ZXg7CQkvKiBjdXJyZW50IGluZGV4IGluIGl0ZW1zW10gKi8KLQotCUhhc2hTY2FuUG9zSXRlbSBp dGVtc1tNYXhJbmRleFR1cGxlc1BlclBhZ2VdOwkvKiBNVVNUIEJFIExBU1QgKi8KLX0gSGFzaFNj YW5Qb3NEYXRhOwotCi0jZGVmaW5lIEhhc2hTY2FuUG9zSXNQaW5uZWQoc2NhbnBvcykgXAotKCBc Ci0JQXNzZXJ0TWFjcm8oQmxvY2tOdW1iZXJJc1ZhbGlkKChzY2FucG9zKS5jdXJyUGFnZSkgfHwg XAotCQkJCSFCdWZmZXJJc1ZhbGlkKChzY2FucG9zKS5idWYpKSwgXAotCUJ1ZmZlcklzVmFsaWQo KHNjYW5wb3MpLmJ1ZikgXAotKQotCi0jZGVmaW5lIEhhc2hTY2FuUG9zSXNWYWxpZChzY2FucG9z KSBcCi0oIFwKLQlBc3NlcnRNYWNybyhCbG9ja051bWJlcklzVmFsaWQoKHNjYW5wb3MpLmN1cnJQ YWdlKSB8fCBcCi0JCQkJIUJ1ZmZlcklzVmFsaWQoKHNjYW5wb3MpLmJ1ZikpLCBcCi0JQmxvY2tO dW1iZXJJc1ZhbGlkKChzY2FucG9zKS5jdXJyUGFnZSkgXAotKQotCi0jZGVmaW5lIEhhc2hTY2Fu UG9zSW52YWxpZGF0ZShzY2FucG9zKSBcCi0JZG8geyBcCi0JCShzY2FucG9zKS5idWYgPSBJbnZh bGlkQnVmZmVyOyBcCi0JCShzY2FucG9zKS5jdXJyUGFnZSA9IEludmFsaWRCbG9ja051bWJlcjsg XAotCQkoc2NhbnBvcykubmV4dFBhZ2UgPSBJbnZhbGlkQmxvY2tOdW1iZXI7IFwKLQkJKHNjYW5w b3MpLnByZXZQYWdlID0gSW52YWxpZEJsb2NrTnVtYmVyOyBcCi0JCShzY2FucG9zKS5maXJzdEl0 ZW0gPSAwOyBcCi0JCShzY2FucG9zKS5sYXN0SXRlbSA9IDA7IFwKLQkJKHNjYW5wb3MpLml0ZW1J bmRleCA9IDA7IFwKLQl9IHdoaWxlICgwKQorLyogQWNjZXNzIHRoZSBoYXNoLXByaXZhdGUgcGVy LWJhdGNoIGRhdGEgZnJvbSBhbiBJbmRleFNjYW5CYXRjaCBwb2ludGVyICovCisjZGVmaW5lIEhh c2hCYXRjaEdldERhdGEoc2NhbiwgYmF0Y2gpIFwKKwlpbmRleGFtX3V0aWxfYmF0Y2hfZ2V0X2Ft ZGF0YShzY2FuLCBiYXRjaCwgSGFzaEJhdGNoRGF0YSkKIAogLyoKICAqCUhhc2hTY2FuT3BhcXVl RGF0YSBpcyBwcml2YXRlIHN0YXRlIGZvciBhIGhhc2ggaW5kZXggc2Nhbi4KQEAgLTE3OCwxNSAr MTQwLDYgQEAgdHlwZWRlZiBzdHJ1Y3QgSGFzaFNjYW5PcGFxdWVEYXRhCiAJICogcmVmZXJyZWQg b25seSB3aGVuIGhhc2hzb19idWNfcG9wdWxhdGVkIGlzIHRydWUuCiAJICovCiAJYm9vbAkJaGFz aHNvX2J1Y19zcGxpdDsKLQkvKiBpbmZvIGFib3V0IGtpbGxlZCBpdGVtcyBpZiBhbnkgKGtpbGxl ZEl0ZW1zIGlzIE5VTEwgaWYgbmV2ZXIgdXNlZCkgKi8KLQlpbnQJCSAgICpraWxsZWRJdGVtczsJ LyogY3VyclBvcy5pdGVtcyBpbmRleGVzIG9mIGtpbGxlZCBpdGVtcyAqLwotCWludAkJCW51bUtp bGxlZDsJCS8qIG51bWJlciBvZiBjdXJyZW50bHkgc3RvcmVkIGl0ZW1zICovCi0KLQkvKgotCSAq IElkZW50aWZ5IGFsbCB0aGUgbWF0Y2hpbmcgaXRlbXMgb24gYSBwYWdlIGFuZCBzYXZlIHRoZW0g aW4KLQkgKiBIYXNoU2NhblBvc0RhdGEKLQkgKi8KLQlIYXNoU2NhblBvc0RhdGEgY3VyclBvczsJ LyogY3VycmVudCBwb3NpdGlvbiBkYXRhICovCiB9IEhhc2hTY2FuT3BhcXVlRGF0YTsKIAogdHlw ZWRlZiBIYXNoU2Nhbk9wYXF1ZURhdGEgKkhhc2hTY2FuT3BhcXVlOwpAQCAtMzY4LDExICszMjEs MTUgQEAgZXh0ZXJuIGJvb2wgaGFzaGluc2VydChSZWxhdGlvbiByZWwsIERhdHVtICp2YWx1ZXMs IGJvb2wgKmlzbnVsbCwKIAkJCQkJICAgSW5kZXhVbmlxdWVDaGVjayBjaGVja1VuaXF1ZSwKIAkJ CQkJICAgYm9vbCBpbmRleFVuY2hhbmdlZCwKIAkJCQkJICAgc3RydWN0IEluZGV4SW5mbyAqaW5k ZXhJbmZvKTsKLWV4dGVybiBib29sIGhhc2hnZXR0dXBsZShJbmRleFNjYW5EZXNjIHNjYW4sIFNj YW5EaXJlY3Rpb24gZGlyKTsKK2V4dGVybiBJbmRleFNjYW5CYXRjaCBoYXNoZ2V0YmF0Y2goSW5k ZXhTY2FuRGVzYyBzY2FuLAorCQkJCQkJCQkgICBJbmRleFNjYW5CYXRjaCBwcmlvcmJhdGNoLAor CQkJCQkJCQkgICBTY2FuRGlyZWN0aW9uIGRpcik7CiBleHRlcm4gaW50NjQgaGFzaGdldGJpdG1h cChJbmRleFNjYW5EZXNjIHNjYW4sIFRJREJpdG1hcCAqdGJtKTsKIGV4dGVybiBJbmRleFNjYW5E ZXNjIGhhc2hiZWdpbnNjYW4oUmVsYXRpb24gcmVsLCBpbnQgbmtleXMsIGludCBub3JkZXJieXMp OwogZXh0ZXJuIHZvaWQgaGFzaHJlc2NhbihJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5LZXkgc2Nh bmtleSwgaW50IG5zY2Fua2V5cywKIAkJCQkJICAgU2NhbktleSBvcmRlcmJ5cywgaW50IG5vcmRl cmJ5cyk7CitleHRlcm4gdm9pZCBoYXNodW5ndWFyZGJhdGNoKEluZGV4U2NhbkRlc2Mgc2Nhbiwg SW5kZXhTY2FuQmF0Y2ggYmF0Y2gpOworZXh0ZXJuIHZvaWQgaGFzaGtpbGxpdGVtc2JhdGNoKElu ZGV4U2NhbkRlc2Mgc2NhbiwgSW5kZXhTY2FuQmF0Y2ggYmF0Y2gpOwogZXh0ZXJuIHZvaWQgaGFz aGVuZHNjYW4oSW5kZXhTY2FuRGVzYyBzY2FuKTsKIGV4dGVybiBJbmRleEJ1bGtEZWxldGVSZXN1 bHQgKmhhc2hidWxrZGVsZXRlKEluZGV4VmFjdXVtSW5mbyAqaW5mbywKIAkJCQkJCQkJCQkJIElu ZGV4QnVsa0RlbGV0ZVJlc3VsdCAqc3RhdHMsCkBAIC00NDUsOCArNDAyLDkgQEAgZXh0ZXJuIHZv aWQgX2hhc2hfZmluaXNoX3NwbGl0KFJlbGF0aW9uIHJlbCwgQnVmZmVyIG1ldGFidWYsIEJ1ZmZl ciBvYnVmLAogCQkJCQkJCSAgIHVpbnQzMiBsb3dtYXNrKTsKIAogLyogaGFzaHNlYXJjaC5jICov Ci1leHRlcm4gYm9vbCBfaGFzaF9uZXh0KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlv biBkaXIpOwotZXh0ZXJuIGJvb2wgX2hhc2hfZmlyc3QoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2Fu RGlyZWN0aW9uIGRpcik7CitleHRlcm4gSW5kZXhTY2FuQmF0Y2ggX2hhc2hfbmV4dChJbmRleFNj YW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyLAorCQkJCQkJCQkgSW5kZXhTY2FuQmF0Y2gg cHJpb3JiYXRjaCk7CitleHRlcm4gSW5kZXhTY2FuQmF0Y2ggX2hhc2hfZmlyc3QoSW5kZXhTY2Fu RGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcik7CiAKIC8qIGhhc2hzb3J0LmMgKi8KIHR5cGVk ZWYgc3RydWN0IEhTcG9vbCBIU3Bvb2w7CS8qIG9wYXF1ZSBzdHJ1Y3QgaW4gaGFzaHNvcnQuYyAq LwpAQCAtNDc2LDcgKzQzNCw2IEBAIGV4dGVybiBCbG9ja051bWJlciBfaGFzaF9nZXRfb2xkYmxv Y2tfZnJvbV9uZXdidWNrZXQoUmVsYXRpb24gcmVsLCBCdWNrZXQgbmV3X2J1CiBleHRlcm4gQmxv Y2tOdW1iZXIgX2hhc2hfZ2V0X25ld2Jsb2NrX2Zyb21fb2xkYnVja2V0KFJlbGF0aW9uIHJlbCwg QnVja2V0IG9sZF9idWNrZXQpOwogZXh0ZXJuIEJ1Y2tldCBfaGFzaF9nZXRfbmV3YnVja2V0X2Zy b21fb2xkYnVja2V0KFJlbGF0aW9uIHJlbCwgQnVja2V0IG9sZF9idWNrZXQsCiAJCQkJCQkJCQkJ CQkgdWludDMyIGxvd21hc2ssIHVpbnQzMiBtYXhidWNrZXQpOwotZXh0ZXJuIHZvaWQgX2hhc2hf a2lsbF9pdGVtcyhJbmRleFNjYW5EZXNjIHNjYW4pOwogCiAvKiBoYXNoLmMgKi8KIGV4dGVybiB2 b2lkIGhhc2hidWNrZXRjbGVhbnVwKFJlbGF0aW9uIHJlbCwgQnVja2V0IGN1cl9idWNrZXQsCmRp ZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9SRUFETUUgYi9zcmMvYmFja2VuZC9h Y2Nlc3MvaGFzaC9SRUFETUUKaW5kZXggZmM5MDMxMTE3Li45NzJiYjY2NmIgMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL2FjY2Vzcy9oYXNoL1JFQURNRQorKysgYi9zcmMvYmFja2VuZC9hY2Nlc3Mv aGFzaC9SRUFETUUKQEAgLTI1NSwyOCArMjU1LDI5IEBAIFRoZSByZWFkZXIgYWxnb3JpdGhtIGlz OgogCQlyZXRha2UgdGhlIGJ1ZmZlciBjb250ZW50IGxvY2sgb24gbmV3IGJ1Y2tldAogCQlhcnJh bmdlIHRvIHNjYW4gdGhlIG9sZCBidWNrZXQgbm9ybWFsbHkgYW5kIHRoZSBuZXcgYnVja2V0IGZv cgogICAgICAgICAgdHVwbGVzIHdoaWNoIGFyZSBub3QgbW92ZWQtYnktc3BsaXQKLS0tIHRoZW4s IHBlciByZWFkIHJlcXVlc3Q6CistLSB0aGVuLCBwZXIgYmF0Y2ggKHBhZ2UpIHJlcXVlc3Q6CiAJ cmVhY3F1aXJlIGNvbnRlbnQgbG9jayBvbiBjdXJyZW50IHBhZ2UKIAlzdGVwIHRvIG5leHQgcGFn ZSBpZiBuZWNlc3NhcnkgKG5vIGNoYWluaW5nIG9mIGNvbnRlbnQgbG9ja3MsIGJ1dCBrZWVwCiAJ dGhlIHBpbiBvbiB0aGUgcHJpbWFyeSBidWNrZXQgdGhyb3VnaG91dCB0aGUgc2NhbikKLQlzYXZl IGFsbCB0aGUgbWF0Y2hpbmcgdHVwbGVzIGZyb20gY3VycmVudCBpbmRleCBwYWdlIGludG8gYW4g aXRlbXMgYXJyYXkKLQlyZWxlYXNlIHBpbiBhbmQgY29udGVudCBsb2NrIChidXQgaWYgaXQgaXMg cHJpbWFyeSBidWNrZXQgcGFnZSByZXRhaW4KLQlpdHMgcGluIHRpbGwgdGhlIGVuZCBvZiB0aGUg c2NhbikKLQlnZXQgdHVwbGUgZnJvbSBhbiBpdGVtIGFycmF5CisJc2F2ZSBhbGwgdGhlIG1hdGNo aW5nIHR1cGxlcyBmcm9tIGN1cnJlbnQgaW5kZXggcGFnZSBpbnRvIGEgYmF0Y2gKKwlyZWxlYXNl IGNvbnRlbnQgbG9jayBvbiBjdXJyZW50IHBhZ2UgcmV0dXJuIGJhdGNoIHRvIHRhYmxlIEFNICh0 YWJsZSBBTQorCXdpbGwgZHJvcCBiYXRjaCdzIGJ1ZmZlciBwaW4sIHRob3VnaCBwcmltYXJ5IGJ1 Y2tldCBwYWdlIHBpbiBpcyBrZXB0CisJdW50aWwgdGhlIGVuZCBvZiB0aGUgc2NhbikKIC0tIGF0 IHNjYW4gc2h1dGRvd246Ci0JcmVsZWFzZSBhbGwgcGlucyBzdGlsbCBoZWxkCisJcmVsZWFzZSBz Y2FuLW93bmVkIHBpbnMgKGUuZy4sIHByaW1hcnkgYnVja2V0IHBhZ2UgcGluKSBhcyBuZWVkZWQK IAogSG9sZGluZyB0aGUgYnVmZmVyIHBpbiBvbiB0aGUgcHJpbWFyeSBidWNrZXQgcGFnZSBmb3Ig dGhlIHdob2xlIHNjYW4gcHJldmVudHMKLXRoZSByZWFkZXIncyBjdXJyZW50LXR1cGxlIHBvaW50 ZXIgZnJvbSBiZWluZyBpbnZhbGlkYXRlZCBieSBzcGxpdHMgb3IKLWNvbXBhY3Rpb25zLiAgKE9m IGNvdXJzZSwgb3RoZXIgYnVja2V0cyBjYW4gc3RpbGwgYmUgc3BsaXQgb3IgY29tcGFjdGVkLikK K3RoZSBidWNrZXQgZnJvbSBiZWluZyByZW9yZ2FuaXplZCBieSBzcGxpdHMgb3IgY29tcGFjdGlv bnMgd2hpbGUgdGhlIHNjYW4gaXMKK2luIHByb2dyZXNzLiAgKE9mIGNvdXJzZSwgb3RoZXIgYnVj a2V0cyBjYW4gc3RpbGwgYmUgc3BsaXQgb3IgY29tcGFjdGVkLikKIAotVG8gbWluaW1pemUgbG9j ay91bmxvY2sgdHJhZmZpYywgaGFzaCBpbmRleCBzY2FuIGFsd2F5cyBzZWFyY2hlcyB0aGUgZW50 aXJlCi1oYXNoIHBhZ2UgdG8gaWRlbnRpZnkgYWxsIHRoZSBtYXRjaGluZyBpdGVtcyBhdCBvbmNl LCBjb3B5aW5nIHRoZWlyIGhlYXAgdHVwbGUKLUlEcyBpbnRvIGJhY2tlbmQtbG9jYWwgc3RvcmFn ZS4gVGhlIGhlYXAgdHVwbGUgSURzIGFyZSB0aGVuIHByb2Nlc3NlZCB3aGlsZSBub3QKLWhvbGRp bmcgYW55IHBhZ2UgbG9jayB3aXRoaW4gdGhlIGluZGV4IHRoZXJlYnksIGFsbG93aW5nIGNvbmN1 cnJlbnQgaW5zZXJ0aW9uCi10byBoYXBwZW4gb24gdGhlIHNhbWUgaW5kZXggcGFnZSB3aXRob3V0 IGFueSByZXF1aXJlbWVudCBvZiByZS1maW5kaW5nIHRoZQotY3VycmVudCBzY2FuIHBvc2l0aW9u IGZvciB0aGUgcmVhZGVyLiBXZSBkbyBjb250aW51ZSB0byBob2xkIGEgcGluIG9uIHRoZQotYnVj a2V0IHBhZ2UsIHRvIHByb3RlY3QgYWdhaW5zdCBjb25jdXJyZW50IGRlbGV0aW9ucyBhbmQgYnVj a2V0IHNwbGl0LgorVG8gbWluaW1pemUgbG9jay91bmxvY2sgdHJhZmZpYywgaGFzaCBpbmRleCBz Y2FucyBhbHdheXMgc2VhcmNoIHRoZSBlbnRpcmUKK2hhc2ggcGFnZSB0byBpZGVudGlmeSBhbGwg dGhlIG1hdGNoaW5nIGl0ZW1zIGF0IG9uY2UsIHJldHVybmluZyB0aGVtIGluCitiYXRjaGVzIHRv IHRoZSB0YWJsZSBBTS4gIFRoZSB0YWJsZSBBTSBwcm9jZXNzZXMgYmF0Y2hlcyB3aGlsZSBubyBw YWdlIGxvY2sKK2lzIGhlbGQgd2l0aGluIHRoZSBpbmRleCwgYWxsb3dpbmcgY29uY3VycmVudCBp bnNlcnRpb24gdG8gaGFwcGVuIG9uIHRoZQorc2FtZSBpbmRleCBwYWdlIHdpdGhvdXQgYW55IHJl cXVpcmVtZW50IG9mIHJlLWZpbmRpbmcgdGhlIGN1cnJlbnQgc2NhbgorcG9zaXRpb24gZm9yIHRo ZSByZWFkZXIuICBUaGUgdGFibGUgQU0gY29udHJvbHMgd2hlbiBiYXRjaCBidWZmZXIgcGlucyBh cmUKK2Ryb3BwZWQuICBXZSBkbyBjb250aW51ZSB0byBob2xkIGEgcGluIG9uIHRoZSBwcmltYXJ5 IGJ1Y2tldCBwYWdlLCB0bworcHJvdGVjdCBhZ2FpbnN0IGNvbmN1cnJlbnQgYnVja2V0IHNwbGl0 cy4KIAogVG8gYWxsb3cgZm9yIHNjYW5zIGR1cmluZyBhIGJ1Y2tldCBzcGxpdCwgaWYgYXQgdGhl IHN0YXJ0IG9mIHRoZSBzY2FuLCB0aGUKIGJ1Y2tldCBpcyBtYXJrZWQgYXMgYnVja2V0LWJlaW5n LXBvcHVsYXRlZCwgaXQgc2NhbiBhbGwgdGhlIHR1cGxlcyBpbiB0aGF0CmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNoLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9o YXNoLmMKaW5kZXggOWFlOWYwNDQ4Li44Y2MyNGY5MzkgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5k L2FjY2Vzcy9oYXNoL2hhc2guYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNoLmMK QEAgLTExMywxMCArMTEzLDEwIEBAIGhhc2hoYW5kbGVyKFBHX0ZVTkNUSU9OX0FSR1MpCiAJCS5h bWFkanVzdG1lbWJlcnMgPSBoYXNoYWRqdXN0bWVtYmVycywKIAkJLmFtYmVnaW5zY2FuID0gaGFz aGJlZ2luc2NhbiwKIAkJLmFtcmVzY2FuID0gaGFzaHJlc2NhbiwKLQkJLmFtZ2V0dHVwbGUgPSBo YXNoZ2V0dHVwbGUsCi0JCS5hbWdldGJhdGNoID0gTlVMTCwKLQkJLmFtdW5ndWFyZGJhdGNoID0g TlVMTCwKLQkJLmFta2lsbGl0ZW1zYmF0Y2ggPSBOVUxMLAorCQkuYW1nZXR0dXBsZSA9IE5VTEws CisJCS5hbWdldGJhdGNoID0gaGFzaGdldGJhdGNoLAorCQkuYW11bmd1YXJkYmF0Y2ggPSBoYXNo dW5ndWFyZGJhdGNoLAorCQkuYW1raWxsaXRlbXNiYXRjaCA9IGhhc2hraWxsaXRlbXNiYXRjaCwK IAkJLmFtZ2V0Yml0bWFwID0gaGFzaGdldGJpdG1hcCwKIAkJLmFtZW5kc2NhbiA9IGhhc2hlbmRz Y2FuLAogCQkuYW1wb3NyZXNldCA9IE5VTEwsCkBAIC0yOTksNTMgKzI5OSwyOCBAQCBoYXNoaW5z ZXJ0KFJlbGF0aW9uIHJlbCwgRGF0dW0gKnZhbHVlcywgYm9vbCAqaXNudWxsLAogCiAKIC8qCi0g KgloYXNoZ2V0dHVwbGUoKSAtLSBHZXQgdGhlIG5leHQgdHVwbGUgaW4gdGhlIHNjYW4uCisgKglo YXNoZ2V0YmF0Y2goKSAtLSBHZXQgdGhlIGZpcnN0IG9yIG5leHQgYmF0Y2ggb2YgdHVwbGVzIGlu IHRoZSBzY2FuCiAgKi8KLWJvb2wKLWhhc2hnZXR0dXBsZShJbmRleFNjYW5EZXNjIHNjYW4sIFNj YW5EaXJlY3Rpb24gZGlyKQorSW5kZXhTY2FuQmF0Y2gKK2hhc2hnZXRiYXRjaChJbmRleFNjYW5E ZXNjIHNjYW4sIEluZGV4U2NhbkJhdGNoIHByaW9yYmF0Y2gsIFNjYW5EaXJlY3Rpb24gZGlyKQog ewogCUhhc2hTY2FuT3BhcXVlIHNvID0gKEhhc2hTY2FuT3BhcXVlKSBzY2FuLT5vcGFxdWU7Ci0J Ym9vbAkJcmVzOwogCiAJLyogSGFzaCBpbmRleGVzIGFyZSBhbHdheXMgbG9zc3kgc2luY2Ugd2Ug c3RvcmUgb25seSB0aGUgaGFzaCBjb2RlICovCiAJc2Nhbi0+eHNfcmVjaGVjayA9IHRydWU7CiAK LQkvKgotCSAqIElmIHdlJ3ZlIGFscmVhZHkgaW5pdGlhbGl6ZWQgdGhpcyBzY2FuLCB3ZSBjYW4g anVzdCBhZHZhbmNlIGl0IGluIHRoZQotCSAqIGFwcHJvcHJpYXRlIGRpcmVjdGlvbi4gIElmIHdl IGhhdmVuJ3QgZG9uZSBzbyB5ZXQsIHdlIGNhbGwgYSByb3V0aW5lIHRvCi0JICogZ2V0IHRoZSBm aXJzdCBpdGVtIGluIHRoZSBzY2FuLgotCSAqLwotCWlmICghSGFzaFNjYW5Qb3NJc1ZhbGlkKHNv LT5jdXJyUG9zKSkKLQkJcmVzID0gX2hhc2hfZmlyc3Qoc2NhbiwgZGlyKTsKLQllbHNlCisJaWYg KHByaW9yYmF0Y2ggPT0gTlVMTCkKIAl7Ci0JCS8qCi0JCSAqIENoZWNrIHRvIHNlZSBpZiB3ZSBz aG91bGQga2lsbCB0aGUgcHJldmlvdXNseS1mZXRjaGVkIHR1cGxlLgotCQkgKi8KLQkJaWYgKHNj YW4tPmtpbGxfcHJpb3JfdHVwbGUpCi0JCXsKLQkJCS8qCi0JCQkgKiBZZXMsIHNvIHJlbWVtYmVy IGl0IGZvciBsYXRlci4gKFdlJ2xsIGRlYWwgd2l0aCBhbGwgc3VjaCB0dXBsZXMKLQkJCSAqIGF0 IG9uY2UgcmlnaHQgYWZ0ZXIgbGVhdmluZyB0aGUgaW5kZXggcGFnZSBvciBhdCBlbmQgb2Ygc2Nh bi4pCi0JCQkgKiBJbiBjYXNlIGlmIGNhbGxlciByZXZlcnNlcyB0aGUgaW5kZXhzY2FuIGRpcmVj dGlvbiBpdCBpcyBxdWl0ZQotCQkJICogcG9zc2libGUgdGhhdCB0aGUgc2FtZSBpdGVtIG1pZ2h0 IGdldCBlbnRlcmVkIG11bHRpcGxlIHRpbWVzLgotCQkJICogQnV0LCB3ZSBkb24ndCBkZXRlY3Qg dGhhdDsgaW5zdGVhZCwgd2UganVzdCBmb3JnZXQgYW55IGV4Y2VzcwotCQkJICogZW50cmllcy4K LQkJCSAqLwotCQkJaWYgKHNvLT5raWxsZWRJdGVtcyA9PSBOVUxMKQotCQkJCXNvLT5raWxsZWRJ dGVtcyA9IHBhbGxvY19hcnJheShpbnQsIE1heEluZGV4VHVwbGVzUGVyUGFnZSk7CisJCVJlbGF0 aW9uCXJlbCA9IHNjYW4tPmluZGV4UmVsYXRpb247CiAKLQkJCWlmIChzby0+bnVtS2lsbGVkIDwg TWF4SW5kZXhUdXBsZXNQZXJQYWdlKQotCQkJCXNvLT5raWxsZWRJdGVtc1tzby0+bnVtS2lsbGVk KytdID0gc28tPmN1cnJQb3MuaXRlbUluZGV4OwotCQl9CisJCV9oYXNoX2Ryb3BzY2FuYnVmKHJl bCwgc28pOwogCi0JCS8qCi0JCSAqIE5vdyBjb250aW51ZSB0aGUgc2Nhbi4KLQkJICovCi0JCXJl cyA9IF9oYXNoX25leHQoc2NhbiwgZGlyKTsKKwkJLyogSW5pdGlhbGl6ZSB0aGUgc2NhbiwgYW5k IHJldHVybiBmaXJzdCBiYXRjaCBvZiBtYXRjaGluZyBpdGVtcyAqLworCQlyZXR1cm4gX2hhc2hf Zmlyc3Qoc2NhbiwgZGlyKTsKIAl9CiAKLQlyZXR1cm4gcmVzOworCS8qIFJldHVybiBiYXRjaCBw b3NpdGlvbmVkIGFmdGVyIGNhbGxlcidzIGJhdGNoIChpbiBkaXJlY3Rpb24gJ2RpcicpICovCisJ cmV0dXJuIF9oYXNoX25leHQoc2NhbiwgZGlyLCBwcmlvcmJhdGNoKTsKIH0KIAogCkBAIC0zNTUs MjYgKzMzMCwyNiBAQCBoYXNoZ2V0dHVwbGUoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0 aW9uIGRpcikKIGludDY0CiBoYXNoZ2V0Yml0bWFwKEluZGV4U2NhbkRlc2Mgc2NhbiwgVElEQml0 bWFwICp0Ym0pCiB7Ci0JSGFzaFNjYW5PcGFxdWUgc28gPSAoSGFzaFNjYW5PcGFxdWUpIHNjYW4t Pm9wYXF1ZTsKLQlib29sCQlyZXM7CisJSW5kZXhTY2FuQmF0Y2ggYmF0Y2g7CiAJaW50NjQJCW50 aWRzID0gMDsKLQlIYXNoU2NhblBvc0l0ZW0gKmN1cnJJdGVtOwogCi0JcmVzID0gX2hhc2hfZmly c3Qoc2NhbiwgRm9yd2FyZFNjYW5EaXJlY3Rpb24pOworCWJhdGNoID0gX2hhc2hfZmlyc3Qoc2Nh biwgRm9yd2FyZFNjYW5EaXJlY3Rpb24pOwogCi0Jd2hpbGUgKHJlcykKKwl3aGlsZSAoYmF0Y2gg IT0gTlVMTCkKIAl7Ci0JCWN1cnJJdGVtID0gJnNvLT5jdXJyUG9zLml0ZW1zW3NvLT5jdXJyUG9z Lml0ZW1JbmRleF07CisJCWZvciAoaW50IGl0ZW1JbmRleCA9IGJhdGNoLT5maXJzdEl0ZW07CisJ CQkgaXRlbUluZGV4IDw9IGJhdGNoLT5sYXN0SXRlbTsKKwkJCSBpdGVtSW5kZXgrKykKKwkJewor CQkJdGJtX2FkZF90dXBsZXModGJtLCAmYmF0Y2gtPml0ZW1zW2l0ZW1JbmRleF0udGFibGVUaWQs IDEsIHRydWUpOworCQkJbnRpZHMrKzsKKwkJfQogCiAJCS8qCi0JCSAqIF9oYXNoX2ZpcnN0IGFu ZCBfaGFzaF9uZXh0IGhhbmRsZSBlbGltaW5hdGUgZGVhZCBpbmRleCBlbnRyaWVzCi0JCSAqIHdo ZW5ldmVyIHNjYW4tPmlnbm9yZV9raWxsZWRfdHVwbGVzIGlzIHRydWUuICBUaGVyZWZvcmUsIHRo ZXJlJ3MKLQkJICogbm90aGluZyB0byBkbyBoZXJlIGV4Y2VwdCBhZGQgdGhlIHJlc3VsdHMgdG8g dGhlIFRJREJpdG1hcC4KKwkJICogX2hhc2hfbmV4dCByZWxlYXNlcyB0aGUgcHJpb3IgYmF0Y2gg Zm9yIGJpdG1hcCBjYWxsZXJzIGJlZm9yZQorCQkgKiBhbGxvY2F0aW5nIHRoZSBuZXh0IG9uZSwg c28gb25seSBvbmUgYmF0Y2ggaXMgZXZlciB1c2VkIGF0IGEgdGltZQogCQkgKi8KLQkJdGJtX2Fk ZF90dXBsZXModGJtLCAmKGN1cnJJdGVtLT5oZWFwVGlkKSwgMSwgdHJ1ZSk7Ci0JCW50aWRzKys7 Ci0KLQkJcmVzID0gX2hhc2hfbmV4dChzY2FuLCBGb3J3YXJkU2NhbkRpcmVjdGlvbik7CisJCWJh dGNoID0gX2hhc2hfbmV4dChzY2FuLCBGb3J3YXJkU2NhbkRpcmVjdGlvbiwgYmF0Y2gpOwogCX0K IAogCXJldHVybiBudGlkczsKQEAgLTM5NiwxNyArMzcxLDE2IEBAIGhhc2hiZWdpbnNjYW4oUmVs YXRpb24gcmVsLCBpbnQgbmtleXMsIGludCBub3JkZXJieXMpCiAJc2NhbiA9IFJlbGF0aW9uR2V0 SW5kZXhTY2FuKHJlbCwgbmtleXMsIG5vcmRlcmJ5cyk7CiAKIAlzbyA9IChIYXNoU2Nhbk9wYXF1 ZSkgcGFsbG9jX29iamVjdChIYXNoU2Nhbk9wYXF1ZURhdGEpOwotCUhhc2hTY2FuUG9zSW52YWxp ZGF0ZShzby0+Y3VyclBvcyk7CiAJc28tPmhhc2hzb19idWNrZXRfYnVmID0gSW52YWxpZEJ1ZmZl cjsKIAlzby0+aGFzaHNvX3NwbGl0X2J1Y2tldF9idWYgPSBJbnZhbGlkQnVmZmVyOwogCiAJc28t Pmhhc2hzb19idWNfcG9wdWxhdGVkID0gZmFsc2U7CiAJc28tPmhhc2hzb19idWNfc3BsaXQgPSBm YWxzZTsKIAotCXNvLT5raWxsZWRJdGVtcyA9IE5VTEw7Ci0Jc28tPm51bUtpbGxlZCA9IDA7Ci0K IAlzY2FuLT5vcGFxdWUgPSBzbzsKKwlzY2FuLT5tYXhpdGVtc2JhdGNoID0gTWF4SW5kZXhUdXBs ZXNQZXJQYWdlOworCXNjYW4tPmJhdGNoX2luZGV4X29wYXF1ZV9zaXplID0gTUFYQUxJR04oc2l6 ZW9mKEhhc2hCYXRjaERhdGEpKTsKKwlzY2FuLT5iYXRjaF90dXBsZXNfd29ya3NwYWNlID0gMDsK IAogCXJldHVybiBzY2FuOwogfQpAQCAtNDIxLDE4ICszOTUsOCBAQCBoYXNocmVzY2FuKEluZGV4 U2NhbkRlc2Mgc2NhbiwgU2NhbktleSBzY2Fua2V5LCBpbnQgbnNjYW5rZXlzLAogCUhhc2hTY2Fu T3BhcXVlIHNvID0gKEhhc2hTY2FuT3BhcXVlKSBzY2FuLT5vcGFxdWU7CiAJUmVsYXRpb24JcmVs ID0gc2Nhbi0+aW5kZXhSZWxhdGlvbjsKIAotCWlmIChIYXNoU2NhblBvc0lzVmFsaWQoc28tPmN1 cnJQb3MpKQotCXsKLQkJLyogQmVmb3JlIGxlYXZpbmcgY3VycmVudCBwYWdlLCBkZWFsIHdpdGgg YW55IGtpbGxlZCBpdGVtcyAqLwotCQlpZiAoc28tPm51bUtpbGxlZCA+IDApCi0JCQlfaGFzaF9r aWxsX2l0ZW1zKHNjYW4pOwotCX0KLQogCV9oYXNoX2Ryb3BzY2FuYnVmKHJlbCwgc28pOwogCi0J Lyogc2V0IHBvc2l0aW9uIGludmFsaWQgKHRoaXMgd2lsbCBjYXVzZSBfaGFzaF9maXJzdCBjYWxs KSAqLwotCUhhc2hTY2FuUG9zSW52YWxpZGF0ZShzby0+Y3VyclBvcyk7Ci0KIAkvKiBVcGRhdGUg c2NhbiBrZXksIGlmIGEgbmV3IG9uZSBpcyBnaXZlbiAqLwogCWlmIChzY2Fua2V5ICYmIHNjYW4t Pm51bWJlck9mS2V5cyA+IDApCiAJCW1lbWNweShzY2FuLT5rZXlEYXRhLCBzY2Fua2V5LCBzY2Fu LT5udW1iZXJPZktleXMgKiBzaXplb2YoU2NhbktleURhdGEpKTsKQEAgLTQ0MSw2ICs0MDUsMTEx IEBAIGhhc2hyZXNjYW4oSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuS2V5IHNjYW5rZXksIGludCBu c2NhbmtleXMsCiAJc28tPmhhc2hzb19idWNfc3BsaXQgPSBmYWxzZTsKIH0KIAorLyoKKyAqCWhh c2h1bmd1YXJkYmF0Y2goKSAtLSBEcm9wIGJhdGNoJ3MgVElEIHJlY3ljbGluZyBpbnRlcmxvY2sg KGJ1ZmZlciBwaW4pCisgKgorICogQ2FsbGVkIGJ5IHRoZSB0YWJsZSBBTSB3aGVuIGl0J3Mgc2Fm ZSB0byBkcm9wIHRoZSBidWZmZXIgcGluIGhlbGQgdG8KKyAqIHByZXZlbnQgY29uY3VycmVudCBU SUQgcmVjeWNsaW5nIGJ5IFZBQ1VVTS4KKyAqLwordm9pZAoraGFzaHVuZ3VhcmRiYXRjaChJbmRl eFNjYW5EZXNjIHNjYW4sIEluZGV4U2NhbkJhdGNoIGJhdGNoKQoreworCUhhc2hCYXRjaERhdGEg Kmhhc2hiYXRjaCA9IEhhc2hCYXRjaEdldERhdGEoc2NhbiwgYmF0Y2gpOworCisJLyogU2hvdWxk IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgaWZmICFiYXRjaEltbWVkaWF0ZVVuZ3VhcmQgKi8KKwlB c3NlcnQoIXNjYW4tPmJhdGNoSW1tZWRpYXRlVW5ndWFyZCk7CisJQXNzZXJ0KGJhdGNoLT5pc0d1 YXJkZWQpOworCisJUmVsZWFzZUJ1ZmZlcihoYXNoYmF0Y2gtPmJ1Zik7Cit9CisKKy8qCisgKglo YXNoa2lsbGl0ZW1zYmF0Y2goKSAtLSBNYXJrIGRlYWQgaXRlbXMnIGluZGV4IHR1cGxlcyBMUF9E RUFECisgKi8KK3ZvaWQKK2hhc2hraWxsaXRlbXNiYXRjaChJbmRleFNjYW5EZXNjIHNjYW4sIElu ZGV4U2NhbkJhdGNoIGJhdGNoKQoreworCVJlbGF0aW9uCXJlbCA9IHNjYW4tPmluZGV4UmVsYXRp b247CisJSGFzaEJhdGNoRGF0YSAqaGFzaGJhdGNoID0gSGFzaEJhdGNoR2V0RGF0YShzY2FuLCBi YXRjaCk7CisJQnVmZmVyCQlidWY7CisJUGFnZQkJcGFnZTsKKwlIYXNoUGFnZU9wYXF1ZSBvcGFx dWU7CisJT2Zmc2V0TnVtYmVyIG9mZm51bSwKKwkJCQltYXhvZmY7CisJYm9vbAkJa2lsbGVkc29t ZXRoaW5nID0gZmFsc2U7CisJWExvZ1JlY1B0cglsYXRlc3Rsc247CisKKwlBc3NlcnQoYmF0Y2gt Pm51bURlYWQgPiAwKTsKKworCWJ1ZiA9IF9oYXNoX2dldGJ1ZihyZWwsIGhhc2hiYXRjaC0+Y3Vy clBhZ2UsIEhBU0hfUkVBRCwKKwkJCQkJICAgTEhfQlVDS0VUX1BBR0UgfCBMSF9PVkVSRkxPV19Q QUdFKTsKKworCWxhdGVzdGxzbiA9IEJ1ZmZlckdldExTTkF0b21pYyhidWYpOworCUFzc2VydChi YXRjaC0+bHNuIDw9IGxhdGVzdGxzbik7CisJaWYgKGJhdGNoLT5sc24gIT0gbGF0ZXN0bHNuKQor CXsKKwkJLyogTW9kaWZpZWQsIGdpdmUgdXAgb24gaGludGluZyAqLworCQlfaGFzaF9yZWxidWYo cmVsLCBidWYpOworCQlyZXR1cm47CisJfQorCisJcGFnZSA9IEJ1ZmZlckdldFBhZ2UoYnVmKTsK KwlvcGFxdWUgPSBIYXNoUGFnZUdldE9wYXF1ZShwYWdlKTsKKwltYXhvZmYgPSBQYWdlR2V0TWF4 T2Zmc2V0TnVtYmVyKHBhZ2UpOworCisJLyogSXRlcmF0ZSB0aHJvdWdoIGJhdGNoLT5kZWFkSXRl bXNbXSBpbiBpbmRleCBwYWdlIG9yZGVyICovCisJZm9yIChpbnQgaSA9IDA7IGkgPCBiYXRjaC0+ bnVtRGVhZDsgaSsrKQorCXsKKwkJaW50CQkJaXRlbUluZGV4ID0gYmF0Y2gtPmRlYWRJdGVtc1tp XTsKKwkJQmF0Y2hNYXRjaGluZ0l0ZW0gKmN1cnJJdGVtID0gJmJhdGNoLT5pdGVtc1tpdGVtSW5k ZXhdOworCisJCW9mZm51bSA9IGN1cnJJdGVtLT5pbmRleE9mZnNldDsKKworCQlBc3NlcnQoaXRl bUluZGV4ID49IGJhdGNoLT5maXJzdEl0ZW0gJiYKKwkJCSAgIGl0ZW1JbmRleCA8PSBiYXRjaC0+ bGFzdEl0ZW0pOworCisJCXdoaWxlIChvZmZudW0gPD0gbWF4b2ZmKQorCQl7CisJCQlJdGVtSWQJ CWlpZCA9IFBhZ2VHZXRJdGVtSWQocGFnZSwgb2ZmbnVtKTsKKwkJCUluZGV4VHVwbGUJaXR1cGxl ID0gKEluZGV4VHVwbGUpIFBhZ2VHZXRJdGVtKHBhZ2UsIGlpZCk7CisKKwkJCWlmIChJdGVtUG9p bnRlckVxdWFscygmaXR1cGxlLT50X3RpZCwgJmN1cnJJdGVtLT50YWJsZVRpZCkpCisJCQl7CisJ CQkJaWYgKCFraWxsZWRzb21ldGhpbmcpCisJCQkJeworCQkJCQkvKgorCQkJCQkgKiBVc2UgdGhl IGhpbnQgYml0IGluZnJhc3RydWN0dXJlIHRvIGNoZWNrIGlmIHdlIGNhbgorCQkJCQkgKiB1cGRh dGUgdGhlIHBhZ2Ugd2hpbGUganVzdCBob2xkaW5nIGEgc2hhcmUgbG9jay4gSWYgd2UKKwkJCQkJ ICogYXJlIG5vdCBhbGxvd2VkLCB0aGVyZSdzIG5vIHBvaW50IGNvbnRpbnVpbmcuCisJCQkJCSAq LworCQkJCQlpZiAoIUJ1ZmZlckJlZ2luU2V0SGludEJpdHMoYnVmKSkKKwkJCQkJCWdvdG8gdW5s b2NrX3BhZ2U7CisJCQkJfQorCisJCQkJLyogZm91bmQgdGhlIGl0ZW0gKi8KKwkJCQlJdGVtSWRN YXJrRGVhZChpaWQpOworCQkJCWtpbGxlZHNvbWV0aGluZyA9IHRydWU7CisJCQkJYnJlYWs7CQkJ Lyogb3V0IG9mIGlubmVyIHNlYXJjaCBsb29wICovCisJCQl9CisJCQlvZmZudW0gPSBPZmZzZXRO dW1iZXJOZXh0KG9mZm51bSk7CisJCX0KKwl9CisKKwkvKgorCSAqIFNpbmNlIHRoaXMgY2FuIGJl IHJlZG9uZSBsYXRlciBpZiBuZWVkZWQsIG1hcmsgYXMgZGlydHkgaGludC4gV2hlbmV2ZXIKKwkg KiB3ZSBtYXJrIGFueXRoaW5nIExQX0RFQUQsIHdlIGFsc28gc2V0IHRoZSBwYWdlJ3MKKwkgKiBM SF9QQUdFX0hBU19ERUFEX1RVUExFUyBmbGFnLCB3aGljaCBpcyBsaWtld2lzZSBqdXN0IGEgaGlu dC4KKwkgKi8KKwlpZiAoa2lsbGVkc29tZXRoaW5nKQorCXsKKwkJb3BhcXVlLT5oYXNob19mbGFn IHw9IExIX1BBR0VfSEFTX0RFQURfVFVQTEVTOworCQlCdWZmZXJGaW5pc2hTZXRIaW50Qml0cyhi dWYsIHRydWUsIHRydWUpOworCX0KKwordW5sb2NrX3BhZ2U6CisJX2hhc2hfcmVsYnVmKHJlbCwg YnVmKTsKK30KKwogLyoKICAqCWhhc2hlbmRzY2FuKCkgLS0gY2xvc2UgZG93biBhIHNjYW4KICAq LwpAQCAtNDUwLDE3ICs1MTksOCBAQCBoYXNoZW5kc2NhbihJbmRleFNjYW5EZXNjIHNjYW4pCiAJ SGFzaFNjYW5PcGFxdWUgc28gPSAoSGFzaFNjYW5PcGFxdWUpIHNjYW4tPm9wYXF1ZTsKIAlSZWxh dGlvbglyZWwgPSBzY2FuLT5pbmRleFJlbGF0aW9uOwogCi0JaWYgKEhhc2hTY2FuUG9zSXNWYWxp ZChzby0+Y3VyclBvcykpCi0JewotCQkvKiBCZWZvcmUgbGVhdmluZyBjdXJyZW50IHBhZ2UsIGRl YWwgd2l0aCBhbnkga2lsbGVkIGl0ZW1zICovCi0JCWlmIChzby0+bnVtS2lsbGVkID4gMCkKLQkJ CV9oYXNoX2tpbGxfaXRlbXMoc2Nhbik7Ci0JfQotCiAJX2hhc2hfZHJvcHNjYW5idWYocmVsLCBz byk7CiAKLQlpZiAoc28tPmtpbGxlZEl0ZW1zICE9IE5VTEwpCi0JCXBmcmVlKHNvLT5raWxsZWRJ dGVtcyk7CiAJcGZyZWUoc28pOwogCXNjYW4tPm9wYXF1ZSA9IE5VTEw7CiB9CmRpZmYgLS1naXQg YS9zcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNoX3hsb2cuYyBiL3NyYy9iYWNrZW5kL2FjY2Vz cy9oYXNoL2hhc2hfeGxvZy5jCmluZGV4IDIwNjA2MjBjNy4uZTI2ZWU4YmI5IDEwMDY0NAotLS0g YS9zcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNoX3hsb2cuYworKysgYi9zcmMvYmFja2VuZC9h Y2Nlc3MvaGFzaC9oYXNoX3hsb2cuYwpAQCAtMTE0MSwxNCArMTE0MSwxNCBAQCBoYXNoX21hc2so Y2hhciAqcGFnZWRhdGEsIEJsb2NrTnVtYmVyIGJsa25vKQogCQkvKgogCQkgKiBJbiBoYXNoIGJ1 Y2tldCBhbmQgb3ZlcmZsb3cgcGFnZXMsIGl0IGlzIHBvc3NpYmxlIHRvIG1vZGlmeSB0aGUKIAkJ ICogTFBfRkxBR1Mgd2l0aG91dCBlbWl0dGluZyBhbnkgV0FMIHJlY29yZC4gSGVuY2UsIG1hc2sg dGhlIGxpbmUKLQkJICogcG9pbnRlciBmbGFncy4gU2VlIGhhc2hnZXR0dXBsZSgpLCBfaGFzaF9r aWxsX2l0ZW1zKCkgZm9yIGRldGFpbHMuCisJCSAqIHBvaW50ZXIgZmxhZ3MuIFNlZSBoYXNoa2ls bGl0ZW1zYmF0Y2goKSBmb3IgZGV0YWlscy4KIAkJICovCiAJCW1hc2tfbHBfZmxhZ3MocGFnZSk7 CiAJfQogCiAJLyoKIAkgKiBJdCBpcyBwb3NzaWJsZSB0aGF0IHRoZSBoaW50IGJpdCBMSF9QQUdF X0hBU19ERUFEX1RVUExFUyBtYXkgcmVtYWluCi0JICogdW5sb2dnZWQuIFNvLCBtYXNrIGl0LiBT ZWUgX2hhc2hfa2lsbF9pdGVtcygpIGZvciBkZXRhaWxzLgorCSAqIHVubG9nZ2VkLiBTbywgbWFz ayBpdC4gU2VlIGhhc2hraWxsaXRlbXNiYXRjaCgpIGZvciBkZXRhaWxzLgogCSAqLwogCW9wYXF1 ZS0+aGFzaG9fZmxhZyAmPSB+TEhfUEFHRV9IQVNfREVBRF9UVVBMRVM7CiB9CmRpZmYgLS1naXQg YS9zcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNocGFnZS5jIGIvc3JjL2JhY2tlbmQvYWNjZXNz L2hhc2gvaGFzaHBhZ2UuYwppbmRleCA4MDk5YjBkMDIuLjExZTNkYjQ3MiAxMDA2NDQKLS0tIGEv c3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFzaHBhZ2UuYworKysgYi9zcmMvYmFja2VuZC9hY2Nl c3MvaGFzaC9oYXNocGFnZS5jCkBAIC0yODAsMzEgKzI4MCwyNCBAQCBfaGFzaF9kcm9wYnVmKFJl bGF0aW9uIHJlbCwgQnVmZmVyIGJ1ZikKIH0KIAogLyoKLSAqCV9oYXNoX2Ryb3BzY2FuYnVmKCkg LS0gcmVsZWFzZSBidWZmZXJzIHVzZWQgaW4gc2Nhbi4KKyAqCV9oYXNoX2Ryb3BzY2FuYnVmKCkg LS0gcmVsZWFzZSBidWZmZXJzIG93bmVkIGJ5IHNjYW4uCiAgKgotICogVGhpcyByb3V0aW5lIHVu cGlucyB0aGUgYnVmZmVycyB1c2VkIGR1cmluZyBzY2FuIG9uIHdoaWNoIHdlCi0gKiBob2xkIG5v IGxvY2suCisgKiBUaGlzIHJvdXRpbmUgdW5waW5zIHRoZSBidWZmZXJzIGZvciB0aGUgcHJpbWFy eSBidWNrZXQgcGFnZSBhbmQgZm9yIHRoZQorICogYnVja2V0IHBhZ2Ugb2YgYSBidWNrZXQgYmVp bmcgc3BsaXQgYXMgbmVlZGVkLgogICovCiB2b2lkCiBfaGFzaF9kcm9wc2NhbmJ1ZihSZWxhdGlv biByZWwsIEhhc2hTY2FuT3BhcXVlIHNvKQogewotCS8qIHJlbGVhc2UgcGluIHdlIGhvbGQgb24g cHJpbWFyeSBidWNrZXQgcGFnZSAqLwotCWlmIChCdWZmZXJJc1ZhbGlkKHNvLT5oYXNoc29fYnVj a2V0X2J1ZikgJiYKLQkJc28tPmhhc2hzb19idWNrZXRfYnVmICE9IHNvLT5jdXJyUG9zLmJ1ZikK KwkvKiByZWxlYXNlIHBpbiBoZWxkIG9uIHByaW1hcnkgYnVja2V0IHBhZ2UgKi8KKwlpZiAoQnVm ZmVySXNWYWxpZChzby0+aGFzaHNvX2J1Y2tldF9idWYpKQogCQlfaGFzaF9kcm9wYnVmKHJlbCwg c28tPmhhc2hzb19idWNrZXRfYnVmKTsKIAlzby0+aGFzaHNvX2J1Y2tldF9idWYgPSBJbnZhbGlk QnVmZmVyOwogCi0JLyogcmVsZWFzZSBwaW4gd2UgaG9sZCBvbiBwcmltYXJ5IGJ1Y2tldCBwYWdl ICBvZiBidWNrZXQgYmVpbmcgc3BsaXQgKi8KLQlpZiAoQnVmZmVySXNWYWxpZChzby0+aGFzaHNv X3NwbGl0X2J1Y2tldF9idWYpICYmCi0JCXNvLT5oYXNoc29fc3BsaXRfYnVja2V0X2J1ZiAhPSBz by0+Y3VyclBvcy5idWYpCisJLyogcmVsZWFzZSBwaW4gaGVsZCBvbiBwcmltYXJ5IGJ1Y2tldCBw YWdlIG9mIGJ1Y2tldCBiZWluZyBzcGxpdCAqLworCWlmIChCdWZmZXJJc1ZhbGlkKHNvLT5oYXNo c29fc3BsaXRfYnVja2V0X2J1ZikpCiAJCV9oYXNoX2Ryb3BidWYocmVsLCBzby0+aGFzaHNvX3Nw bGl0X2J1Y2tldF9idWYpOwogCXNvLT5oYXNoc29fc3BsaXRfYnVja2V0X2J1ZiA9IEludmFsaWRC dWZmZXI7CiAKLQkvKiByZWxlYXNlIGFueSBwaW4gd2Ugc3RpbGwgaG9sZCAqLwotCWlmIChCdWZm ZXJJc1ZhbGlkKHNvLT5jdXJyUG9zLmJ1ZikpCi0JCV9oYXNoX2Ryb3BidWYocmVsLCBzby0+Y3Vy clBvcy5idWYpOwotCXNvLT5jdXJyUG9zLmJ1ZiA9IEludmFsaWRCdWZmZXI7Ci0KIAkvKiByZXNl dCBzcGxpdCBzY2FuICovCiAJc28tPmhhc2hzb19idWNfcG9wdWxhdGVkID0gZmFsc2U7CiAJc28t Pmhhc2hzb19idWNfc3BsaXQgPSBmYWxzZTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vz cy9oYXNoL2hhc2hzZWFyY2guYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2hzZWFyY2gu YwppbmRleCA4OWQxYzViYzYuLmE2ODEyYzZhMiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNj ZXNzL2hhc2gvaGFzaHNlYXJjaC5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2hz ZWFyY2guYwpAQCAtMjIsMTA1ICsyMiw5NCBAQAogI2luY2x1ZGUgInN0b3JhZ2UvcHJlZGljYXRl LmgiCiAjaW5jbHVkZSAidXRpbHMvcmVsLmgiCiAKLXN0YXRpYyBib29sIF9oYXNoX3JlYWRwYWdl KEluZGV4U2NhbkRlc2Mgc2NhbiwgQnVmZmVyICpidWZQLAotCQkJCQkJICAgU2NhbkRpcmVjdGlv biBkaXIpOworc3RhdGljIGJvb2wgX2hhc2hfcmVhZHBhZ2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBC dWZmZXIgYnVmLCBTY2FuRGlyZWN0aW9uIGRpciwKKwkJCQkJCSAgIEluZGV4U2NhbkJhdGNoIGJh dGNoKTsKIHN0YXRpYyBpbnQJX2hhc2hfbG9hZF9xdWFsaWZpZWRfaXRlbXMoSW5kZXhTY2FuRGVz YyBzY2FuLCBQYWdlIHBhZ2UsCi0JCQkJCQkJCQkgICBPZmZzZXROdW1iZXIgb2ZmbnVtLCBTY2Fu RGlyZWN0aW9uIGRpcik7Ci1zdGF0aWMgaW5saW5lIHZvaWQgX2hhc2hfc2F2ZWl0ZW0oSGFzaFNj YW5PcGFxdWUgc28sIGludCBpdGVtSW5kZXgsCisJCQkJCQkJCQkgICBPZmZzZXROdW1iZXIgb2Zm bnVtLCBTY2FuRGlyZWN0aW9uIGRpciwKKwkJCQkJCQkJCSAgIEluZGV4U2NhbkJhdGNoIGJhdGNo KTsKK3N0YXRpYyBpbmxpbmUgdm9pZCBfaGFzaF9zYXZlaXRlbShJbmRleFNjYW5CYXRjaCBiYXRj aCwgaW50IGl0ZW1JbmRleCwKIAkJCQkJCQkJICBPZmZzZXROdW1iZXIgb2ZmbnVtLCBJbmRleFR1 cGxlIGl0dXApOwogc3RhdGljIHZvaWQgX2hhc2hfcmVhZG5leHQoSW5kZXhTY2FuRGVzYyBzY2Fu LCBCdWZmZXIgKmJ1ZnAsCiAJCQkJCQkgICBQYWdlICpwYWdlcCwgSGFzaFBhZ2VPcGFxdWUgKm9w YXF1ZXApOwogCiAvKgotICoJX2hhc2hfbmV4dCgpIC0tIEdldCB0aGUgbmV4dCBpdGVtIGluIGEg c2Nhbi4KKyAqCV9oYXNoX25leHQoKSAtLSBHZXQgdGhlIG5leHQgYmF0Y2ggb2YgaXRlbXMgaW4g YSBzY2FuLgogICoKLSAqCQlPbiBlbnRyeSwgc28tPmN1cnJQb3MgZGVzY3JpYmVzIHRoZSBjdXJy ZW50IHBhZ2UsIHdoaWNoIG1heQotICoJCWJlIHBpbm5lZCBidXQgbm90IGxvY2tlZCwgYW5kIHNv LT5jdXJyUG9zLml0ZW1JbmRleCBpZGVudGlmaWVzCi0gKgkJd2hpY2ggaXRlbSB3YXMgcHJldmlv dXNseSByZXR1cm5lZC4KKyAqCQlPbiBlbnRyeSwgcHJpb3JiYXRjaCBkZXNjcmliZXMgdGhlIGN1 cnJlbnQgcGFnZSBiYXRjaCB3aXRoIGl0ZW1zCisgKgkJYWxyZWFkeSByZXR1cm5lZC4KICAqCi0g KgkJT24gc3VjY2Vzc2Z1bCBleGl0LCBzY2FuLT54c19oZWFwdGlkIGlzIHNldCB0byB0aGUgVElE IG9mIHRoZSBuZXh0Ci0gKgkJaGVhcCB0dXBsZS4gIHNvLT5jdXJyUG9zIGlzIHVwZGF0ZWQgYXMg bmVlZGVkLgorICoJCU9uIHN1Y2Nlc3NmdWwgZXhpdCwgcmV0dXJucyBhIGJhdGNoIGNvbnRhaW5p bmcgbWF0Y2hpbmcgaXRlbXMgZnJvbQorICoJCW5leHQgcGFnZS4gIE90aGVyd2lzZSByZXR1cm5z IE5VTEwsIGluZGljYXRpbmcgdGhhdCB0aGVyZSBhcmUgbm8KKyAqCQlmdXJ0aGVyIG1hdGNoZXMu ICBObyBsb2NrcyBhcmUgZXZlciBoZWxkIHdoZW4gd2UgcmV0dXJuLgogICoKLSAqCQlPbiBmYWls dXJlIGV4aXQgKG5vIG1vcmUgdHVwbGVzKSwgd2UgcmV0dXJuIGZhbHNlIHdpdGggcGluCi0gKgkJ aGVsZCBvbiBidWNrZXQgcGFnZSBidXQgbm8gcGlucyBvciBsb2NrcyBoZWxkIG9uIG92ZXJmbG93 Ci0gKgkJcGFnZS4KKyAqCQlSZXRhaW5zIHBpbnMgYWNjb3JkaW5nIHRvIHRoZSBzYW1lIHJ1bGVz IGFzIF9oYXNoX2ZpcnN0LgogICovCi1ib29sCi1faGFzaF9uZXh0KEluZGV4U2NhbkRlc2Mgc2Nh biwgU2NhbkRpcmVjdGlvbiBkaXIpCitJbmRleFNjYW5CYXRjaAorX2hhc2hfbmV4dChJbmRleFNj YW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyLCBJbmRleFNjYW5CYXRjaCBwcmlvcmJhdGNo KQogewogCVJlbGF0aW9uCXJlbCA9IHNjYW4tPmluZGV4UmVsYXRpb247CiAJSGFzaFNjYW5PcGFx dWUgc28gPSAoSGFzaFNjYW5PcGFxdWUpIHNjYW4tPm9wYXF1ZTsKLQlIYXNoU2NhblBvc0l0ZW0g KmN1cnJJdGVtOworCUhhc2hCYXRjaERhdGEgKmhhc2hwcmlvcmJhdGNoID0gSGFzaEJhdGNoR2V0 RGF0YShzY2FuLCBwcmlvcmJhdGNoKTsKIAlCbG9ja051bWJlciBibGtubzsKIAlCdWZmZXIJCWJ1 ZjsKLQlib29sCQllbmRfb2Zfc2NhbiA9IGZhbHNlOworCUluZGV4U2NhbkJhdGNoIGJhdGNoOwog CiAJLyoKLQkgKiBBZHZhbmNlIHRvIHRoZSBuZXh0IHR1cGxlIG9uIHRoZSBjdXJyZW50IHBhZ2U7 IG9yIGlmIGRvbmUsIHRyeSB0byByZWFkCi0JICogZGF0YSBmcm9tIHRoZSBuZXh0IG9yIHByZXZp b3VzIHBhZ2UgYmFzZWQgb24gdGhlIHNjYW4gZGlyZWN0aW9uLiBCZWZvcmUKLQkgKiBtb3Zpbmcg dG8gdGhlIG5leHQgb3IgcHJldmlvdXMgcGFnZSBtYWtlIHN1cmUgdGhhdCB3ZSBkZWFsIHdpdGgg YWxsIHRoZQotCSAqIGtpbGxlZCBpdGVtcy4KKwkgKiBUaGUgY29yZSBjb2RlIG11c3QgZGVhbCB3 aXRoIGNyb3NzLWJhdGNoIHNjYW4gZGlyZWN0aW9uIGNoYW5nZXMgZm9yIHVzLgorCSAqIEEgYmF0 Y2ggbWFuYWdlbWVudCByb3V0aW5lIHRoYXQgZmxpcHMgcHJpb3JiYXRjaCdzIHNjYW4gZGlyZWN0 aW9uIGlzCisJICogdXNlZCBmb3IgdGhpcy4KKwkgKi8KKwlBc3NlcnQocHJpb3JiYXRjaC0+ZGly ID09IGRpcik7CisKKwkvKgorCSAqIERldGVybWluZSB3aGljaCBwYWdlIHRvIHJlYWQgbmV4dCBi YXNlZCBvbiBzY2FuIGRpcmVjdGlvbiBhbmQgZGV0YWlscworCSAqIHRha2VuIGZyb20gdGhlIHBy aW9yIGJhdGNoCiAJICovCiAJaWYgKFNjYW5EaXJlY3Rpb25Jc0ZvcndhcmQoZGlyKSkKLQl7Ci0J CWlmICgrK3NvLT5jdXJyUG9zLml0ZW1JbmRleCA+IHNvLT5jdXJyUG9zLmxhc3RJdGVtKQotCQl7 Ci0JCQlpZiAoc28tPm51bUtpbGxlZCA+IDApCi0JCQkJX2hhc2hfa2lsbF9pdGVtcyhzY2FuKTsK KwkJYmxrbm8gPSBoYXNocHJpb3JiYXRjaC0+bmV4dFBhZ2U7CisJZWxzZQorCQlibGtubyA9IGhh c2hwcmlvcmJhdGNoLT5wcmV2UGFnZTsKIAotCQkJYmxrbm8gPSBzby0+Y3VyclBvcy5uZXh0UGFn ZTsKLQkJCWlmIChCbG9ja051bWJlcklzVmFsaWQoYmxrbm8pKQotCQkJewotCQkJCWJ1ZiA9IF9o YXNoX2dldGJ1ZihyZWwsIGJsa25vLCBIQVNIX1JFQUQsIExIX09WRVJGTE9XX1BBR0UpOwotCQkJ CWlmICghX2hhc2hfcmVhZHBhZ2Uoc2NhbiwgJmJ1ZiwgZGlyKSkKLQkJCQkJZW5kX29mX3NjYW4g PSB0cnVlOwotCQkJfQotCQkJZWxzZQotCQkJCWVuZF9vZl9zY2FuID0gdHJ1ZTsKLQkJfQotCX0K KwkvKgorCSAqIEZvciBiaXRtYXAgc2NhbiBjYWxsZXJzLCByZWxlYXNlIHRoZSBwcmlvciBiYXRj aCBub3cgc28gdGhhdCB0aGUKKwkgKiBhbGxvY2F0aW9uIGJlbG93IGNhbiByZXVzZSBpdHMgbWVt b3J5LiAgVGhhdCB3YXkgYml0bWFwIHNjYW5zIG5ldmVyCisJICogbmVlZCBtb3JlIHRoYW4gb25l IGJhdGNoIGFsbG9jYXRpb24uCisJICovCisJaWYgKCFzY2FuLT51c2ViYXRjaHJpbmcpCisJCWlu ZGV4YW1fdXRpbF9iYXRjaF9yZWxlYXNlKHNjYW4sIHByaW9yYmF0Y2gpOworCisJaWYgKCFCbG9j a051bWJlcklzVmFsaWQoYmxrbm8pKQorCQlyZXR1cm4gTlVMTDsKKworCS8qIEFsbG9jYXRlIHNw YWNlIGZvciBuZXh0IGJhdGNoICovCisJYmF0Y2ggPSBpbmRleGFtX3V0aWxfYmF0Y2hfYWxsb2Mo c2Nhbik7CisKKwkvKiBHZXQgdGhlIGJ1ZmZlciBmb3IgbmV4dCBiYXRjaCAqLworCWlmIChTY2Fu RGlyZWN0aW9uSXNGb3J3YXJkKGRpcikpCisJCWJ1ZiA9IF9oYXNoX2dldGJ1ZihyZWwsIGJsa25v LCBIQVNIX1JFQUQsIExIX09WRVJGTE9XX1BBR0UpOwogCWVsc2UKIAl7Ci0JCWlmICgtLXNvLT5j dXJyUG9zLml0ZW1JbmRleCA8IHNvLT5jdXJyUG9zLmZpcnN0SXRlbSkKLQkJewotCQkJaWYgKHNv LT5udW1LaWxsZWQgPiAwKQotCQkJCV9oYXNoX2tpbGxfaXRlbXMoc2Nhbik7CisJCWJ1ZiA9IF9o YXNoX2dldGJ1ZihyZWwsIGJsa25vLCBIQVNIX1JFQUQsCisJCQkJCQkgICBMSF9CVUNLRVRfUEFH RSB8IExIX09WRVJGTE9XX1BBR0UpOwogCi0JCQlibGtubyA9IHNvLT5jdXJyUG9zLnByZXZQYWdl OwotCQkJaWYgKEJsb2NrTnVtYmVySXNWYWxpZChibGtubykpCi0JCQl7Ci0JCQkJYnVmID0gX2hh c2hfZ2V0YnVmKHJlbCwgYmxrbm8sIEhBU0hfUkVBRCwKLQkJCQkJCQkJICAgTEhfQlVDS0VUX1BB R0UgfCBMSF9PVkVSRkxPV19QQUdFKTsKLQotCQkJCS8qCi0JCQkJICogV2UgYWx3YXlzIG1haW50 YWluIHRoZSBwaW4gb24gYnVja2V0IHBhZ2UgZm9yIHdob2xlIHNjYW4KLQkJCQkgKiBvcGVyYXRp b24sIHNvIHJlbGVhc2luZyB0aGUgYWRkaXRpb25hbCBwaW4gd2UgaGF2ZSBhY3F1aXJlZAotCQkJ CSAqIGhlcmUuCi0JCQkJICovCi0JCQkJaWYgKGJ1ZiA9PSBzby0+aGFzaHNvX2J1Y2tldF9idWYg fHwKLQkJCQkJYnVmID09IHNvLT5oYXNoc29fc3BsaXRfYnVja2V0X2J1ZikKLQkJCQkJX2hhc2hf ZHJvcGJ1ZihyZWwsIGJ1Zik7Ci0KLQkJCQlpZiAoIV9oYXNoX3JlYWRwYWdlKHNjYW4sICZidWYs IGRpcikpCi0JCQkJCWVuZF9vZl9zY2FuID0gdHJ1ZTsKLQkJCX0KLQkJCWVsc2UKLQkJCQllbmRf b2Zfc2NhbiA9IHRydWU7Ci0JCX0KKwkJLyoKKwkJICogV2UgYWx3YXlzIG1haW50YWluIHRoZSBw aW4gb24gYnVja2V0IHBhZ2UgZm9yIHdob2xlIHNjYW4gb3BlcmF0aW9uLAorCQkgKiBzbyByZWxl YXNpbmcgdGhlIGFkZGl0aW9uYWwgcGluIHdlIGhhdmUgYWNxdWlyZWQgaGVyZS4KKwkJICovCisJ CWlmIChidWYgPT0gc28tPmhhc2hzb19idWNrZXRfYnVmIHx8CisJCQlidWYgPT0gc28tPmhhc2hz b19zcGxpdF9idWNrZXRfYnVmKQorCQkJX2hhc2hfZHJvcGJ1ZihyZWwsIGJ1Zik7CiAJfQogCi0J aWYgKGVuZF9vZl9zY2FuKQorCS8qIFJlYWQgdGhlIG5leHQgcGFnZSBhbmQgbG9hZCBpdGVtcyBp bnRvIGFsbG9jYXRlZCBiYXRjaCAqLworCWlmICghX2hhc2hfcmVhZHBhZ2Uoc2NhbiwgYnVmLCBk aXIsIGJhdGNoKSkKIAl7Ci0JCV9oYXNoX2Ryb3BzY2FuYnVmKHJlbCwgc28pOwotCQlIYXNoU2Nh blBvc0ludmFsaWRhdGUoc28tPmN1cnJQb3MpOwotCQlyZXR1cm4gZmFsc2U7CisJCWluZGV4YW1f dXRpbF9iYXRjaF9yZWxlYXNlKHNjYW4sIGJhdGNoKTsKKwkJcmV0dXJuIE5VTEw7CiAJfQogCi0J LyogT0ssIGl0ZW1JbmRleCBzYXlzIHdoYXQgdG8gcmV0dXJuICovCi0JY3Vyckl0ZW0gPSAmc28t PmN1cnJQb3MuaXRlbXNbc28tPmN1cnJQb3MuaXRlbUluZGV4XTsKLQlzY2FuLT54c19oZWFwdGlk ID0gY3Vyckl0ZW0tPmhlYXBUaWQ7Ci0KLQlyZXR1cm4gdHJ1ZTsKKwkvKiBSZXR1cm4gdGhlIGJh dGNoIGNvbnRhaW5pbmcgbWF0Y2hlZCBpdGVtcyBmcm9tIG5leHQgcGFnZSAqLworCXJldHVybiBi YXRjaDsKIH0KIAogLyoKQEAgLTI3MCwyMiArMjU5LDIwIEBAIF9oYXNoX3JlYWRwcmV2KEluZGV4 U2NhbkRlc2Mgc2NhbiwKIH0KIAogLyoKLSAqCV9oYXNoX2ZpcnN0KCkgLS0gRmluZCB0aGUgZmly c3QgaXRlbSBpbiBhIHNjYW4uCisgKglfaGFzaF9maXJzdCgpIC0tIEZpbmQgdGhlIGZpcnN0IGJh dGNoIG9mIGl0ZW1zIGluIGEgc2Nhbi4KICAqCi0gKgkJV2UgZmluZCB0aGUgZmlyc3QgaXRlbSAo b3IsIGlmIGJhY2t3YXJkIHNjYW4sIHRoZSBsYXN0IGl0ZW0pIGluIHRoZQotICoJCWluZGV4IHRo YXQgc2F0aXNmaWVzIHRoZSBxdWFsaWZpY2F0aW9uIGFzc29jaWF0ZWQgd2l0aCB0aGUgc2Nhbgot ICoJCWRlc2NyaXB0b3IuCisgKgkJV2UgZmluZCB0aGUgZmlyc3QgYmF0Y2ggb2YgaXRlbXMgKG9y LCBpZiBiYWNrd2FyZCBzY2FuLCB0aGUgbGFzdAorICoJCWJhdGNoKSBpbiB0aGUgaW5kZXggdGhh dCBzYXRpc2ZpZXMgdGhlIHF1YWxpZmljYXRpb24gYXNzb2NpYXRlZCB3aXRoCisgKgkJdGhlIHNj YW4gZGVzY3JpcHRvci4KICAqCi0gKgkJT24gc3VjY2Vzc2Z1bCBleGl0LCBpZiB0aGUgcGFnZSBj b250YWluaW5nIGN1cnJlbnQgaW5kZXggdHVwbGUgaXMgYW4KLSAqCQlvdmVyZmxvdyBwYWdlLCBi b3RoIHBpbiBhbmQgbG9jayBhcmUgcmVsZWFzZWQgd2hlcmVhcyBpZiBpdCBpcyBhIGJ1Y2tldAot ICoJCXBhZ2UgdGhlbiBpdCBpcyBwaW5uZWQgYnV0IG5vdCBsb2NrZWQgYW5kIGRhdGEgYWJvdXQg dGhlIG1hdGNoaW5nCi0gKgkJdHVwbGUocykgb24gdGhlIHBhZ2UgaGFzIGJlZW4gbG9hZGVkIGlu dG8gc28tPmN1cnJQb3MsCi0gKgkJc2Nhbi0+eHNfaGVhcHRpZCBpcyBzZXQgdG8gdGhlIGhlYXAg VElEIG9mIHRoZSBjdXJyZW50IHR1cGxlLgorICoJCU9uIHN1Y2Nlc3NmdWwgZXhpdCwgcmV0dXJu cyBhIGJhdGNoIGNvbnRhaW5pbmcgbWF0Y2hpbmcgaXRlbXMuCisgKgkJT3RoZXJ3aXNlIHJldHVy bnMgTlVMTCwgaW5kaWNhdGluZyB0aGF0IHRoZXJlIGFyZSBubyBmdXJ0aGVyIG1hdGNoZXMuCisg KgkJTm8gbG9ja3MgYXJlIGV2ZXIgaGVsZCB3aGVuIHdlIHJldHVybi4KICAqCi0gKgkJT24gZmFp bHVyZSBleGl0IChubyBtb3JlIHR1cGxlcyksIHdlIHJldHVybiBmYWxzZSwgd2l0aCBwaW4gaGVs ZCBvbgotICoJCWJ1Y2tldCBwYWdlIGJ1dCBubyBwaW5zIG9yIGxvY2tzIGhlbGQgb24gb3ZlcmZs b3cgcGFnZS4KKyAqCQlXZSBhbHdheXMgcmV0YWluIG91ciBvd24gcGluIG9uIHRoZSBidWNrZXQg cGFnZS4gIFdoZW4gd2UgcmV0dXJuIGEKKyAqCQliYXRjaCB3aXRoIGEgYnVja2V0IHBhZ2UsIGl0 IHdpbGwgcmV0YWluIGl0cyBvd24gcmVmZXJlbmNlIHBpbi4KICAqLwotYm9vbAorSW5kZXhTY2Fu QmF0Y2gKIF9oYXNoX2ZpcnN0KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIp CiB7CiAJUmVsYXRpb24JcmVsID0gc2Nhbi0+aW5kZXhSZWxhdGlvbjsKQEAgLTI5Niw3ICsyODMs NyBAQCBfaGFzaF9maXJzdChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyKQog CUJ1ZmZlcgkJYnVmOwogCVBhZ2UJCXBhZ2U7CiAJSGFzaFBhZ2VPcGFxdWUgb3BhcXVlOwotCUhh c2hTY2FuUG9zSXRlbSAqY3Vyckl0ZW07CisJSW5kZXhTY2FuQmF0Y2ggYmF0Y2g7CiAKIAlwZ3N0 YXRfY291bnRfaW5kZXhfc2NhbihyZWwpOwogCWlmIChzY2FuLT5pbnN0cnVtZW50KQpAQCAtMzI2 LDcgKzMxMyw3IEBAIF9oYXNoX2ZpcnN0KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlv biBkaXIpCiAJICogaXRlbXMgaW4gdGhlIGluZGV4LgogCSAqLwogCWlmIChjdXItPnNrX2ZsYWdz ICYgU0tfSVNOVUxMKQotCQlyZXR1cm4gZmFsc2U7CisJCXJldHVybiBOVUxMOwogCiAJLyoKIAkg KiBPa2F5IHRvIGNvbXB1dGUgdGhlIGhhc2gga2V5LiAgV2Ugd2FudCB0byBkbyB0aGlzIGJlZm9y ZSBhY3F1aXJpbmcgYW55CkBAIC00MTksMTkxICs0MDYsMTUyIEBAIF9oYXNoX2ZpcnN0KEluZGV4 U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIpCiAJCQlfaGFzaF9yZWFkbmV4dChzY2Fu LCAmYnVmLCAmcGFnZSwgJm9wYXF1ZSk7CiAJfQogCi0JLyogcmVtZW1iZXIgd2hpY2ggYnVmZmVy IHdlIGhhdmUgcGlubmVkLCBpZiBhbnkgKi8KLQlBc3NlcnQoQnVmZmVySXNJbnZhbGlkKHNvLT5j dXJyUG9zLmJ1ZikpOwotCXNvLT5jdXJyUG9zLmJ1ZiA9IGJ1ZjsKKwkvKiBBbGxvY2F0ZSBzcGFj ZSBmb3IgZmlyc3QgYmF0Y2ggKi8KKwliYXRjaCA9IGluZGV4YW1fdXRpbF9iYXRjaF9hbGxvYyhz Y2FuKTsKIAotCS8qIE5vdyBmaW5kIGFsbCB0aGUgdHVwbGVzIHNhdGlzZnlpbmcgdGhlIHF1YWxp ZmljYXRpb24gZnJvbSBhIHBhZ2UgKi8KLQlpZiAoIV9oYXNoX3JlYWRwYWdlKHNjYW4sICZidWYs IGRpcikpCi0JCXJldHVybiBmYWxzZTsKKwkvKiBSZWFkIHRoZSBmaXJzdCBwYWdlIGFuZCBsb2Fk IGl0ZW1zIGludG8gYWxsb2NhdGVkIGJhdGNoICovCisJaWYgKCFfaGFzaF9yZWFkcGFnZShzY2Fu LCBidWYsIGRpciwgYmF0Y2gpKQorCXsKKwkJaW5kZXhhbV91dGlsX2JhdGNoX3JlbGVhc2Uoc2Nh biwgYmF0Y2gpOworCQlyZXR1cm4gTlVMTDsKKwl9CiAKLQkvKiBPSywgaXRlbUluZGV4IHNheXMg d2hhdCB0byByZXR1cm4gKi8KLQljdXJySXRlbSA9ICZzby0+Y3VyclBvcy5pdGVtc1tzby0+Y3Vy clBvcy5pdGVtSW5kZXhdOwotCXNjYW4tPnhzX2hlYXB0aWQgPSBjdXJySXRlbS0+aGVhcFRpZDsK LQotCS8qIGlmIHdlJ3JlIGhlcmUsIF9oYXNoX3JlYWRwYWdlIGZvdW5kIGEgdmFsaWQgdHVwbGVz ICovCi0JcmV0dXJuIHRydWU7CisJLyogUmV0dXJuIHRoZSBiYXRjaCBjb250YWluaW5nIG1hdGNo ZWQgaXRlbXMgKi8KKwlyZXR1cm4gYmF0Y2g7CiB9CiAKIC8qCi0gKglfaGFzaF9yZWFkcGFnZSgp IC0tIExvYWQgZGF0YSBmcm9tIGN1cnJlbnQgaW5kZXggcGFnZSBpbnRvIHNvLT5jdXJyUG9zCisg KglfaGFzaF9yZWFkcGFnZSgpIC0tIExvYWQgZGF0YSBmcm9tIGN1cnJlbnQgaW5kZXggcGFnZSBp bnRvIGJhdGNoCiAgKgogICoJV2Ugc2NhbiBhbGwgdGhlIGl0ZW1zIGluIHRoZSBjdXJyZW50IGlu ZGV4IHBhZ2UgYW5kIHNhdmUgdGhlbSBpbnRvCi0gKglzby0+Y3VyclBvcyBpZiBpdCBzYXRpc2Zp ZXMgdGhlIHF1YWxpZmljYXRpb24uIElmIG5vIG1hdGNoaW5nIGl0ZW1zCisgKgl0aGUgYmF0Y2gg aWYgdGhleSBzYXRpc2Z5IHRoZSBxdWFsaWZpY2F0aW9uLiBJZiBubyBtYXRjaGluZyBpdGVtcwog ICoJYXJlIGZvdW5kIGluIHRoZSBjdXJyZW50IHBhZ2UsIHdlIG1vdmUgdG8gdGhlIG5leHQgb3Ig cHJldmlvdXMgcGFnZQogICoJaW4gYSBidWNrZXQgY2hhaW4gYXMgaW5kaWNhdGVkIGJ5IHRoZSBk aXJlY3Rpb24uCiAgKgogICoJUmV0dXJuIHRydWUgaWYgYW55IG1hdGNoaW5nIGl0ZW1zIGFyZSBm b3VuZCBlbHNlIHJldHVybiBmYWxzZS4KICAqLwogc3RhdGljIGJvb2wKLV9oYXNoX3JlYWRwYWdl KEluZGV4U2NhbkRlc2Mgc2NhbiwgQnVmZmVyICpidWZQLCBTY2FuRGlyZWN0aW9uIGRpcikKK19o YXNoX3JlYWRwYWdlKEluZGV4U2NhbkRlc2Mgc2NhbiwgQnVmZmVyIGJ1ZiwgU2NhbkRpcmVjdGlv biBkaXIsCisJCQkgICBJbmRleFNjYW5CYXRjaCBiYXRjaCkKIHsKIAlSZWxhdGlvbglyZWwgPSBz Y2FuLT5pbmRleFJlbGF0aW9uOwogCUhhc2hTY2FuT3BhcXVlIHNvID0gKEhhc2hTY2FuT3BhcXVl KSBzY2FuLT5vcGFxdWU7Ci0JQnVmZmVyCQlidWY7CisJSGFzaEJhdGNoRGF0YSAqaGFzaGJhdGNo ID0gSGFzaEJhdGNoR2V0RGF0YShzY2FuLCBiYXRjaCk7CiAJUGFnZQkJcGFnZTsKIAlIYXNoUGFn ZU9wYXF1ZSBvcGFxdWU7CiAJT2Zmc2V0TnVtYmVyIG9mZm51bTsKIAl1aW50MTYJCWl0ZW1JbmRl eDsKIAotCWJ1ZiA9ICpidWZQOwogCUFzc2VydChCdWZmZXJJc1ZhbGlkKGJ1ZikpOwogCV9oYXNo X2NoZWNrcGFnZShyZWwsIGJ1ZiwgTEhfQlVDS0VUX1BBR0UgfCBMSF9PVkVSRkxPV19QQUdFKTsK IAlwYWdlID0gQnVmZmVyR2V0UGFnZShidWYpOwogCW9wYXF1ZSA9IEhhc2hQYWdlR2V0T3BhcXVl KHBhZ2UpOwogCi0Jc28tPmN1cnJQb3MuYnVmID0gYnVmOwotCXNvLT5jdXJyUG9zLmN1cnJQYWdl ID0gQnVmZmVyR2V0QmxvY2tOdW1iZXIoYnVmKTsKKwloYXNoYmF0Y2gtPmJ1ZiA9IGJ1ZjsKKwlo YXNoYmF0Y2gtPmN1cnJQYWdlID0gQnVmZmVyR2V0QmxvY2tOdW1iZXIoYnVmKTsKKwliYXRjaC0+ ZGlyID0gZGlyOwogCiAJaWYgKFNjYW5EaXJlY3Rpb25Jc0ZvcndhcmQoZGlyKSkKIAl7Ci0JCUJs b2NrTnVtYmVyIHByZXZfYmxrbm8gPSBJbnZhbGlkQmxvY2tOdW1iZXI7Ci0KIAkJZm9yICg7OykK IAkJewogCQkJLyogbmV3IHBhZ2UsIGxvY2F0ZSBzdGFydGluZyBwb3NpdGlvbiBieSBiaW5hcnkg c2VhcmNoICovCiAJCQlvZmZudW0gPSBfaGFzaF9iaW5zZWFyY2gocGFnZSwgc28tPmhhc2hzb19z a19oYXNoKTsKIAotCQkJaXRlbUluZGV4ID0gX2hhc2hfbG9hZF9xdWFsaWZpZWRfaXRlbXMoc2Nh biwgcGFnZSwgb2ZmbnVtLCBkaXIpOworCQkJaXRlbUluZGV4ID0gX2hhc2hfbG9hZF9xdWFsaWZp ZWRfaXRlbXMoc2NhbiwgcGFnZSwgb2ZmbnVtLCBkaXIsCisJCQkJCQkJCQkJCQkgICBiYXRjaCk7 CiAKIAkJCWlmIChpdGVtSW5kZXggIT0gMCkKIAkJCQlicmVhazsKIAogCQkJLyoKLQkJCSAqIENv dWxkIG5vdCBmaW5kIGFueSBtYXRjaGluZyB0dXBsZXMgaW4gdGhlIGN1cnJlbnQgcGFnZSwgbW92 ZSB0bwotCQkJICogdGhlIG5leHQgcGFnZS4gQmVmb3JlIGxlYXZpbmcgdGhlIGN1cnJlbnQgcGFn ZSwgZGVhbCB3aXRoIGFueQotCQkJICoga2lsbGVkIGl0ZW1zLgorCQkJICogQ291bGQgbm90IGZp bmQgYW55IG1hdGNoaW5nIHR1cGxlcyBpbiB0aGUgY3VycmVudCBwYWdlLCB0cnkgdG8KKwkJCSAq IG1vdmUgdG8gdGhlIG5leHQgcGFnZQogCQkJICovCi0JCQlpZiAoc28tPm51bUtpbGxlZCA+IDAp Ci0JCQkJX2hhc2hfa2lsbF9pdGVtcyhzY2FuKTsKLQotCQkJLyoKLQkJCSAqIElmIHRoaXMgaXMg YSBwcmltYXJ5IGJ1Y2tldCBwYWdlLCBoYXNob19wcmV2Ymxrbm8gaXMgbm90IGEgcmVhbAotCQkJ ICogYmxvY2sgbnVtYmVyLgotCQkJICovCi0JCQlpZiAoc28tPmN1cnJQb3MuYnVmID09IHNvLT5o YXNoc29fYnVja2V0X2J1ZiB8fAotCQkJCXNvLT5jdXJyUG9zLmJ1ZiA9PSBzby0+aGFzaHNvX3Nw bGl0X2J1Y2tldF9idWYpCi0JCQkJcHJldl9ibGtubyA9IEludmFsaWRCbG9ja051bWJlcjsKLQkJ CWVsc2UKLQkJCQlwcmV2X2Jsa25vID0gb3BhcXVlLT5oYXNob19wcmV2Ymxrbm87Ci0KIAkJCV9o YXNoX3JlYWRuZXh0KHNjYW4sICZidWYsICZwYWdlLCAmb3BhcXVlKTsKLQkJCWlmIChCdWZmZXJJ c1ZhbGlkKGJ1ZikpCi0JCQl7Ci0JCQkJc28tPmN1cnJQb3MuYnVmID0gYnVmOwotCQkJCXNvLT5j dXJyUG9zLmN1cnJQYWdlID0gQnVmZmVyR2V0QmxvY2tOdW1iZXIoYnVmKTsKLQkJCX0KLQkJCWVs c2UKLQkJCXsKLQkJCQkvKgotCQkJCSAqIFJlbWVtYmVyIG5leHQgYW5kIHByZXZpb3VzIGJsb2Nr IG51bWJlcnMgZm9yIHNjcm9sbGFibGUKLQkJCQkgKiBjdXJzb3JzIHRvIGtub3cgdGhlIHN0YXJ0 IHBvc2l0aW9uIGFuZCByZXR1cm4gZmFsc2UKLQkJCQkgKiBpbmRpY2F0aW5nIHRoYXQgbm8gbW9y ZSBtYXRjaGluZyB0dXBsZXMgd2VyZSBmb3VuZC4gQWxzbywKLQkJCQkgKiBkb24ndCByZXNldCBj dXJyUGFnZSBvciBsc24sIGJlY2F1c2Ugd2UgZXhwZWN0Ci0JCQkJICogX2hhc2hfa2lsbF9pdGVt cyB0byBiZSBjYWxsZWQgZm9yIHRoZSBvbGQgcGFnZSBhZnRlciB0aGlzCi0JCQkJICogZnVuY3Rp b24gcmV0dXJucy4KLQkJCQkgKi8KLQkJCQlzby0+Y3VyclBvcy5wcmV2UGFnZSA9IHByZXZfYmxr bm87Ci0JCQkJc28tPmN1cnJQb3MubmV4dFBhZ2UgPSBJbnZhbGlkQmxvY2tOdW1iZXI7Ci0JCQkJ c28tPmN1cnJQb3MuYnVmID0gYnVmOworCQkJaWYgKCFCdWZmZXJJc1ZhbGlkKGJ1ZikpCiAJCQkJ cmV0dXJuIGZhbHNlOwotCQkJfQorCisJCQloYXNoYmF0Y2gtPmJ1ZiA9IGJ1ZjsKKwkJCWhhc2hi YXRjaC0+Y3VyclBhZ2UgPSBCdWZmZXJHZXRCbG9ja051bWJlcihidWYpOwogCQl9CiAKLQkJc28t PmN1cnJQb3MuZmlyc3RJdGVtID0gMDsKLQkJc28tPmN1cnJQb3MubGFzdEl0ZW0gPSBpdGVtSW5k ZXggLSAxOwotCQlzby0+Y3VyclBvcy5pdGVtSW5kZXggPSAwOworCQliYXRjaC0+Zmlyc3RJdGVt ID0gMDsKKwkJYmF0Y2gtPmxhc3RJdGVtID0gaXRlbUluZGV4IC0gMTsKIAl9CiAJZWxzZQogCXsK LQkJQmxvY2tOdW1iZXIgbmV4dF9ibGtubyA9IEludmFsaWRCbG9ja051bWJlcjsKLQogCQlmb3Ig KDs7KQogCQl7CiAJCQkvKiBuZXcgcGFnZSwgbG9jYXRlIHN0YXJ0aW5nIHBvc2l0aW9uIGJ5IGJp bmFyeSBzZWFyY2ggKi8KIAkJCW9mZm51bSA9IF9oYXNoX2JpbnNlYXJjaF9sYXN0KHBhZ2UsIHNv LT5oYXNoc29fc2tfaGFzaCk7CiAKLQkJCWl0ZW1JbmRleCA9IF9oYXNoX2xvYWRfcXVhbGlmaWVk X2l0ZW1zKHNjYW4sIHBhZ2UsIG9mZm51bSwgZGlyKTsKKwkJCWl0ZW1JbmRleCA9IF9oYXNoX2xv YWRfcXVhbGlmaWVkX2l0ZW1zKHNjYW4sIHBhZ2UsIG9mZm51bSwgZGlyLAorCQkJCQkJCQkJCQkJ ICAgYmF0Y2gpOwogCiAJCQlpZiAoaXRlbUluZGV4ICE9IE1heEluZGV4VHVwbGVzUGVyUGFnZSkK IAkJCQlicmVhazsKIAogCQkJLyoKLQkJCSAqIENvdWxkIG5vdCBmaW5kIGFueSBtYXRjaGluZyB0 dXBsZXMgaW4gdGhlIGN1cnJlbnQgcGFnZSwgbW92ZSB0bwotCQkJICogdGhlIHByZXZpb3VzIHBh Z2UuIEJlZm9yZSBsZWF2aW5nIHRoZSBjdXJyZW50IHBhZ2UsIGRlYWwgd2l0aAotCQkJICogYW55 IGtpbGxlZCBpdGVtcy4KKwkJCSAqIENvdWxkIG5vdCBmaW5kIGFueSBtYXRjaGluZyB0dXBsZXMg aW4gdGhlIGN1cnJlbnQgcGFnZSwgdHJ5IHRvCisJCQkgKiBtb3ZlIHRvIHRoZSBwcmV2aW91cyBw YWdlCiAJCQkgKi8KLQkJCWlmIChzby0+bnVtS2lsbGVkID4gMCkKLQkJCQlfaGFzaF9raWxsX2l0 ZW1zKHNjYW4pOwotCi0JCQlpZiAoc28tPmN1cnJQb3MuYnVmID09IHNvLT5oYXNoc29fYnVja2V0 X2J1ZiB8fAotCQkJCXNvLT5jdXJyUG9zLmJ1ZiA9PSBzby0+aGFzaHNvX3NwbGl0X2J1Y2tldF9i dWYpCi0JCQkJbmV4dF9ibGtubyA9IG9wYXF1ZS0+aGFzaG9fbmV4dGJsa25vOwotCiAJCQlfaGFz aF9yZWFkcHJldihzY2FuLCAmYnVmLCAmcGFnZSwgJm9wYXF1ZSk7Ci0JCQlpZiAoQnVmZmVySXNW YWxpZChidWYpKQotCQkJewotCQkJCXNvLT5jdXJyUG9zLmJ1ZiA9IGJ1ZjsKLQkJCQlzby0+Y3Vy clBvcy5jdXJyUGFnZSA9IEJ1ZmZlckdldEJsb2NrTnVtYmVyKGJ1Zik7Ci0JCQl9Ci0JCQllbHNl Ci0JCQl7Ci0JCQkJLyoKLQkJCQkgKiBSZW1lbWJlciBuZXh0IGFuZCBwcmV2aW91cyBibG9jayBu dW1iZXJzIGZvciBzY3JvbGxhYmxlCi0JCQkJICogY3Vyc29ycyB0byBrbm93IHRoZSBzdGFydCBw b3NpdGlvbiBhbmQgcmV0dXJuIGZhbHNlCi0JCQkJICogaW5kaWNhdGluZyB0aGF0IG5vIG1vcmUg bWF0Y2hpbmcgdHVwbGVzIHdlcmUgZm91bmQuIEFsc28sCi0JCQkJICogZG9uJ3QgcmVzZXQgY3Vy clBhZ2Ugb3IgbHNuLCBiZWNhdXNlIHdlIGV4cGVjdAotCQkJCSAqIF9oYXNoX2tpbGxfaXRlbXMg dG8gYmUgY2FsbGVkIGZvciB0aGUgb2xkIHBhZ2UgYWZ0ZXIgdGhpcwotCQkJCSAqIGZ1bmN0aW9u IHJldHVybnMuCi0JCQkJICovCi0JCQkJc28tPmN1cnJQb3MucHJldlBhZ2UgPSBJbnZhbGlkQmxv Y2tOdW1iZXI7Ci0JCQkJc28tPmN1cnJQb3MubmV4dFBhZ2UgPSBuZXh0X2Jsa25vOwotCQkJCXNv LT5jdXJyUG9zLmJ1ZiA9IGJ1ZjsKKwkJCWlmICghQnVmZmVySXNWYWxpZChidWYpKQogCQkJCXJl dHVybiBmYWxzZTsKLQkJCX0KKworCQkJaGFzaGJhdGNoLT5idWYgPSBidWY7CisJCQloYXNoYmF0 Y2gtPmN1cnJQYWdlID0gQnVmZmVyR2V0QmxvY2tOdW1iZXIoYnVmKTsKIAkJfQogCi0JCXNvLT5j dXJyUG9zLmZpcnN0SXRlbSA9IGl0ZW1JbmRleDsKLQkJc28tPmN1cnJQb3MubGFzdEl0ZW0gPSBN YXhJbmRleFR1cGxlc1BlclBhZ2UgLSAxOwotCQlzby0+Y3VyclBvcy5pdGVtSW5kZXggPSBNYXhJ bmRleFR1cGxlc1BlclBhZ2UgLSAxOworCQliYXRjaC0+Zmlyc3RJdGVtID0gaXRlbUluZGV4Owor CQliYXRjaC0+bGFzdEl0ZW0gPSBNYXhJbmRleFR1cGxlc1BlclBhZ2UgLSAxOwogCX0KIAotCWlm IChzby0+Y3VyclBvcy5idWYgPT0gc28tPmhhc2hzb19idWNrZXRfYnVmIHx8Ci0JCXNvLT5jdXJy UG9zLmJ1ZiA9PSBzby0+aGFzaHNvX3NwbGl0X2J1Y2tldF9idWYpCisJLyoKKwkgKiBTYXZlZCBh dCBsZWFzdCBvbmUgbWF0Y2ggaW4gYmF0Y2guaXRlbXNbXS4gIFByZXBhcmUgZm9yIGhhc2hnZXRi YXRjaCB0bworCSAqIHJldHVybiBpdCBieSBpbml0aWFsaXppbmcgcmVtYWluaW5nIHVuaW5pdGlh bGl6ZWQgZmllbGRzLgorCSAqLworCWlmIChoYXNoYmF0Y2gtPmJ1ZiA9PSBzby0+aGFzaHNvX2J1 Y2tldF9idWYgfHwKKwkJaGFzaGJhdGNoLT5idWYgPT0gc28tPmhhc2hzb19zcGxpdF9idWNrZXRf YnVmKQogCXsKLQkJc28tPmN1cnJQb3MucHJldlBhZ2UgPSBJbnZhbGlkQmxvY2tOdW1iZXI7Ci0J CXNvLT5jdXJyUG9zLm5leHRQYWdlID0gb3BhcXVlLT5oYXNob19uZXh0Ymxrbm87Ci0JCUxvY2tC dWZmZXIoc28tPmN1cnJQb3MuYnVmLCBCVUZGRVJfTE9DS19VTkxPQ0spOworCQkvKgorCQkgKiBC YXRjaCdzIGJ1ZmZlciBpcyBlaXRoZXIgdGhlIHByaW1hcnkgYnVja2V0LCBvciBhIGJ1Y2tldCBi ZWluZworCQkgKiBwb3B1bGF0ZWQgZHVlIHRvIGEgc3BsaXQuCisJCSAqCisJCSAqIEluY3JlbWVu dCBsb2NhbCByZWZlcmVuY2UgY291bnQgc28gdGhhdCBiYXRjaCBnZXRzIGFuIGluZGVwZW5kZW50 CisJCSAqIGJ1ZmZlciByZWZlcmVuY2UgdGhhdCBjYW4gYmUgcmVsZWFzZWQgKGJ5IHRoZSBjb3Jl IGNvZGUvdGFibGUgQU0pCisJCSAqIGJlZm9yZSB0aGUgaGFzaHNvX2J1Y2tldF9idWYvaGFzaHNv X3NwbGl0X2J1Y2tldF9idWYgcmVmZXJlbmNlcyBhcmUKKwkJICogcmVsZWFzZWQuCisJCSAqLwor CQlJbmNyQnVmZmVyUmVmQ291bnQoaGFzaGJhdGNoLT5idWYpOworCisJCS8qIENhbiBvbmx5IHVz ZSBvcGFxdWUtPmhhc2hvX25leHRibGtubyAqLworCQloYXNoYmF0Y2gtPnByZXZQYWdlID0gSW52 YWxpZEJsb2NrTnVtYmVyOworCQloYXNoYmF0Y2gtPm5leHRQYWdlID0gb3BhcXVlLT5oYXNob19u ZXh0Ymxrbm87CiAJfQogCWVsc2UKIAl7Ci0JCXNvLT5jdXJyUG9zLnByZXZQYWdlID0gb3BhcXVl LT5oYXNob19wcmV2Ymxrbm87Ci0JCXNvLT5jdXJyUG9zLm5leHRQYWdlID0gb3BhcXVlLT5oYXNo b19uZXh0Ymxrbm87Ci0JCV9oYXNoX3JlbGJ1ZihyZWwsIHNvLT5jdXJyUG9zLmJ1Zik7Ci0JCXNv LT5jdXJyUG9zLmJ1ZiA9IEludmFsaWRCdWZmZXI7CisJCS8qIENhbiB1c2Ugb3BhcXVlLT5oYXNo b19wcmV2Ymxrbm8gYW5kIG9wYXF1ZS0+aGFzaG9fbmV4dGJsa25vICovCisJCWhhc2hiYXRjaC0+ cHJldlBhZ2UgPSBvcGFxdWUtPmhhc2hvX3ByZXZibGtubzsKKwkJaGFzaGJhdGNoLT5uZXh0UGFn ZSA9IG9wYXF1ZS0+aGFzaG9fbmV4dGJsa25vOwogCX0KIAotCUFzc2VydChzby0+Y3VyclBvcy5m aXJzdEl0ZW0gPD0gc28tPmN1cnJQb3MubGFzdEl0ZW0pOworCS8qIHdlIHNhdmVkIG9uZSBvciBt b3JlIG1hdGNoZXMgaW4gYmF0Y2guaXRlbXNbXSAqLworCWluZGV4YW1fdXRpbF9iYXRjaF91bmxv Y2soc2NhbiwgYmF0Y2gsIGhhc2hiYXRjaC0+YnVmKTsKKworCUFzc2VydChiYXRjaC0+Zmlyc3RJ dGVtIDw9IGJhdGNoLT5sYXN0SXRlbSk7CiAJcmV0dXJuIHRydWU7CiB9CiAKIC8qCiAgKiBMb2Fk IGFsbCB0aGUgcXVhbGlmaWVkIGl0ZW1zIGZyb20gYSBjdXJyZW50IGluZGV4IHBhZ2UKLSAqIGlu dG8gc28tPmN1cnJQb3MuIEhlbHBlciBmdW5jdGlvbiBmb3IgX2hhc2hfcmVhZHBhZ2UuCisgKiBp bnRvIGJhdGNoLiBIZWxwZXIgZnVuY3Rpb24gZm9yIF9oYXNoX3JlYWRwYWdlLgogICovCiBzdGF0 aWMgaW50CiBfaGFzaF9sb2FkX3F1YWxpZmllZF9pdGVtcyhJbmRleFNjYW5EZXNjIHNjYW4sIFBh Z2UgcGFnZSwKLQkJCQkJCSAgIE9mZnNldE51bWJlciBvZmZudW0sIFNjYW5EaXJlY3Rpb24gZGly KQorCQkJCQkJICAgT2Zmc2V0TnVtYmVyIG9mZm51bSwgU2NhbkRpcmVjdGlvbiBkaXIsCisJCQkJ CQkgICBJbmRleFNjYW5CYXRjaCBiYXRjaCkKIHsKIAlIYXNoU2Nhbk9wYXF1ZSBzbyA9IChIYXNo U2Nhbk9wYXF1ZSkgc2Nhbi0+b3BhcXVlOwogCUluZGV4VHVwbGUJaXR1cDsKQEAgLTY0MCw3ICs1 ODgsNyBAQCBfaGFzaF9sb2FkX3F1YWxpZmllZF9pdGVtcyhJbmRleFNjYW5EZXNjIHNjYW4sIFBh Z2UgcGFnZSwKIAkJCQlfaGFzaF9jaGVja3F1YWwoc2NhbiwgaXR1cCkpCiAJCQl7CiAJCQkJLyog dHVwbGUgaXMgcXVhbGlmaWVkLCBzbyByZW1lbWJlciBpdCAqLwotCQkJCV9oYXNoX3NhdmVpdGVt KHNvLCBpdGVtSW5kZXgsIG9mZm51bSwgaXR1cCk7CisJCQkJX2hhc2hfc2F2ZWl0ZW0oYmF0Y2gs IGl0ZW1JbmRleCwgb2ZmbnVtLCBpdHVwKTsKIAkJCQlpdGVtSW5kZXgrKzsKIAkJCX0KIAkJCWVs c2UKQEAgLTY4Nyw3ICs2MzUsNyBAQCBfaGFzaF9sb2FkX3F1YWxpZmllZF9pdGVtcyhJbmRleFNj YW5EZXNjIHNjYW4sIFBhZ2UgcGFnZSwKIAkJCXsKIAkJCQlpdGVtSW5kZXgtLTsKIAkJCQkvKiB0 dXBsZSBpcyBxdWFsaWZpZWQsIHNvIHJlbWVtYmVyIGl0ICovCi0JCQkJX2hhc2hfc2F2ZWl0ZW0o c28sIGl0ZW1JbmRleCwgb2ZmbnVtLCBpdHVwKTsKKwkJCQlfaGFzaF9zYXZlaXRlbShiYXRjaCwg aXRlbUluZGV4LCBvZmZudW0sIGl0dXApOwogCQkJfQogCQkJZWxzZQogCQkJewpAQCAtNzA2LDEz ICs2NTQsMTQgQEAgX2hhc2hfbG9hZF9xdWFsaWZpZWRfaXRlbXMoSW5kZXhTY2FuRGVzYyBzY2Fu LCBQYWdlIHBhZ2UsCiAJfQogfQogCi0vKiBTYXZlIGFuIGluZGV4IGl0ZW0gaW50byBzby0+Y3Vy clBvcy5pdGVtc1tpdGVtSW5kZXhdICovCisvKiBTYXZlIGFuIGluZGV4IGl0ZW0gaW50byBiYXRj aC0+aXRlbXNbaXRlbUluZGV4XSAqLwogc3RhdGljIGlubGluZSB2b2lkCi1faGFzaF9zYXZlaXRl bShIYXNoU2Nhbk9wYXF1ZSBzbywgaW50IGl0ZW1JbmRleCwKK19oYXNoX3NhdmVpdGVtKEluZGV4 U2NhbkJhdGNoIGJhdGNoLCBpbnQgaXRlbUluZGV4LAogCQkJICAgT2Zmc2V0TnVtYmVyIG9mZm51 bSwgSW5kZXhUdXBsZSBpdHVwKQogewotCUhhc2hTY2FuUG9zSXRlbSAqY3Vyckl0ZW0gPSAmc28t PmN1cnJQb3MuaXRlbXNbaXRlbUluZGV4XTsKKwlCYXRjaE1hdGNoaW5nSXRlbSAqY3Vyckl0ZW0g PSAmYmF0Y2gtPml0ZW1zW2l0ZW1JbmRleF07CiAKLQljdXJySXRlbS0+aGVhcFRpZCA9IGl0dXAt PnRfdGlkOworCWN1cnJJdGVtLT50YWJsZVRpZCA9IGl0dXAtPnRfdGlkOwogCWN1cnJJdGVtLT5p bmRleE9mZnNldCA9IG9mZm51bTsKKwljdXJySXRlbS0+dHVwbGVPZmZzZXQgPSAwOwogfQpkaWZm IC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFzaHV0aWwuYyBiL3NyYy9iYWNrZW5k L2FjY2Vzcy9oYXNoL2hhc2h1dGlsLmMKaW5kZXggMDgxYWRiYzg4Li44OGEzZjNhZDggMTAwNjQ0 Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2h1dGlsLmMKKysrIGIvc3JjL2JhY2tl bmQvYWNjZXNzL2hhc2gvaGFzaHV0aWwuYwpAQCAtMTYsMTAgKzE2LDggQEAKIAogI2luY2x1ZGUg ImFjY2Vzcy9oYXNoLmgiCiAjaW5jbHVkZSAiYWNjZXNzL3JlbG9wdGlvbnMuaCIKLSNpbmNsdWRl ICJhY2Nlc3MvcmVsc2Nhbi5oIgogI2luY2x1ZGUgInBvcnQvcGdfYml0dXRpbHMuaCIKICNpbmNs dWRlICJ1dGlscy9sc3lzY2FjaGUuaCIKLSNpbmNsdWRlICJ1dGlscy9yZWwuaCIKIAogI2RlZmlu ZSBDQUxDX05FV19CVUNLRVQob2xkX2J1Y2tldCwgbG93bWFzaykgXAogCQkJb2xkX2J1Y2tldCB8 IChsb3dtYXNrICsgMSkKQEAgLTMzLDcgKzMxLDcgQEAgX2hhc2hfY2hlY2txdWFsKEluZGV4U2Nh bkRlc2Mgc2NhbiwgSW5kZXhUdXBsZSBpdHVwKQogCS8qCiAJICogQ3VycmVudGx5LCB3ZSBjYW4n dCBjaGVjayBhbnkgb2YgdGhlIHNjYW4gY29uZGl0aW9ucyBzaW5jZSB3ZSBkbyBub3QKIAkgKiBo YXZlIHRoZSBvcmlnaW5hbCBpbmRleCBlbnRyeSB2YWx1ZSB0byBzdXBwbHkgdG8gdGhlIHNrX2Z1 bmMuIEFsd2F5cwotCSAqIHJldHVybiB0cnVlOyB3ZSBleHBlY3QgdGhhdCBoYXNoZ2V0dHVwbGUg YWxyZWFkeSBzZXQgdGhlIHJlY2hlY2sgZmxhZworCSAqIHJldHVybiB0cnVlOyB3ZSBleHBlY3Qg dGhhdCBoYXNoZ2V0YmF0Y2ggYWxyZWFkeSBzZXQgdGhlIHJlY2hlY2sgZmxhZwogCSAqIHRvIG1h a2UgdGhlIG1haW4gaW5kZXhzY2FuIGNvZGUgZG8gaXQuCiAJICovCiAjaWZkZWYgTk9UX1VTRUQK QEAgLTUwNSwxMjkgKzUwMywzIEBAIF9oYXNoX2dldF9uZXdidWNrZXRfZnJvbV9vbGRidWNrZXQo UmVsYXRpb24gcmVsLCBCdWNrZXQgb2xkX2J1Y2tldCwKIAogCXJldHVybiBuZXdfYnVja2V0Owog fQotCi0vKgotICogX2hhc2hfa2lsbF9pdGVtcyAtIHNldCBMUF9ERUFEIHN0YXRlIGZvciBpdGVt cyBhbiBpbmRleHNjYW4gY2FsbGVyIGhhcwotICogdG9sZCB1cyB3ZXJlIGtpbGxlZC4KLSAqCi0g KiBzY2FuLT5vcGFxdWUsIHJlZmVyZW5jZWQgbG9jYWxseSB0aHJvdWdoIHNvLCBjb250YWlucyBp bmZvcm1hdGlvbiBhYm91dCB0aGUKLSAqIGN1cnJlbnQgcGFnZSBhbmQga2lsbGVkIHR1cGxlcyB0 aGVyZW9uIChnZW5lcmFsbHksIHRoaXMgc2hvdWxkIG9ubHkgYmUKLSAqIGNhbGxlZCBpZiBzby0+ bnVtS2lsbGVkID4gMCkuCi0gKgotICogVGhlIGNhbGxlciBkb2VzIG5vdCBoYXZlIGEgbG9jayBv biB0aGUgcGFnZSBhbmQgbWF5IG9yIG1heSBub3QgaGF2ZSB0aGUKLSAqIHBhZ2UgcGlubmVkIGlu IGEgYnVmZmVyLiAgTm90ZSB0aGF0IHJlYWQtbG9jayBpcyBzdWZmaWNpZW50IGZvciBzZXR0aW5n Ci0gKiBMUF9ERUFEIHN0YXR1cyAod2hpY2ggaXMgb25seSBhIGhpbnQpLgotICoKLSAqIFRoZSBj YWxsZXIgbXVzdCBoYXZlIHBpbiBvbiBidWNrZXQgYnVmZmVyLCBidXQgbWF5IG9yIG1heSBub3Qg aGF2ZSBwaW4KLSAqIG9uIG92ZXJmbG93IGJ1ZmZlciwgYXMgaW5kaWNhdGVkIGJ5IEhhc2hTY2Fu UG9zSXNQaW5uZWQoc28tPmN1cnJQb3MpLgotICoKLSAqIFdlIG1hdGNoIGl0ZW1zIGJ5IGhlYXAg VElEIGJlZm9yZSBhc3N1bWluZyB0aGV5IGFyZSB0aGUgcmlnaHQgb25lcyB0bwotICogZGVsZXRl LgotICoKLSAqIFRoZXJlIGFyZSBuZXZlciBhbnkgc2NhbnMgYWN0aXZlIGluIGEgYnVja2V0IGF0 IHRoZSB0aW1lIFZBQ1VVTSBiZWdpbnMsCi0gKiBiZWNhdXNlIFZBQ1VVTSB0YWtlcyBhIGNsZWFu dXAgbG9jayBvbiB0aGUgcHJpbWFyeSBidWNrZXQgcGFnZSBhbmQgc2NhbnMKLSAqIGhvbGQgYSBw aW4uICBBIHNjYW4gY2FuIGJlZ2luIGFmdGVyIFZBQ1VVTSBsZWF2ZXMgdGhlIHByaW1hcnkgYnVj a2V0IHBhZ2UKLSAqIGJ1dCBiZWZvcmUgaXQgZmluaXNoZXMgdGhlIGVudGlyZSBidWNrZXQsIGJ1 dCBpdCBjYW4gbmV2ZXIgcGFzcyBWQUNVVU0sCi0gKiBiZWNhdXNlIFZBQ1VVTSBhbHdheXMgbG9j a3MgdGhlIG5leHQgcGFnZSBiZWZvcmUgcmVsZWFzaW5nIHRoZSBsb2NrIG9uCi0gKiB0aGUgcHJl dmlvdXMgb25lLiAgVGhlcmVmb3JlLCB3ZSBkb24ndCBoYXZlIHRvIHdvcnJ5IGFib3V0IGFjY2lk ZW50YWxseQotICoga2lsbGluZyBhIFRJRCB0aGF0IGhhcyBiZWVuIHJldXNlZCBmb3IgYW4gdW5y ZWxhdGVkIHR1cGxlLgotICovCi12b2lkCi1faGFzaF9raWxsX2l0ZW1zKEluZGV4U2NhbkRlc2Mg c2NhbikKLXsKLQlIYXNoU2Nhbk9wYXF1ZSBzbyA9IChIYXNoU2Nhbk9wYXF1ZSkgc2Nhbi0+b3Bh cXVlOwotCVJlbGF0aW9uCXJlbCA9IHNjYW4tPmluZGV4UmVsYXRpb247Ci0JQmxvY2tOdW1iZXIg Ymxrbm87Ci0JQnVmZmVyCQlidWY7Ci0JUGFnZQkJcGFnZTsKLQlIYXNoUGFnZU9wYXF1ZSBvcGFx dWU7Ci0JT2Zmc2V0TnVtYmVyIG9mZm51bSwKLQkJCQltYXhvZmY7Ci0JaW50CQkJbnVtS2lsbGVk ID0gc28tPm51bUtpbGxlZDsKLQlpbnQJCQlpOwotCWJvb2wJCWtpbGxlZHNvbWV0aGluZyA9IGZh bHNlOwotCWJvb2wJCWhhdmVQaW4gPSBmYWxzZTsKLQotCUFzc2VydChzby0+bnVtS2lsbGVkID4g MCk7Ci0JQXNzZXJ0KHNvLT5raWxsZWRJdGVtcyAhPSBOVUxMKTsKLQlBc3NlcnQoSGFzaFNjYW5Q b3NJc1ZhbGlkKHNvLT5jdXJyUG9zKSk7Ci0KLQkvKgotCSAqIEFsd2F5cyByZXNldCB0aGUgc2Nh biBzdGF0ZSwgc28gd2UgZG9uJ3QgbG9vayBmb3Igc2FtZSBpdGVtcyBvbiBvdGhlcgotCSAqIHBh Z2VzLgotCSAqLwotCXNvLT5udW1LaWxsZWQgPSAwOwotCi0JYmxrbm8gPSBzby0+Y3VyclBvcy5j dXJyUGFnZTsKLQlpZiAoSGFzaFNjYW5Qb3NJc1Bpbm5lZChzby0+Y3VyclBvcykpCi0JewotCQkv KgotCQkgKiBXZSBhbHJlYWR5IGhhdmUgcGluIG9uIHRoaXMgYnVmZmVyLCBzbywgYWxsIHdlIG5l ZWQgdG8gZG8gaXMKLQkJICogYWNxdWlyZSBsb2NrIG9uIGl0LgotCQkgKi8KLQkJaGF2ZVBpbiA9 IHRydWU7Ci0JCWJ1ZiA9IHNvLT5jdXJyUG9zLmJ1ZjsKLQkJTG9ja0J1ZmZlcihidWYsIEJVRkZF Ul9MT0NLX1NIQVJFKTsKLQl9Ci0JZWxzZQotCQlidWYgPSBfaGFzaF9nZXRidWYocmVsLCBibGtu bywgSEFTSF9SRUFELCBMSF9PVkVSRkxPV19QQUdFKTsKLQotCXBhZ2UgPSBCdWZmZXJHZXRQYWdl KGJ1Zik7Ci0Jb3BhcXVlID0gSGFzaFBhZ2VHZXRPcGFxdWUocGFnZSk7Ci0JbWF4b2ZmID0gUGFn ZUdldE1heE9mZnNldE51bWJlcihwYWdlKTsKLQotCWZvciAoaSA9IDA7IGkgPCBudW1LaWxsZWQ7 IGkrKykKLQl7Ci0JCWludAkJCWl0ZW1JbmRleCA9IHNvLT5raWxsZWRJdGVtc1tpXTsKLQkJSGFz aFNjYW5Qb3NJdGVtICpjdXJySXRlbSA9ICZzby0+Y3VyclBvcy5pdGVtc1tpdGVtSW5kZXhdOwot Ci0JCW9mZm51bSA9IGN1cnJJdGVtLT5pbmRleE9mZnNldDsKLQotCQlBc3NlcnQoaXRlbUluZGV4 ID49IHNvLT5jdXJyUG9zLmZpcnN0SXRlbSAmJgotCQkJICAgaXRlbUluZGV4IDw9IHNvLT5jdXJy UG9zLmxhc3RJdGVtKTsKLQotCQl3aGlsZSAob2ZmbnVtIDw9IG1heG9mZikKLQkJewotCQkJSXRl bUlkCQlpaWQgPSBQYWdlR2V0SXRlbUlkKHBhZ2UsIG9mZm51bSk7Ci0JCQlJbmRleFR1cGxlCWl0 dXBsZSA9IChJbmRleFR1cGxlKSBQYWdlR2V0SXRlbShwYWdlLCBpaWQpOwotCi0JCQlpZiAoSXRl bVBvaW50ZXJFcXVhbHMoJml0dXBsZS0+dF90aWQsICZjdXJySXRlbS0+aGVhcFRpZCkpCi0JCQl7 Ci0JCQkJaWYgKCFraWxsZWRzb21ldGhpbmcpCi0JCQkJewotCQkJCQkvKgotCQkJCQkgKiBVc2Ug dGhlIGhpbnQgYml0IGluZnJhc3RydWN0dXJlIHRvIGNoZWNrIGlmIHdlIGNhbgotCQkJCQkgKiB1 cGRhdGUgdGhlIHBhZ2Ugd2hpbGUganVzdCBob2xkaW5nIGEgc2hhcmUgbG9jay4gSWYgd2UKLQkJ CQkJICogYXJlIG5vdCBhbGxvd2VkLCB0aGVyZSdzIG5vIHBvaW50IGNvbnRpbnVpbmcuCi0JCQkJ CSAqLwotCQkJCQlpZiAoIUJ1ZmZlckJlZ2luU2V0SGludEJpdHMoYnVmKSkKLQkJCQkJCWdvdG8g dW5sb2NrX3BhZ2U7Ci0JCQkJfQotCi0JCQkJLyogZm91bmQgdGhlIGl0ZW0gKi8KLQkJCQlJdGVt SWRNYXJrRGVhZChpaWQpOwotCQkJCWtpbGxlZHNvbWV0aGluZyA9IHRydWU7Ci0JCQkJYnJlYWs7 CQkJLyogb3V0IG9mIGlubmVyIHNlYXJjaCBsb29wICovCi0JCQl9Ci0JCQlvZmZudW0gPSBPZmZz ZXROdW1iZXJOZXh0KG9mZm51bSk7Ci0JCX0KLQl9Ci0KLQkvKgotCSAqIFNpbmNlIHRoaXMgY2Fu IGJlIHJlZG9uZSBsYXRlciBpZiBuZWVkZWQsIG1hcmsgYXMgZGlydHkgaGludC4gV2hlbmV2ZXIK LQkgKiB3ZSBtYXJrIGFueXRoaW5nIExQX0RFQUQsIHdlIGFsc28gc2V0IHRoZSBwYWdlJ3MKLQkg KiBMSF9QQUdFX0hBU19ERUFEX1RVUExFUyBmbGFnLCB3aGljaCBpcyBsaWtld2lzZSBqdXN0IGEg aGludC4KLQkgKi8KLQlpZiAoa2lsbGVkc29tZXRoaW5nKQotCXsKLQkJb3BhcXVlLT5oYXNob19m bGFnIHw9IExIX1BBR0VfSEFTX0RFQURfVFVQTEVTOwotCQlCdWZmZXJGaW5pc2hTZXRIaW50Qml0 cyhidWYsIHRydWUsIHRydWUpOwotCX0KLQotdW5sb2NrX3BhZ2U6Ci0JaWYgKHNvLT5oYXNoc29f YnVja2V0X2J1ZiA9PSBzby0+Y3VyclBvcy5idWYgfHwKLQkJaGF2ZVBpbikKLQkJTG9ja0J1ZmZl cihzby0+Y3VyclBvcy5idWYsIEJVRkZFUl9MT0NLX1VOTE9DSyk7Ci0JZWxzZQotCQlfaGFzaF9y ZWxidWYocmVsLCBidWYpOwotfQpkaWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21sL2luZGV4YW0uc2dt bCBiL2RvYy9zcmMvc2dtbC9pbmRleGFtLnNnbWwKaW5kZXggMzIyYmE2Yjc1Li40NDg0YTIxNjUg MTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC9pbmRleGFtLnNnbWwKKysrIGIvZG9jL3NyYy9zZ21s L2luZGV4YW0uc2dtbApAQCAtODQ1LDcgKzg0NSw4IEBAIGFtZ2V0YmF0Y2ggKEluZGV4U2NhbkRl c2Mgc2NhbiwKICAgIDxmdW5jdGlvbj50YWJsZWFtX3V0aWxfZnJlZV9iYXRjaDwvZnVuY3Rpb24+ KS4gIE5vdGUgYWxzbyB0aGF0CiAgICA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+IGZ1 bmN0aW9ucyBtdXN0IG5ldmVyIG1vZGlmeSB0aGUKICAgIDxzdHJ1Y3RmaWVsZD5wcmlvcmJhdGNo PC9zdHJ1Y3RmaWVsZD4gcGFyYW1ldGVyLiAgVGhlIGNvcmUKLSAgIDxmaWxlbmFtZT5zcmMvYmFj a2VuZC9hY2Nlc3MvbmJ0cmVlLzwvZmlsZW5hbWU+IGltcGxlbWVudGF0aW9uIHByb3ZpZGVzIGEK KyAgIDxmaWxlbmFtZT5zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlLzwvZmlsZW5hbWU+IGFuZAor ICAgPGZpbGVuYW1lPnNyYy9iYWNrZW5kL2FjY2Vzcy9oYXNoLzwvZmlsZW5hbWU+IGltcGxlbWVu dGF0aW9ucyBwcm92aWRlCiAgICByZWZlcmVuY2UgZXhhbXBsZXMgb2YgdGhlIDxmdW5jdGlvbj5h bWdldGJhdGNoPC9mdW5jdGlvbj4gaW50ZXJmYWNlLgogICA8L3BhcmE+CiAKQEAgLTkxNywxMiAr OTE4LDEyIEBAIGFtdW5ndWFyZGJhdGNoIChJbmRleFNjYW5EZXNjIHNjYW4sCiAgICBsZWFmIHBh Z2UsIHdoaWNoIHByZXZlbnRzIGNvbmN1cnJlbnQgVElEIHJlY3ljbGluZyBieQogICAgPGNvbW1h bmQ+VkFDVVVNPC9jb21tYW5kPi4KICAgIEZvcm1hbGx5LCBhbiBpbmRleCBBTSBtYXkgaG9sZCBh IGRpZmZlcmVudCBraW5kIG9mIGludGVybG9jaywgb3IgbXVsdGlwbGUKLSAgIGludGVybG9ja3Ms IGluIGl0cyBwZXItYmF0Y2ggb3BhcXVlIGFyZWEsIGJ1dCBpbiBwcmFjdGljZSB0aGUgYnVpbHQt aW4KLSAgIGluZGV4IEFNIHRoYXQgc3VwcG9ydHMgPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0 aW9uPiAmbWRhc2g7IEItdHJlZQotICAgJm1kYXNoOyBob2xkcyBhIHNpbmdsZSBidWZmZXIgcGlu LiAgU2VlIDx4cmVmIGxpbmtlbmQ9ImluZGV4LWxvY2tpbmciLz4gZm9yCi0gICBkZXRhaWxzIG9u IGJ1ZmZlciBwaW4gbWFuYWdlbWVudCBkdXJpbmcgaW5kZXggc2NhbnMuICBUaGlzIGZ1bmN0aW9u IHdpbGwgYmUKLSAgIGNhbGxlZCBhdCBtb3N0IG9uY2UgZm9yIGVhY2ggZ3VhcmRlZCBiYXRjaDsg aXQgaXMgbm90IGNhbGxlZCB3aGVuIHRoZSBpbmRleAotICAgQU0gaGFzIGFscmVhZHkgdW5ndWFy ZGVkIHRoZSBiYXRjaCBpdHNlbGYgKGFzIGl0IGRvZXMgd2hlbgorICAgaW50ZXJsb2NrcywgaW4g aXRzIHBlci1iYXRjaCBvcGFxdWUgYXJlYSwgYnV0IGluIHByYWN0aWNlIGJvdGggYnVpbHQtaW4K KyAgIGluZGV4IEFNcyB0aGF0IHN1cHBvcnQgPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9u PiAmbWRhc2g7IEItdHJlZSBhbmQKKyAgIGhhc2ggJm1kYXNoOyBob2xkIGEgc2luZ2xlIGJ1ZmZl ciBwaW4uICBTZWUgPHhyZWYgbGlua2VuZD0iaW5kZXgtbG9ja2luZyIvPgorICAgZm9yIGRldGFp bHMgb24gYnVmZmVyIHBpbiBtYW5hZ2VtZW50IGR1cmluZyBpbmRleCBzY2Fucy4gIFRoaXMgZnVu Y3Rpb24KKyAgIHdpbGwgYmUgY2FsbGVkIGF0IG1vc3Qgb25jZSBmb3IgZWFjaCBndWFyZGVkIGJh dGNoOyBpdCBpcyBub3QgY2FsbGVkIHdoZW4KKyAgIHRoZSBpbmRleCBBTSBoYXMgYWxyZWFkeSB1 bmd1YXJkZWQgdGhlIGJhdGNoIGl0c2VsZiAoYXMgaXQgZG9lcyB3aGVuCiAgICA8c3RydWN0Zmll bGQ+YmF0Y2hJbW1lZGlhdGVVbmd1YXJkPC9zdHJ1Y3RmaWVsZD4gaXMgdHJ1ZSwgd2hpY2ggaXMg dGhlCiAgICBjb21tb24gY2FzZSkuCiAgIDwvcGFyYT4KQEAgLTk2Miw4ICs5NjMsOCBAQCBhbWtp bGxpdGVtc2JhdGNoIChJbmRleFNjYW5EZXNjIHNjYW4sCiAgICA8ZnVuY3Rpb24+YW1nZXRiYXRj aDwvZnVuY3Rpb24+IGluZGV4IEFNcyAodGhvc2UgdGhhdCBkb24ndCBjYW4gbGVhdmUKICAgIHRo ZSBmaWVsZCBzZXQgdG8gPGxpdGVyYWw+TlVMTDwvbGl0ZXJhbD4pLCBidXQgZG9pbmcgc28gaXMg cmVjb21tZW5kZWQgZm9yCiAgICBwZXJmb3JtYW5jZSwgYXMgaXQgYWxsb3dzIGZ1dHVyZSBzY2Fu cyB0byBza2lwIGtub3duLWRlYWQgaW5kZXggZW50cmllcy4KLSAgIFRoZSBjb3JlIGluZGV4IGFj Y2VzcyBtZXRob2QgdGhhdCBjdXJyZW50bHkgc3VwcG9ydHMKLSAgIDxmdW5jdGlvbj5hbWdldGJh dGNoPC9mdW5jdGlvbj4gKEItdHJlZSkgaW1wbGVtZW50cworICAgQm90aCBjb3JlIGluZGV4IGFj Y2VzcyBtZXRob2RzIHRoYXQgY3VycmVudGx5IHN1cHBvcnQKKyAgIDxmdW5jdGlvbj5hbWdldGJh dGNoPC9mdW5jdGlvbj4gKEItdHJlZSBhbmQgaGFzaCkgaW1wbGVtZW50CiAgICA8bGl0ZXJhbD5M UF9ERUFEPC9saXRlcmFsPiBtYXJraW5nLCB0aG91Z2ggdGhpcmQtcGFydHkgaW5kZXggYWNjZXNz IG1ldGhvZHMKICAgIGFyZSBmcmVlIHRvIGNob29zZSB3aGV0aGVyIHRvIGltcGxlbWVudCB0aGlz IGZlYXR1cmUuICBUaGUgdGFibGUgQU0gbWF5CiAgICBjYWxsIDxmdW5jdGlvbj50YWJsZWFtX3V0 aWxfc2NhbnBvc19raWxsaXRlbTwvZnVuY3Rpb24+IHRvIG1hcmsgZGVhZCBpdGVtcyBhcwpAQCAt MTAwNCw3ICsxMDA1LDggQEAgYW1raWxsaXRlbXNiYXRjaCAoSW5kZXhTY2FuRGVzYyBzY2FuLAog ICAgPGNvbW1hbmQ+VkFDVVVNPC9jb21tYW5kPiByZWN5Y2xpbmcgdGFibGUgVElEcyAmbWRhc2g7 IHNvIGl0IHdvdWxkIGJlCiAgICB1bnNhZmUgdG8gYXNzdW1lIHRoYXQgaW5kZXggZW50cmllcyBz dGlsbCBwb2ludCB0byB0aGUgc2FtZSBoZWFwL3RhYmxlCiAgICB0dXBsZXMuICBTaW5jZSA8bGl0 ZXJhbD5MUF9ERUFEPC9saXRlcmFsPiBtYXJraW5nIGlzIG9ubHkgYW4gb3B0aW1pemF0aW9uCi0g ICBoaW50LCBpdCBpcyBhbHdheXMgc2FmZSB0byBza2lwIGl0LiAgQi10cmVlIHVzZXMgdGhpcyBh cHByb2FjaC4KKyAgIGhpbnQsIGl0IGlzIGFsd2F5cyBzYWZlIHRvIHNraXAgaXQuICBCb3RoIEIt dHJlZSBhbmQgaGFzaCB1c2UgdGhpcworICAgYXBwcm9hY2guCiAgIDwvcGFyYT4KIAogICA8d2Fy bmluZz4KQEAgLTEwMTIsNyArMTAxNCw3IEBAIGFta2lsbGl0ZW1zYmF0Y2ggKEluZGV4U2NhbkRl c2Mgc2NhbiwKICAgICBUaGlzIExTTiBjb21wYXJpc29uIHRlY2huaXF1ZSByZXF1aXJlcyB0aGUg aW5kZXggQU0gdG8gdXNlIGZha2UKICAgICAobW9ub3RvbmljYWxseSBpbmNyZWFzaW5nKSBMU05z IG9uIGl0cyBwYWdlcyBmb3IgcmVsYXRpb25zIHdoZXJlIFdBTCBpcwogICAgIG5vdCBnZW5lcmF0 ZWQsIHNpbmNlIHJlYWwgTFNOcyBhcmUgbm90IGF2YWlsYWJsZSBpbiB0aGF0IGNhc2UuICBTZWUg dGhlCi0gICAgQi10cmVlIGluZGV4IGltcGxlbWVudGF0aW9uIGZvciBhIHJlZmVyZW5jZSBleGFt cGxlIG9mIHRoaXMKKyAgICBCLXRyZWUgYW5kIGhhc2ggaW5kZXggaW1wbGVtZW50YXRpb25zIGZv ciByZWZlcmVuY2UgZXhhbXBsZXMgb2YgdGhpcwogICAgIHRlY2huaXF1ZS4gIEFuIGluZGV4IEFN IHRoYXQgZG9lcyBub3QgaW1wbGVtZW50IGZha2UgTFNOcyBjYW4gc3RpbGwKICAgICBwcm92aWRl IDxmdW5jdGlvbj5hbWtpbGxpdGVtc2JhdGNoPC9mdW5jdGlvbj4sIGJ1dCBzaG91bGQgc2ltcGx5 IGRvCiAgICAgbm90aGluZyB3aGVuIHRoZSByZWxhdGlvbiBkb2VzIG5vdCBnZW5lcmF0ZSBXQUwg KGkuZS4sIHdoZW4KQEAgLTEwOTQsOCArMTA5Niw4IEBAIGFtZ2V0Yml0bWFwIChJbmRleFNjYW5E ZXNjIHNjYW4sCiAgICA8ZnVuY3Rpb24+YW1nZXRiaXRtYXA8L2Z1bmN0aW9uPiBzY2FuczsgZHVy aW5nCiAgICA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+IHNjYW5zIHRoZSA8bGl0ZXJh bD5wcmlvcmJhdGNoPC9saXRlcmFsPgogICAgaXMgc3RyaWN0bHkgb3duZWQgYnkgdGhlIGNhbGxl ciAodGhlIHRhYmxlIEFNKSwgYW5kIHRoZSBpbmRleCBBTSBtdXN0Ci0gICBuZXZlciByZWxlYXNl IGl0LiAgU2VlIDxmdW5jdGlvbj5fYnRfbmV4dDwvZnVuY3Rpb24+IGZvciBhIHJlZmVyZW5jZQot ICAgZXhhbXBsZS4KKyAgIG5ldmVyIHJlbGVhc2UgaXQuICBTZWUgPGZ1bmN0aW9uPl9idF9uZXh0 PC9mdW5jdGlvbj4gYW5kCisgICA8ZnVuY3Rpb24+X2hhc2hfbmV4dDwvZnVuY3Rpb24+IGZvciBy ZWZlcmVuY2UgZXhhbXBsZXMuCiAgIDwvcGFyYT4KIAogICA8cGFyYT4KZGlmZiAtLWdpdCBhL3Ny Yy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0IGIvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVk ZWZzLmxpc3QKaW5kZXggZTNjOGVkNjg0Li45MWQxZmU1MDggMTAwNjQ0Ci0tLSBhL3NyYy90b29s cy9wZ2luZGVudC90eXBlZGVmcy5saXN0CisrKyBiL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVm cy5saXN0CkBAIC0xMjE4LDYgKzEyMTgsNyBAQCBIYXNoCiBIYXNoQWdnQmF0Y2gKIEhhc2hBZ2dT cGlsbAogSGFzaEFsbG9jRnVuYworSGFzaEJhdGNoRGF0YQogSGFzaEJ1aWxkU3RhdGUKIEhhc2hC dWxrRGVsZXRlU3RyZWFtUHJpdmF0ZQogSGFzaENvbXBhcmVGdW5jCkBAIC0xMjM5LDggKzEyNDAs NiBAQCBIYXNoUGFnZVN0YXQKIEhhc2hQYXRoCiBIYXNoU2Nhbk9wYXF1ZQogSGFzaFNjYW5PcGFx dWVEYXRhCi1IYXNoU2NhblBvc0RhdGEKLUhhc2hTY2FuUG9zSXRlbQogSGFzaFNrZXdCdWNrZXQK IEhhc2hTdGF0ZQogSGFzaFZhbHVlRnVuYwotLSAKMi41My4wCgo= --0000000000002fe31c064eaff221--