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 1wia36-000IH5-3A for pgsql-hackers@arkaria.postgresql.org; Sat, 11 Jul 2026 15:55:30 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1wia33-004I4w-1z for pgsql-hackers@arkaria.postgresql.org; Sat, 11 Jul 2026 15:55:26 +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 1wia32-004I4o-09 for pgsql-hackers@lists.postgresql.org; Sat, 11 Jul 2026 15:55:25 +0000 Received: from fhigh-a1-smtp.messagingengine.com ([103.168.172.152]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.98.2) (envelope-from ) id 1wia2u-00000000CWw-0MWf for pgsql-hackers@lists.postgresql.org; Sat, 11 Jul 2026 15:55:23 +0000 Received: from phl-compute-02.internal (phl-compute-02.internal [10.202.2.42]) by mailfhigh.phl.internal (Postfix) with ESMTP id 8AB551400036; Sat, 11 Jul 2026 11:55:14 -0400 (EDT) Received: from phl-imap-02 ([10.202.2.81]) by phl-compute-02.internal (MEProxy); Sat, 11 Jul 2026 11:55:14 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=burd.me; h=cc:cc :content-type:content-type:date:date:from:from:in-reply-to :in-reply-to:message-id:mime-version:references:reply-to:subject :subject:to:to; s=fm2; t=1783785314; x=1783871714; bh=GoAZTEpLnb 1qgInoNM6gl0FQ2iBV/B7JcBMK7OzhZ4c=; b=YHuvavOC62UXvEko7+ToW/x3og wSo6Ca5XRt25hHBIcmkpfeJ/bR2zdd2hQ8wPLRbv2t0MIr1NfieoKKfCsFPY5B7w UNamoyrbKuSWrGvN+gAdmisTZ7cC8wcCtBInNJHJrKrfkypYfQYfc9BLTM2WoyJy Kan29T8qRoOV1+xzMW1eFK532oQ/Zl3pQ1HwNyo/NJNu4FLcPrOOQLvvyNMDF68Z QqfHH/lLW92fMnuP53vFjz0fpBmnUebt7OXIzqP3nrN+hoLn30IrZP/tDqLwHU5B /u/GTkex5e5jKisQTPCDefmin6Zus0Y9Va47Va/jeigvAv/3mBr9/RgAqigA== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:cc:content-type:content-type:date:date :feedback-id:feedback-id:from:from:in-reply-to:in-reply-to :message-id:mime-version:references:reply-to:subject:subject:to :to:x-me-proxy:x-me-sender:x-me-sender:x-sasl-enc; s=fm2; t= 1783785314; x=1783871714; bh=GoAZTEpLnb1qgInoNM6gl0FQ2iBV/B7JcBM K7OzhZ4c=; b=QvlhoBttauetyjrEePJCBFgf2Ek60zRzj2a+a6qPexElN5fUXRV NXoLnasYsg/QrcFpB3zT+kQBiR+pOWCOqHNwa4hpNXob6bvDfjdHYWo2XkhmEHC8 71oD2K8PpWS7ukM8vDi5HccQWQ4razFHmHRcDG7uAWSb++oyEoFNqRRXlmlUasY5 5FTnsyeBvhUy1vmP2i9dJEZfzmPJewgfzP4135g1pbqABZCm0hv9dXxrp88Zcbym DwF/rGQ9EeD41PwvrbeV0DugO//iT08tnAyDn9y1pUZePWMKe2A1T49VXdWptVug hQEsfTf7L96uEZm03QvfYrhVv5MS7bRuI3g== X-ME-Sender: X-ME-Proxy-Cause: dmFkZTE+iNBDyK0ky7FWxDqytK7Wv2hF0N72gUg0t/1SCUtiSSd6jFG9ZkjD65RVE1x0+U LxnIt2NOB+iuxHI2s42WNNhcE6aIGrxdz1Cvd4RnRaQ1xmfiYzdOxA3Rg8Ylk7ifnHVMw6 2JnPzj37TWqx+GsyQnANTsAbGz8iCmA9pClSjXkFJnzR66pTKPTg0ysq1jnS9Zapfqnr0T U6w52AptIJLVfwKHKQc+NzygBfA3Qy05ezc64mONyMUErsiA9DfnjNPTR4g7QWGsFlbMZ9 amXrHoGDJl560lvbBUc3nt0l8gd4zoBqj86rCecIVzj3tcN77xHIy390N06RjPKYvConZF B8ROVGGUPhbPUiCbGhiJ/4qQtgIJLiVB8bozdRUBud/cpS2B4wufs7BAQ7UyfKBZrcLhUV PQ/UPIc0fPV7T7OA6KKVVJbz44Lnst0QZxAwaUhqEQqjKHmFSKpvPd/hHF5OUbarwQHjPz JbL2+FBxk3/HZMUy8nN2eL/v5aUE0moLIgJSLQa6vGP9dOa4vdlrVIT/aZdkFRSwL0AtjT H6Rkin4tRNY5Sf72Bjh2ITHdi81Dpv3ebpbZQo1A+cEKq59sKOyoC9xLvUv/2zAjxq7wp0 Hzi//e9yH19Kfn2g39sopY50oTcJ2t63gCJ9rMK7514Xr9TsbmuSa87S5iew X-ME-Proxy: Feedback-ID: i675e48f3:Fastmail Received: by mailuser.phl.internal (Postfix, from userid 501) id B715A700065; Sat, 11 Jul 2026 11:55:13 -0400 (EDT) X-Mailer: MessagingEngine.com Webmail Interface MIME-Version: 1.0 X-ThreadId: A5esK-b6BnZB Date: Sat, 11 Jul 2026 11:54:52 -0400 From: "Greg Burd" To: "PostgreSQL Hackers" Cc: "Tomas Vondra" , "Nathan Bossart" , "Andres Freund" Message-Id: <9cfdf3f2-b799-485a-8b5a-5159c00ff2df@app.fastmail.com> In-Reply-To: <76c33898-3baa-4f7b-8b72-57dd390fcffe@app.fastmail.com> References: <79629577-3ad8-4b1c-a469-ebc2cb4c5104@app.fastmail.com> <618241c3-a1e5-4a16-be12-17a361822ee0@app.fastmail.com> <5bcaa70b-89c7-44b6-b197-638d10997cae@app.fastmail.com> <76c33898-3baa-4f7b-8b72-57dd390fcffe@app.fastmail.com> Subject: Re: [PATCH] Batched clock sweep to reduce cross-socket atomic contention Content-Type: multipart/mixed; boundary=eb6ebdb126a89898ab85d3de614c44896735dbb9 List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --eb6ebdb126a89898ab85d3de614c44896735dbb9 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable On Fri, Jul 10, 2026, at 2:07 PM, Greg Burd wrote: > On Fri, Jul 10, 2026, at 10:00 AM, Greg Burd wrote: >> Hello again, >> >> Removing the freelist [1] turned out to be a good idea, so why not re= move >> and simplify more? >> >> Included is a three-patch series (v3, on 2e6578292a9 cf-7000) that >> replaces the 0..5 usage_count clock sweep with a cooling-stage clock, >> and because this evictor algorithm is scan resistance 0003 removes >> the BufferAccessStrategy ring buffers entirely. The net is slightly >> faster (TPS), hotter buffers (fewer misses) and a lot less code to >> maintain (no special case for scan resistant work) going forward. >> >> 0001 Batch the clock sweep to reduce nextVictimBuffer atomic conte= ntion >> 0002 Replace the usage_count clock sweep with a cooling-stage evic= tor >> 0003 Remove BufferAccessStrategy; scan resistance is now intrinsic >> >> Net it is +510/-1642 over 83 files; almost all of the deletion is 000= 3. >> >> On a 6-NUMA-node r8i.metal-96xl under continuous eviction, this chang= e is >> a consistent +4=E2=80=935% on read-heavy pgbench with equal-or-better= hit ratios. >> The same test on a 2-node box is flat, which is the tell that the win >> is the cross-socket clock-hand contention the batched sweep removes. = Under >> real storage IO (working set > RAM on local NVMe), the scan-resistance >> path is +1.6=E2=80=933.9% with measurably fewer heap reads. >> >> I'll put the design decisions and the benchmark methodology on the ta= ble >> first, then talk through the results because if the model is wrong on >> principle, or the benchmarks are measuring the wrong thing, I would m= uch >> rather hear it now. >> >> Contention arises on high core-count systems from the of cost advanci= ng >> nextVictimBuffer in StrategyGetBuffer() via a fetch-add of 1 per tick. >> This contention is exacerbated on a multi-socket box. That one cache >> line bounces over the interconnect on every eviction; under pressure >> with hundreds of backends it is the dominant cost of the sweep. This= is >> why we're investing time on NUMA optimizations. >> >> >> =3D=3D What each patch does, and why =3D=3D >> >> 0001 -- Batch the clock sweep. >> >> This is the setup/baseline commit and is an incremental improvement >> over the existing batched approach, but it is not the final goal and >> should not be committed without 0002. >> >> Each backend will claim a run of consecutive buffer IDs with a sing= le >> fetch-add and iterate them privately. Global sweep order is preser= ved >> -- each buffer is visited exactly once per pass -- only the intra-p= ass >> ordering of visits changes, which the algorithm does not depend on. >> The atomic fires ~1/batch as often. >> >> The batch is one cache line's worth of hand values (PG_CACHE_LINE_S= IZE >> / sizeof(uint32)), capped at NBuffers. It is gated on multi-node N= UMA >> (pg_numa_get_max_node() >=3D 1); on a single socket the batch is 1 = and >> the path is byte-identical to today. This is essentially Jim's pat= ch; >> the only substantive change from his v1/v2 is deriving the batch si= ze >> from the cache-line size rather than a fixed 64/tiered constant. >> >> 0002 -- Replace usage_count with a cooling-stage evictor. >> >> This is the heart of the series and where I most want the design >> attacked. >> >> A buffer is HOT (recently used) or COOL (an eviction candidate); >> "pinned" is the existing refcount. There is no per-buffer 0..5 >> counter. A demand-loaded page is admitted COOL (probationary); a >> second access promotes it COOL->HOT. So a page touched once -- as = is >> the case with a sequential scan -- fills and drains the COOL stage = and >> is evicted from it without displacing the HOT working set. This is >> the LeanStore / 2Q-A1 idea, and it is the whole reason 0003 can exi= st: >> scan resistance stops being a ring-buffer bolt-on and becomes a >> property of the replacement algorithm. >> >> The 4-bit usage_count field is reinterpreted in place -- bit 0 >> HOT/COOL, bit 1 a reference bit, the top 2 bits unused -- so the 64= -bit >> buffer-state layout, its refcount / flag / lock offsets. The only >> change to the StaticAsserts is a new one asserting the field is at >> least 2 bits wide, since we now use two of its bits. The eviction >> claim (COOL, unpinned -> pinned) stays a CAS so a racing PinBuffer >> always wins; promotion and demotion are single-bit transitions. >> >> The one non-obvious decision, which I got wrong first and want to f= lag >> loudly: *Who* demotes HOT->COOL. My first cut was "prefer-COOL": t= he >> foreground sweep skips HOT buffers hunting for an already-COOL vict= im >> and only cools HOT buffers once a full pass finds none. That >> collapses under an ordinary OLTP workload where the working set is >> larger than shared_buffers (no scan at all). Every access promotes >> its buffer to HOT, so there are almost no COOL buffers, the "cool a >> full pass" fallback fires on nearly every allocation, and each vict= im >> search becomes a ~2x full-pool scan of scattered BufferDescs. I >> measured 3-17x throughput loss vs stock -- a cliff. >> >> HOT->COOL demotion is done during the background writer's existing = LRU >> scan, which already runs ahead of the clock hand. It demotes just >> enough HOT buffers to keep a supply of COOL victims (bounded by the >> predicted next-cycle allocation, so it does not cool the whole pool= ), >> under the buffer header lock it already holds. A single reference = bit >> gives a recently-accessed buffer one reprieve before it is cooled, >> which keeps the genuinely-hot set out of the COOL stage under scan >> pressure. With that, the foreground finds a victim in a single pass >> and the cliff is gone (data below). >> >> I chose prefer-COOL-plus-bgwriter-precooling because it can protect= a >> hot buffer slightly longer (the pre-cooler, tuned to a budget, deci= des >> when to demote rather than demoting on contact), which should help = hit >> ratio on a stable hot set -- IF the pre-cooler keeps up. When it l= ags >> (bgwriter off or behind), the foreground force_cool is still there = as >> a correctness fallback, but it is the expensive path. >> >> 0003 -- Remove BufferAccessStrategy. >> >> With scan resistance intrinsic, the BAS_BULKREAD/BULKWRITE/VACUUM >> rings are dead weight, so this removes them end to end: the type and >> enum, the ring machinery in freelist.c, the strategy parameter >> threaded through ReadBufferExtended / the ExtendBufferedRel* family= / >> read_stream / every scan/vacuum/analyze/index-AM caller, the strate= gy >> fields on the scan and bulk-insert descriptors, and >> _hash_getbuf_with_strategy. pg_stat_io's per-strategy IO contexts >> collapse to normal/init (IOOP_REUSE only ever happened while recycl= ing >> a ring buffer, so it is gone), and the vacuum_buffer_usage_limit GU= C / >> VACUUM (BUFFER_USAGE_LIMIT ...) option / vacuumdb --buffer-usage-li= mit >> go with it. >> >> This is the patch most likely to be contentious for reasons unrelat= ed >> to the sweep: it removes a user-visible GUC and changes pg_stat_io's >> shape. I have kept it as its own commit precisely so 0001+0002 can= be >> judged on the algorithm without swallowing the removal. If the >> consensus is that the cooling model is fine but the ring machinery >> should stay for other reasons (BUFFER_USAGE_LIMIT as an operator >> control, say), 0003 can simply be dropped and 0002 still stands -- = the >> rings just become redundant rather than removed. I would like to k= now >> if that is where people land. >> >> >> =3D=3D Benchmarks =3D=3D >> >> I want to be careful here, because Andres's central criticism of the >> original batched-sweep numbers [2] was that they measured the wrong >> thing -- an all-in-page-cache config where the only bottleneck left is >> the atomic, which is not how anyone runs a 384-vCPU box. That critic= ism >> is correct and I have tried to design around it, but I have almost >> certainly not fully escaped it, so the methodology is laid out below = in >> enough detail to shoot at. >> >> I refer to the COOL/HOT approach (the changes in this patch set) as >> "bcs", I've forgotten what that stands for... "buffer cache solution?" >> I really don't remember (ha!). >> >> Hardware / method (both instances bare-metal, Amazon Linux 2023): >> >> - m6i.metal -- 128 vCPU, 2 sockets, 2 NUMA nodes (distances 10/2= 0), 503GB >> - r8i.metal-96xl -- 384 vCPU, 2 sockets, 6 NUMA nodes via SNC3, 3TB >> >> Builds: --buildtype=3Ddebugoptimized (-O2), cassert off, --with-libnu= ma, >> both branches from the same tree. Postmaster pinned with numactl >> --cpunodebind=3D0 --membind=3D0 (without it stock TPS varied ~30% by = launch >> node -- worth flagging for anyone reproducing). pgbench dataset load= ed >> once per build into its own datadir. >> >> The regime I settled on: a dataset that fits fully in OS page cache b= ut >> exceeds shared_buffers, warmed before each cell, caches NOT dropped >> between cells. The point is a sweep that runs continuously with >> sub-millisecond read latency and NO storage IO in the critical path -- >> so what I am measuring is the eviction machinery itself, not the disk >> (as best as I can tell). >> >> I sweep the ratio (working-set / shared_buffers) from 0.8 (fits, no >> eviction, a control) up to 8x by varying shared_buffers against a fix= ed >> 63GB dataset. >> >> 3 iterations per cell, medians reported, 256 clients on m6i / 384 on = r8i. >> >> Two workloads: uniform pgbench -S (the pure eviction-churn case, and = the >> worst case for the cooling model -- no hot set to protect), and >> "hotscan" (a Zipfian hot set plus a handful of clients running large >> range scans -- the scan-resistance case). >> >> I want the regime itself critiqued. It deliberately removes storage = IO >> to expose the sweep; the flip side is it is not a production >> configuration, and the read-path win (fewer misses under scan >> resistance) shows up as read count, not TPS, because a "miss" here is= an >> OS-cache memcpy, not a device read. >> >> r8i.metal-96xl, uniform pgbench -S, 384 clients, TPS (median of 3): >> >> ratio SB(GB) stock bcs delta stock/bcs hit% >> 0.8 ~400 1,623,536 1,692,090 +4.2% 99.2 / 99.9 >> 1.25 ~320 1,443,343 1,519,290 +5.3% 94.8 / 95.2 >> 1.5 ~266 1,344,051 1,417,462 +5.5% 91.9 / 92.1 >> 2 ~200 1,293,871 1,358,550 +5.0% 87.9 / 87.8 >> 4 ~100 1,194,405 1,240,334 +3.8% 77.1 / 78.5 >> 8 ~50 1,090,873 1,140,839 +4.6% 69.7 / 70.6 >> >> Consistent +4-5% across the eviction range, growing with pressure, wi= th >> equal-or-better hit ratio (better at 4x/8x). bcs also showed lower >> cache-miss rate in perf stat (~28-35% vs ~31-37%), which is the batch= ed >> sweep's reduced cross-node line bouncing showing through. >> >> r8i, hotscan (Zipfian hot set + range scanners), TPS / hit% / heap re= ads: >> >> ratio stock TPS bcs TPS stock hit bcs hit stock reads bcs= reads >> 1.25 1,833,675 1,871,289 99.43 99.57 7,309,457 5,5= 03,927 >> 1.5 1,876,846 1,942,877 99.35 99.42 8,335,144 7,5= 65,667 >> 2 1,868,591 1,853,547 99.12 99.15 11,173,831 10,9= 87,371 >> >> The scan-resistance signal: at 1.25-1.5x, bcs holds a higher hit ratio >> and does up to 25% fewer heap reads (24.7% at 1.25x, ~9% at 1.5x) -- = it >> is keeping the hot set resident through the scans where stock lets th= em >> flush it. Muted in TPS only because everything is in OS cache (a miss >> is cheap); on real storage this read reduction is where the win would >> land. At 2x it washes out (enough pressure that both evict heavily). >> >> m6i.metal (2 nodes), uniform, 256 clients -- the smaller box, for con= trast: >> essentially parity, bcs -2% to +1% across ratios. The 2-node box bar= ely >> exercises the atomic, so 0001's contention win does not appear; that = it does >> not regress is the result that matters here. >> >> Huge pages on vs off (r8i, uniform, medians): I ran this because the >> original thread flagged it as uncharacterized. bcs won by +3-7% both >> ways, no regression without huge pages -- the win is from cutting the >> frequency of atomic ops on the counter line, which does not depend on >> where the descriptors physically live. (This is why the batching gate >> is NUMA-only and not also huge-pages-gated.) >> >> The "prefer-COOL cliff" I mentioned under 0002, so the failure mode is >> on the record: BEFORE moving cooling into the bgwriter, the m6i unifo= rm >> run at 256 clients was bcs 274K vs stock 840K at ratio 2 (-67%), and >> 42.8K vs 762K at 8x (-94%), with cache-miss rate exploding to ~40%. >> That is the shape of getting the demotion policy wrong; the r8i +5% >> table above is after the fix. >> >> Reproduction: the whole harness (instance launch, OS tuning, per-build >> load, the ratio sweep, perf stat capture) is scripted; I will attach = it >> as a DO-NOT-MERGE commit / put it in the CF entry so the methodology = can >> be reproduced and picked apart rather than taken on faith. Raw per-r= un >> CSVs and perf output likewise. >> >> >> A Real IO (working set > RAM, evictions hitting storage) Benchmark >> >> This is the regime Andres asked for, and the one I flagged earlier as= not yet >> done cleanly. The earlier attempt was EBS-latency-bound; this one us= es local >> NVMe so eviction reads hit real storage at ~microsecond, not ~15ms, l= atency -- >> during the run the array sat at 100% utilization and ~145K read IOPS,= so the >> eviction path is genuinely storage-bound, not cache-served. >> >> m6id.metal -- 128 vCPU, 2 sockets, 2 NUMA nodes, 503GB, 4x1.9TB local= NVMe in >> RAID0. Dataset ~700GB (pgbench scale 47000), i.e. LARGER than RAM, s= o the >> working set cannot sit in the OS page cache. shared_buffers is a sma= ll window >> over it -- 63GB (11x) and 31GB (22x) -- caches dropped per cell, 256 = clients, 3 >> iterations, medians. Same builds/method as the in-cache runs otherwi= se. >> >> hotscan (Zipfian hot set + range scanners), median of 3: >> >> ratio SB(GB) stock TPS bcs TPS dTPS stock/bcs hit rea= ds d >> 11 63 877,357 911,363 +3.9% 96.30 / 96.43 -2.= 2% >> 22 31 873,880 888,010 +1.6% 94.02 / 94.22 -1.= 5% >> >> This is the result the in-cache runs could only hint at: under real s= torage IO >> the scan-resistance read reduction converts to throughput. The bcs a= pproach >> keeps a higher hit ratio and does 1.5-2.2% fewer heap reads, and here= -- unlike >> in cache, where a miss is a cheap memcpy -- a read it avoids is an NV= Me round >> trip, so the read reduction shows up as +1.6-3.9% TPS. >> >> uniform pgbench -S (pure eviction churn, no hot set to protect), medi= an of 3: >> >> ratio SB(GB) stock TPS bcs TPS dTPS stock/bcs hit >> 11 63 605,656 616,247 +1.7% 67.0 / 67.3 >> 22 31 605,517 611,312 +1.0% 63.5 / 63.6 >> >> Hit ratio here is 63-67% -- a third of accesses miss and hit NVMe (19= 0M-220M >> evictions per run), so this is deep, genuinely storage-bound churn. = bcs is >> +1-1.7%, i.e. flat-to-slightly-positive, which is the honest producti= on picture: >> with no hot set to protect, scan resistance has nothing to do, and th= e win is >> just the batched sweep's reduced contention showing faintly through t= he IO wait. >> Notably bcs does not regress even when its policy has no advantage to= exploit. >> >> >> =3D=3D Side note for the curious... =3D=3D >> >> Separately, Dhruv Aron has proposed restructuring the shared-buffer l= ookup table >> [2], replacing dynahash with a flat two-array structure. That attacks= the >> other hot cost on a buffer miss =E2=80=94 resolving a page to its buf= fer =E2=80=94 where this >> series attacks the eviction that a miss triggers. They touch buf_tabl= e.c and a >> lock-ordering change in InvalidateBuffer(); this series touches freel= ist.c and >> the per-buffer replacement state, and removes BufferAccessStrategy. T= he two are >> complementary and should compound on the miss path; the only overlap = is >> InvalidateBuffer()/GetVictimBuffer(), where their extended buffer-hea= der-lock >> hold and this series' CAS-claim + bgwriter pre-cooling both take that= lock, and >> would want reconciling if both land. I have not benchmarked them toge= ther (yet). >> >> =3D=3D What I have not done, honestly =3D=3D >> >> - Hardening the foreground force_cool fallback to be cheap when it >> fires, rather than relying on the bgwriter pre-cooler never laggi= ng. >> >> - Anything on single-socket beyond "does not regress"; the design is >> not trying to help there. >> >> >> =3D=3D The ask =3D=3D >> >> 1. 0002's demotion policy: is prefer-COOL + bgwriter pre-cooling the >> right call, or is the other team's cool-in-place the more robust >> default given it has no cliff and no background-process dependen= cy? >> This is the decision everything else hangs on. >> >> 2. Is admitting demand-loaded pages COOL (probationary, >> promote-on-second- touch) an acceptable basis for scan resistance >> in the core buffer manager, i.e. is it OK to make scan resistance >> an algorithm property and retire the strategy rings (0003)? Or >> should the rings stay and 0002 ride alongside them? >> >> 3. The benchmark methodology: where is the in-OS-cache regime >> misleading, and what would you want measured instead? I am most >> worried I am flattering the sweep by removing the IO that would >> otherwise hide it. >> >> 4. Reinterpreting the usage_count field as {HOT/COOL, ref} bits and >> collapsing pg_stat_io's contexts -- acceptable, or is there a >> cleaner representation the project would want before this is wor= th >> pursuing? >> >> I have measured that the 0..5 count is overhead and provides no >> meaningful signal at all, that a HOT/COLD approach provides a simpler >> more stable and better performing eviction model for the buffer pool. >> If you dispute that, let's dig in and compare notes. :) >> >> I would be remiss if I didn't point out the thread [3] by Tomas et. a= l., >> whose NUMA investigation targets the same bottlenecks, and inspired t= he >> work that led to this set of ideas.=20 >> >> Thanks for reading this far. I look forward to the critique. >> >> best. >> >> -greg >> >> [1] Reconsidering the freelist >> =20 >> https://www.postgresql.org/message-id/f0e3c02e-e217-4f04-8dab-1e7e80a= 228c0%40burd.me >> [2] Re: Restructured Shared Buffer Hash Table >> =20 >> https://www.postgresql.org/message-id/dbbd1998-19ff-4ac2-b4b1-a39f4ec= 1b0f5@iki.fi >> [3] Adding basic NUMA awareness (Tomas Vondra) >> =20 >> https://www.postgresql.org/message-id/099b9433-2855-4f1b-b421-d078a5d= 82017%40vondra.me >> Attachments: >> * v3-0001-Batch-the-clock-sweep-to-reduce-nextVictimBuffer-.patch >> * v3-0002-Replace-the-usage_count-clock-sweep-with-a-coolin.patch >> * v3-0003-Remove-BufferAccessStrategy-scan-resistance-is-no.patch > > Rebased v4 onto c71d43025d7. > > -greg > Attachments: > * v4-0001-Batch-the-clock-sweep-to-reduce-nextVictimBuffer-.patch > * v4-0002-Replace-the-usage_count-clock-sweep-with-a-coolin.patch > * v4-0003-Remove-BufferAccessStrategy-scan-resistance-is-no.patch Rebased v5 onto 5f14f82280d to keep the CF-bot happy (and everyone else,= I'd imagine). -greg --eb6ebdb126a89898ab85d3de614c44896735dbb9 Content-Disposition: attachment; filename*0="v5-0001-Batch-the-clock-sweep-to-reduce-nextVictimBuffer-.pat"; filename*1="ch" Content-Type: text/x-patch; name="=?UTF-8?Q?v5-0001-Batch-the-clock-sweep-to-reduce-nextVictimBuffer-.patc?= =?UTF-8?Q?h?=" Content-Transfer-Encoding: base64 RnJvbSA2Y2I2N2UzMzQ2ZmQ0OTZiNGI3MzVjZDQ3ZmVhOTAxOWNiZjIzMmM0IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBHcmVnIEJ1cmQgPGdyZWdAYnVyZC5tZT4KRGF0ZTog TW9uLCA2IEp1bCAyMDI2IDE3OjI1OjAwIC0wNDAwClN1YmplY3Q6IFtQQVRDSCB2NSAxLzNd IEJhdGNoIHRoZSBjbG9jayBzd2VlcCB0byByZWR1Y2UgbmV4dFZpY3RpbUJ1ZmZlcgogYXRv bWljIGNvbnRlbnRpb24KClN0cmF0ZWd5R2V0QnVmZmVyKCkgYWR2YW5jZXMgdGhlIHNoYXJl ZCBjbG9jayBoYW5kLCBuZXh0VmljdGltQnVmZmVyLCB3aXRoIGEKcGdfYXRvbWljX2ZldGNo X2FkZF91MzIoLi4uLCAxKSBvbiBldmVyeSB0aWNrLiAgT24gYSBtdWx0aS1zb2NrZXQgc3lz dGVtIHRoZQpjYWNoZSBsaW5lIGhvbGRpbmcgdGhhdCBjb3VudGVyIGhhcyB0byB0cmF2ZWwg b3ZlciB0aGUgaW50ZXJjb25uZWN0IG9uIGVhY2gKb3BlcmF0aW9uLCBwdXNoaW5nIGEgc3dl ZXAgdGljayBmcm9tIH4yMG5zIChzYW1lLXNvY2tldCwgbGluZSB3YXJtIGluIEwxL0wyKQpp bnRvIHRoZSB+MTAwLTIwMG5zIHJhbmdlLiAgVW5kZXIgZXZpY3Rpb24gcHJlc3N1cmUgd2l0 aCBodW5kcmVkcyBvZiBiYWNrZW5kcwppbiBTdHJhdGVneUdldEJ1ZmZlcigpIGNvbmN1cnJl bnRseSwgdGhhdCBzaW5nbGUgY2FjaGUgbGluZSBiZWNvbWVzIHRoZQpkb21pbmFudCBjb3N0 IG9mIHRoZSBzd2VlcCwgdmlzaWJsZSBhcyBlbGV2YXRlZCBidXMtY3ljbGVzIGFuZCBjYWNo ZS1taXNzZXMgaW4KYSBwZXJmIHByb2ZpbGUuCgpIYXZlIGVhY2ggYmFja2VuZCBjbGFpbSBh IHJ1biBvZiBjb25zZWN1dGl2ZSBidWZmZXIgSURzIGZyb20gdGhlIHNoYXJlZCBoYW5kCndp dGggYSBzaW5nbGUgZmV0Y2gtYWRkIGFuZCB0aGVuIGl0ZXJhdGUgdGhyb3VnaCB0aGVtIHBy aXZhdGVseS4gIFRoZSBzd2VlcApzdGlsbCBhZHZhbmNlcyB0aHJvdWdoIHRoZSBwb29sIGlu IG9yZGVyLCBlYWNoIGJ1ZmZlciBpcyBzdGlsbCB2aXNpdGVkIGV4YWN0bHkKb25jZSBwZXIg Y29tcGxldGUgcGFzcywgYW5kIHRoZSBtZWFuaW5nIG9mIHRoZSBjbG9jayBzdGF0ZSBpcyB1 bmNoYW5nZWQ7IG9ubHkKdGhlIHRlbXBvcmFsIG9yZGVyaW5nIG9mIHZpc2l0cyB3aXRoaW4g YSBwYXNzIGNoYW5nZXMsIHdoaWNoIHRoZSBhbGdvcml0aG0KZG9lcyBub3QgZGVwZW5kIG9u LiAgVGhlIGNvbnRlbmRlZCBhdG9taWMgbm93IGZpcmVzIHJvdWdobHkgb25jZSBwZXIgYmF0 Y2gKcmF0aGVyIHRoYW4gb25jZSBwZXIgYnVmZmVyLgoKVGhlIGJhdGNoIGlzIG9uZSBjYWNo ZSBsaW5lJ3Mgd29ydGggb2YgY2xvY2staGFuZCB2YWx1ZXMgLS0KUEdfQ0FDSEVfTElORV9T SVpFIC8gc2l6ZW9mKHVpbnQzMikgLS0gY2FwcGVkIGF0IE5CdWZmZXJzIHNvIGEgY2xhaW0g Y2FuIG5ldmVyCndyYXAgdGhlIHBvb2wgbW9yZSB0aGFuIG9uY2UuICBCYXRjaGluZyBvbmx5 IGhlbHBzIHdoZW4gdGhlIGNvdW50ZXIncyBjYWNoZQpsaW5lIGFjdHVhbGx5IGJvdW5jZXMg YmV0d2VlbiBzb2NrZXRzLCBzbyBpdCBpcyBlbmFibGVkIG9ubHkgb24gbXVsdGktbm9kZQpO VU1BIGhhcmR3YXJlIChwZ19udW1hX2dldF9tYXhfbm9kZSgpID49IDEpOyBvbiBhIHNpbmds ZSBzb2NrZXQsIG9yIHdoZXJlCmxpYm51bWEgaXMgdW5hdmFpbGFibGUsIHRoZSBiYXRjaCBz aXplIHN0YXlzIDEgYW5kIHRoZSBjb2RlIHBhdGggaXMKYnl0ZS1pZGVudGljYWwgdG8gdGhl IHN0b2NrIGNsb2NrIHN3ZWVwLgoKV3JhcGFyb3VuZCBoYW5kbGluZyBpcyBhZGp1c3RlZDog d2l0aCBiYXRjaGluZywgc2V2ZXJhbCBiYWNrZW5kcyBjYW4gZWFjaCBzZWUKYSBmZXRjaC1h ZGQgcmV0dXJuIGEgdmFsdWUgcGFzdCBOQnVmZmVycyB3aXRoaW4gdGhlIHNhbWUgcGFzcy4g IEFueSBzdWNoCmJhY2tlbmQgdGFrZXMgYnVmZmVyX3N0cmF0ZWd5X2xvY2ssIHJlLXJlYWRz IHRoZSBjb3VudGVyLCBhbmQgaWYgaXQgaXMgc3RpbGwKb3V0IG9mIHJhbmdlIHdyYXBzIGl0 IHdpdGggYSBzaW5nbGUgQ0FTIGFuZCBpbmNyZW1lbnRzIGNvbXBsZXRlUGFzc2VzLgpTdHJh dGVneVN5bmNTdGFydCgpIGNvbnRpbnVlcyB0byBzZWUgYSBjb25zaXN0ZW50IChuZXh0Vmlj dGltQnVmZmVyLApjb21wbGV0ZVBhc3NlcykgcGFpci4KClRoaXMgaXMgdGhlIGJhdGNoZWQt Y2xvY2stc3dlZXAgaWRlYSBmcm9tIEppbSBNbG9kZ2Vuc2tpJ3MgcGdzcWwtaGFja2Vycwp0 aHJlYWQsIGFkYXB0ZWQgdG8gZGVyaXZlIHRoZSBiYXRjaCBzaXplIGZyb20gdGhlIHBsYXRm b3JtIGNhY2hlLWxpbmUgc2l6ZS4KCkNvLWF1dGhvcmVkLWJ5OiBKaW0gTWxvZGdlbnNraSA8 bWxvZGpAYW1hem9uLmNvbT4KLS0tCiBzcmMvYmFja2VuZC9zdG9yYWdlL2J1ZmZlci9mcmVl bGlzdC5jIHwgMTM0ICsrKysrKysrKysrKysrKysrLS0tLS0tLS0tCiAxIGZpbGUgY2hhbmdl ZCwgOTEgaW5zZXJ0aW9ucygrKSwgNDMgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvc3RvcmFnZS9idWZmZXIvZnJlZWxpc3QuYyBiL3NyYy9iYWNrZW5kL3N0b3Jh Z2UvYnVmZmVyL2ZyZWVsaXN0LmMKaW5kZXggZmRiNWJhZDc5MTAuLjkzZmM0ZGQ3NThiIDEw MDY0NAotLS0gYS9zcmMvYmFja2VuZC9zdG9yYWdlL2J1ZmZlci9mcmVlbGlzdC5jCisrKyBi L3NyYy9iYWNrZW5kL3N0b3JhZ2UvYnVmZmVyL2ZyZWVsaXN0LmMKQEAgLTIyLDYgKzIyLDcg QEAKICNpbmNsdWRlICJzdG9yYWdlL3Byb2MuaCIKICNpbmNsdWRlICJzdG9yYWdlL3NobWVt LmgiCiAjaW5jbHVkZSAic3RvcmFnZS9zdWJzeXN0ZW1zLmgiCisjaW5jbHVkZSAicG9ydC9w Z19udW1hLmgiCiAKICNkZWZpbmUgSU5UX0FDQ0VTU19PTkNFKHZhcikJKChpbnQpKCooKHZv bGF0aWxlIGludCAqKSYodmFyKSkpKQogCkBAIC0xMDAsNjggKzEwMSw5MiBAQCBzdGF0aWMg QnVmZmVyRGVzYyAqR2V0QnVmZmVyRnJvbVJpbmcoQnVmZmVyQWNjZXNzU3RyYXRlZ3kgc3Ry YXRlZ3ksCiBzdGF0aWMgdm9pZCBBZGRCdWZmZXJUb1JpbmcoQnVmZmVyQWNjZXNzU3RyYXRl Z3kgc3RyYXRlZ3ksCiAJCQkJCQkJQnVmZmVyRGVzYyAqYnVmKTsKIAorLyoKKyAqIFBlci1i YWNrZW5kIHN0YXRlIGZvciB0aGUgYmF0Y2hlZCBjbG9jayBzd2VlcC4gIEVhY2ggYmFja2Vu ZCBjbGFpbXMgYSBydW4KKyAqIG9mIGNvbnNlY3V0aXZlIGNsb2NrLWhhbmQgdmFsdWVzIHdp dGggYSBzaW5nbGUgYXRvbWljIGZldGNoLWFkZCBhbmQgdGhlbgorICogaXRlcmF0ZXMgdGhy b3VnaCB0aGVtIHByaXZhdGVseSwgc28gdGhlIGNvbnRlbmRlZCBuZXh0VmljdGltQnVmZmVy IGNhY2hlCisgKiBsaW5lIGlzIHRvdWNoZWQgcm91Z2hseSAxL2JhdGNoIGFzIG9mdGVuLiAg TXlCYXRjaFBvcyBpcyB0aGUgbmV4dCBoYW5kCisgKiB2YWx1ZSB0byBoYW5kIG91dDsgTXlC YXRjaEVuZCBpcyBvbmUgcGFzdCB0aGUgZW5kIG9mIHRoZSBjbGFpbWVkIHJ1bi4gIEJvdGgK KyAqIGFyZSBhYnNvbHV0ZSAobW9ub3RvbmljYWxseSBpbmNyZWFzaW5nKSBoYW5kIHZhbHVl czsgdGhlIGJ1ZmZlciBpZCBpcyB0aGUKKyAqIHZhbHVlIG1vZHVsbyBOQnVmZmVycy4KKyAq Lworc3RhdGljIHVpbnQzMiBNeUJhdGNoUG9zID0gMDsKK3N0YXRpYyB1aW50MzIgTXlCYXRj aEVuZCA9IDA7CisKKy8qCisgKiBOdW1iZXIgb2YgY2xvY2staGFuZCB2YWx1ZXMgYSBiYWNr ZW5kIGNsYWltcyBwZXIgYXRvbWljIGZldGNoLWFkZCwKKyAqIGNvbXB1dGVkIG9uY2UgYXQg c3RhcnR1cCAoc2VlIFN0cmF0ZWd5Q3RsU2htZW1Jbml0KS4gIFdoZW4gYmF0Y2hpbmcgaXMK KyAqIGVuYWJsZWQgaXQgaXMgb25lIGNhY2hlIGxpbmUncyB3b3J0aCBvZiBoYW5kIGFkdmFu Y2UsIHNvIGNvbmN1cnJlbnQKKyAqIGJhY2tlbmRzIHN3ZWVwIG5vbi1vdmVybGFwcGluZywg Y2FjaGUtbGluZS1zaXplZCBydW5zIG9mIHRoZSBwb29sOyB0aGUKKyAqIGdsb2JhbCBzd2Vl cCBvcmRlciBpcyBwcmVzZXJ2ZWQgKGVhY2ggYnVmZmVyIGlzIHN0aWxsIHZpc2l0ZWQgZXhh Y3RseSBvbmNlCisgKiBwZXIgcGFzcykuICBCYXRjaGluZyBpcyBlbmFibGVkIG9ubHkgb24g bXVsdGktbm9kZSBOVU1BIGhhcmR3YXJlOyBvdGhlcndpc2UKKyAqIHRoaXMgc3RheXMgMSBh bmQgdGhlIHN3ZWVwIGlzIGJ5dGUtaWRlbnRpY2FsIHRvIHRoZSBzdG9jayBjbG9jay4KKyAq Lworc3RhdGljIHVpbnQzMiBDbG9ja1N3ZWVwQmF0Y2hTaXplID0gMTsKKwogLyoKICAqIENs b2NrU3dlZXBUaWNrIC0gSGVscGVyIHJvdXRpbmUgZm9yIFN0cmF0ZWd5R2V0QnVmZmVyKCkK ICAqCi0gKiBNb3ZlIHRoZSBjbG9jayBoYW5kIG9uZSBidWZmZXIgYWhlYWQgb2YgaXRzIGN1 cnJlbnQgcG9zaXRpb24gYW5kIHJldHVybiB0aGUKLSAqIGlkIG9mIHRoZSBidWZmZXIgbm93 IHVuZGVyIHRoZSBoYW5kLgorICogUmV0dXJuIHRoZSBuZXh0IGJ1ZmZlciB0byBjb25zaWRl ciBmb3IgZXZpY3Rpb24uICBCYWNrZW5kcyBjbGFpbSBiYXRjaGVzIG9mCisgKiBjb25zZWN1 dGl2ZSBidWZmZXIgSURzIGZyb20gdGhlIHNoYXJlZCBjbG9jayBoYW5kLCB0aGVuIGl0ZXJh dGUgdGhyb3VnaAorICogdGhlbSBsb2NhbGx5IHdpdGhvdXQgZnVydGhlciBhdG9taWMgb3Bl cmF0aW9ucy4gIFRoaXMgcHJlc2VydmVzIHRoZSBnbG9iYWwKKyAqIHN3ZWVwIG9yZGVyIHdo aWxlIHJlZHVjaW5nIGNvbnRlbnRpb24gb24gdGhlIHNoYXJlZCBjb3VudGVyLgogICovCiBz dGF0aWMgaW5saW5lIHVpbnQzMgogQ2xvY2tTd2VlcFRpY2sodm9pZCkKIHsKIAl1aW50MzIJ CXZpY3RpbTsKIAotCS8qCi0JICogQXRvbWljYWxseSBtb3ZlIGhhbmQgYWhlYWQgb25lIGJ1 ZmZlciAtIGlmIHRoZXJlJ3Mgc2V2ZXJhbCBwcm9jZXNzZXMKLQkgKiBkb2luZyB0aGlzLCB0 aGlzIGNhbiBsZWFkIHRvIGJ1ZmZlcnMgYmVpbmcgcmV0dXJuZWQgc2xpZ2h0bHkgb3V0IG9m Ci0JICogYXBwYXJlbnQgb3JkZXIuCi0JICovCi0JdmljdGltID0KLQkJcGdfYXRvbWljX2Zl dGNoX2FkZF91MzIoJlN0cmF0ZWd5Q29udHJvbC0+bmV4dFZpY3RpbUJ1ZmZlciwgMSk7Ci0K LQlpZiAodmljdGltID49IE5CdWZmZXJzKQorCWlmIChNeUJhdGNoUG9zID49IE15QmF0Y2hF bmQpCiAJewotCQl1aW50MzIJCW9yaWdpbmFsVmljdGltID0gdmljdGltOwotCi0JCS8qIGFs d2F5cyB3cmFwIHdoYXQgd2UgbG9vayB1cCBpbiBCdWZmZXJEZXNjcmlwdG9ycyAqLwotCQl2 aWN0aW0gPSB2aWN0aW0gJSBOQnVmZmVyczsKLQogCQkvKgotCQkgKiBJZiB3ZSdyZSB0aGUg b25lIHRoYXQganVzdCBjYXVzZWQgYSB3cmFwYXJvdW5kLCBmb3JjZQotCQkgKiBjb21wbGV0 ZVBhc3NlcyB0byBiZSBpbmNyZW1lbnRlZCB3aGlsZSBob2xkaW5nIHRoZSBzcGlubG9jay4g V2UKLQkJICogbmVlZCB0aGUgc3BpbmxvY2sgc28gU3RyYXRlZ3lTeW5jU3RhcnQoKSBjYW4g cmV0dXJuIGEgY29uc2lzdGVudAotCQkgKiB2YWx1ZSBjb25zaXN0aW5nIG9mIG5leHRWaWN0 aW1CdWZmZXIgYW5kIGNvbXBsZXRlUGFzc2VzLgorCQkgKiBDbGFpbSBhIGZyZXNoIGJhdGNo IGZyb20gdGhlIHNoYXJlZCBjbG9jayBoYW5kLiAgVGhpcyBpcyB0aGUgb25seQorCQkgKiBh dG9taWMgb3BlcmF0aW9uIHBlciBiYXRjaCwgcmVkdWNpbmcgY29udGVudGlvbiBieSB0aGUg YmF0Y2ggc2l6ZS4KIAkJICovCi0JCWlmICh2aWN0aW0gPT0gMCkKLQkJewotCQkJdWludDMy CQlleHBlY3RlZDsKLQkJCXVpbnQzMgkJd3JhcHBlZDsKLQkJCWJvb2wJCXN1Y2Nlc3MgPSBm YWxzZTsKKwkJdWludDMyCQlzdGFydDsKKwkJdWludDMyCQliYXRjaF9zaXplID0gQ2xvY2tT d2VlcEJhdGNoU2l6ZTsKIAotCQkJZXhwZWN0ZWQgPSBvcmlnaW5hbFZpY3RpbSArIDE7CisJ CXN0YXJ0ID0gcGdfYXRvbWljX2ZldGNoX2FkZF91MzIoJlN0cmF0ZWd5Q29udHJvbC0+bmV4 dFZpY3RpbUJ1ZmZlciwKKwkJCQkJCQkJCQliYXRjaF9zaXplKTsKIAotCQkJd2hpbGUgKCFz dWNjZXNzKQotCQkJewotCQkJCS8qCi0JCQkJICogQWNxdWlyZSB0aGUgc3BpbmxvY2sgd2hp bGUgaW5jcmVhc2luZyBjb21wbGV0ZVBhc3Nlcy4gVGhhdAotCQkJCSAqIGFsbG93cyBvdGhl ciByZWFkZXJzIHRvIHJlYWQgbmV4dFZpY3RpbUJ1ZmZlciBhbmQKLQkJCQkgKiBjb21wbGV0 ZVBhc3NlcyBpbiBhIGNvbnNpc3RlbnQgbWFubmVyIHdoaWNoIGlzIHJlcXVpcmVkIGZvcgot CQkJCSAqIFN0cmF0ZWd5U3luY1N0YXJ0KCkuICBJbiB0aGVvcnkgZGVsYXlpbmcgdGhlIGlu Y3JlbWVudAotCQkJCSAqIGNvdWxkIGxlYWQgdG8gYW4gb3ZlcmZsb3cgb2YgbmV4dFZpY3Rp bUJ1ZmZlcnMsIGJ1dCB0aGF0J3MKLQkJCQkgKiBoaWdobHkgdW5saWtlbHkgYW5kIHdvdWxk bid0IGJlIHBhcnRpY3VsYXJseSBoYXJtZnVsLgotCQkJCSAqLwotCQkJCVNwaW5Mb2NrQWNx dWlyZSgmU3RyYXRlZ3lDb250cm9sLT5idWZmZXJfc3RyYXRlZ3lfbG9jayk7CisJCWlmIChz dGFydCA+PSAodWludDMyKSBOQnVmZmVycykKKwkJeworCQkJc3RhcnQgPSBzdGFydCAlIE5C dWZmZXJzOwogCi0JCQkJd3JhcHBlZCA9IGV4cGVjdGVkICUgTkJ1ZmZlcnM7CisJCQkvKgor CQkJICogVGhlIGNvdW50ZXIgaGFzIGdyb3duIHBhc3QgTkJ1ZmZlcnM7IHRyeSB0byB3cmFw IGl0IGJhY2suICBXZQorCQkJICogbXVzdCBob2xkIHRoZSBzcGlubG9jayBzbyBTdHJhdGVn eVN5bmNTdGFydCgpIGNhbiByZWFkCisJCQkgKiBuZXh0VmljdGltQnVmZmVyIGFuZCBjb21w bGV0ZVBhc3NlcyBjb25zaXN0ZW50bHkuCisJCQkgKgorCQkJICogV2l0aCBiYXRjaGluZywg bXVsdGlwbGUgYmFja2VuZHMgbWF5IGVhY2ggbGFuZCBhIGZldGNoLWFkZAorCQkJICogdGhh dCByZXR1cm5zIGEgdmFsdWUgcGFzdCBOQnVmZmVycyBpbiB0aGUgc2FtZSBwYXNzLiAgQWZ0 ZXIKKwkJCSAqIGFjcXVpcmluZyB0aGUgc3BpbmxvY2sgd2UgcmUtcmVhZCB0aGUgY291bnRl cjogaWYgYW5vdGhlcgorCQkJICogYmFja2VuZCBhbHJlYWR5IHdyYXBwZWQgaXQgYmVsb3cg TkJ1ZmZlcnMgd2UgYXJlIGRvbmUuCisJCQkgKi8KKwkJCVNwaW5Mb2NrQWNxdWlyZSgmU3Ry YXRlZ3lDb250cm9sLT5idWZmZXJfc3RyYXRlZ3lfbG9jayk7CisJCQl7CisJCQkJdWludDMy CQljdXJyZW50OworCQkJCXVpbnQzMgkJd3JhcHBlZDsKIAotCQkJCXN1Y2Nlc3MgPSBwZ19h dG9taWNfY29tcGFyZV9leGNoYW5nZV91MzIoJlN0cmF0ZWd5Q29udHJvbC0+bmV4dFZpY3Rp bUJ1ZmZlciwKLQkJCQkJCQkJCQkJCQkJICZleHBlY3RlZCwgd3JhcHBlZCk7Ci0JCQkJaWYg KHN1Y2Nlc3MpCi0JCQkJCVN0cmF0ZWd5Q29udHJvbC0+Y29tcGxldGVQYXNzZXMrKzsKLQkJ CQlTcGluTG9ja1JlbGVhc2UoJlN0cmF0ZWd5Q29udHJvbC0+YnVmZmVyX3N0cmF0ZWd5X2xv Y2spOworCQkJCWN1cnJlbnQgPSBwZ19hdG9taWNfcmVhZF91MzIoJlN0cmF0ZWd5Q29udHJv bC0+bmV4dFZpY3RpbUJ1ZmZlcik7CisJCQkJaWYgKGN1cnJlbnQgPj0gKHVpbnQzMikgTkJ1 ZmZlcnMpCisJCQkJeworCQkJCQl3cmFwcGVkID0gY3VycmVudCAlIE5CdWZmZXJzOworCQkJ CQlpZiAocGdfYXRvbWljX2NvbXBhcmVfZXhjaGFuZ2VfdTMyKCZTdHJhdGVneUNvbnRyb2wt Pm5leHRWaWN0aW1CdWZmZXIsCisJCQkJCQkJCQkJCQkJICAgJmN1cnJlbnQsIHdyYXBwZWQp KQorCQkJCQkJU3RyYXRlZ3lDb250cm9sLT5jb21wbGV0ZVBhc3NlcysrOworCQkJCX0KIAkJ CX0KKwkJCVNwaW5Mb2NrUmVsZWFzZSgmU3RyYXRlZ3lDb250cm9sLT5idWZmZXJfc3RyYXRl Z3lfbG9jayk7CiAJCX0KKworCQlNeUJhdGNoUG9zID0gc3RhcnQ7CisJCU15QmF0Y2hFbmQg PSBzdGFydCArIGJhdGNoX3NpemU7CiAJfQorCisJdmljdGltID0gTXlCYXRjaFBvcyAlIE5C dWZmZXJzOworCU15QmF0Y2hQb3MrKzsKKwogCXJldHVybiB2aWN0aW07CiB9CiAKQEAgLTQw OCw2ICs0MzMsMjkgQEAgU3RyYXRlZ3lDdGxTaG1lbUluaXQodm9pZCAqYXJnKQogCiAJLyog Tm8gcGVuZGluZyBub3RpZmljYXRpb24gKi8KIAlTdHJhdGVneUNvbnRyb2wtPmJnd3Byb2Nu byA9IC0xOworCisJLyoKKwkgKiBEZWNpZGUgd2hldGhlciB0byBiYXRjaCB0aGUgY2xvY2sg c3dlZXAuCisJICoKKwkgKiBCYXRjaGluZyBjbGFpbXMgYSBydW4gb2YgY29uc2VjdXRpdmUg YnVmZmVyIElEcyBwZXIgYXRvbWljIGZldGNoLWFkZCBzbworCSAqIGNvbmN1cnJlbnQgYmFj a2VuZHMgdG91Y2ggdGhlIHNoYXJlZCBuZXh0VmljdGltQnVmZmVyIGNhY2hlIGxpbmUgfjEv YmF0Y2gKKwkgKiBhcyBvZnRlbiAtLSBhIHdpbiBvbmx5IHdoZW4gdGhhdCBsaW5lIGFjdHVh bGx5IGJvdW5jZXMgYWNyb3NzIHNvY2tldHMsCisJICogaS5lLiBvbiBtdWx0aS1ub2RlIE5V TUEgaGFyZHdhcmUuICBPbiBhIHNpbmdsZSBzb2NrZXQgdGhlIGF0b21pYyBpcworCSAqIGFs cmVhZHkgbm9kZS1sb2NhbCBhbmQgYmF0Y2hpbmcgd291bGQgb25seSBtYWtlIGJhY2tlbmRz IHNraXAgYWhlYWQgZm9yCisJICogbm8gYmVuZWZpdCwgc28gd2UgZmFsbCBiYWNrIHRvIGJh dGNoIHNpemUgMSB0aGVyZSAoYnl0ZS1pZGVudGljYWwgdG8gdGhlCisJICogc3RvY2sgb25l LWJ1ZmZlci1hdC1hLXRpbWUgY2xvY2sgc3dlZXApLgorCSAqCisJICogQmF0Y2ggKD4gMSkg b25seSB3aGVuIGxpYm51bWEgcmVwb3J0cyBtb3JlIHRoYW4gb25lIG5vZGUKKwkgKiAocGdf bnVtYV9nZXRfbWF4X25vZGUoKSA+PSAxKTsgcGdfbnVtYV9pbml0KCkgcmV0dXJucyAtMSB3 aGVuIE5VTUEgaXMKKwkgKiB1bmF2YWlsYWJsZS4gIChCZW5jaG1hcmtpbmcgc2hvd2VkIHRo ZSB3aW4gaG9sZHMgd2l0aCBvciB3aXRob3V0IGh1Z2UKKwkgKiBwYWdlcywgc28gaHVnZS1w YWdlIGF2YWlsYWJpbGl0eSBpcyBpbnRlbnRpb25hbGx5IG5vdCBwYXJ0IG9mIHRoZSBnYXRl LikKKwkgKi8KKwlpZiAocGdfbnVtYV9pbml0KCkgIT0gLTEgJiYKKwkJcGdfbnVtYV9nZXRf bWF4X25vZGUoKSA+PSAxKQorCQlDbG9ja1N3ZWVwQmF0Y2hTaXplID0gTWluKFBHX0NBQ0hF X0xJTkVfU0laRSAvICh1aW50MzIpIHNpemVvZih1aW50MzIpLAorCQkJCQkJCQkgICh1aW50 MzIpIE5CdWZmZXJzKTsKKwllbHNlCisJCUNsb2NrU3dlZXBCYXRjaFNpemUgPSAxOwogfQog CiAKLS0gCjIuNTEuMgoK --eb6ebdb126a89898ab85d3de614c44896735dbb9 Content-Disposition: attachment; filename*0="v5-0002-Replace-the-usage_count-clock-sweep-with-a-coolin.pat"; filename*1="ch" Content-Type: text/x-patch; name="=?UTF-8?Q?v5-0002-Replace-the-usage=5Fcount-clock-sweep-with-a-coolin.pa?= =?UTF-8?Q?tch?=" Content-Transfer-Encoding: base64 RnJvbSBlODQyOWY1MTYxOGU4OTMyZTJiODkxMjgyMmRlYzg5ZDczZTQ2ZWQyIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBHcmVnIEJ1cmQgPGdyZWdAYnVyZC5tZT4KRGF0ZTog TW9uLCA2IEp1bCAyMDI2IDE5OjIyOjQ1IC0wNDAwClN1YmplY3Q6IFtQQVRDSCB2NSAyLzNd IFJlcGxhY2UgdGhlIHVzYWdlX2NvdW50IGNsb2NrIHN3ZWVwIHdpdGggYQogY29vbGluZy1z dGFnZSBldmljdG9yCgpSZXBsYWNlIHRoZSAwLi41IHVzYWdlX2NvdW50IGJ1ZmZlci1yZXBs YWNlbWVudCBwb2xpY3kgd2l0aCBhIGNvb2xpbmctc3RhZ2UKY2xvY2sgKHRoZSBMZWFuU3Rv cmUgLyAyUS1BMSBtb2RlbCk6IGEgYnVmZmVyIGlzIHNpbXBseSBIT1QgKHJlY2VudGx5IHVz ZWQpCm9yIENPT0wgKGFuIGV2aWN0aW9uIGNhbmRpZGF0ZSksIHdpdGggInBpbm5lZCIgYmVp bmcgdGhlIGV4aXN0aW5nIHJlZmNvdW50LgpUaGVyZSBpcyBubyBwZXItYnVmZmVyIGFjY2Vz cyBjb3VudGVyLgoKICAtIEEgZGVtYW5kLWxvYWRlZCBwYWdlIGlzIGFkbWl0dGVkIENPT0wg KHByb2JhdGlvbmFyeSksIG5vdCBIT1QuICBBIHNlY29uZAogICAgYWNjZXNzIHZpYSBQaW5C dWZmZXIgcHJvbW90ZXMgaXQgQ09PTCAtPiBIT1QgKHRoZSByZXNjdWUpLiAgU28gYSBwYWdl CiAgICB0b3VjaGVkIG9uY2UgLS0gYSBzZXF1ZW50aWFsIHNjYW4gLS0gZmlsbHMgYW5kIGRy YWlucyB0aGUgQ09PTCBzdGFnZSBhbmQKICAgIGlzIGV2aWN0ZWQgZnJvbSBpdCB3aXRob3V0 IGV2ZXIgZGlzcGxhY2luZyB0aGUgSE9UIHdvcmtpbmcgc2V0LiAgU2NhbgogICAgcmVzaXN0 YW5jZSBpcyBpbnRyaW5zaWMgdG8gdGhlIHJlcGxhY2VtZW50IGFsZ29yaXRobSwgd2hpY2gg aXMgd2hhdCBsZXRzIGEKICAgIGxhdGVyIGNvbW1pdCByZW1vdmUgdGhlIEJ1ZmZlckFjY2Vz c1N0cmF0ZWd5IHJpbmcgYnVmZmVycyBlbnRpcmVseS4KCiAgLSBUaGUgZm9yZWdyb3VuZCBz d2VlcCBpbiBTdHJhdGVneUdldEJ1ZmZlcigpIHJlY2xhaW1zIGFuIGFscmVhZHktQ09PTCwK ICAgIHVucGlubmVkIGJ1ZmZlciwgcGlubmluZyBpdCB3aXRoIGEgQ0FTIHNvIGEgcmFjaW5n IFBpbkJ1ZmZlciBhbHdheXMgd2lucy4KICAgIFByb21vdGlvbiAoQ09PTCAtPiBIT1QpIGFu ZCBkZW1vdGlvbiAoSE9UIC0+IENPT0wpIGFyZSBzaW5nbGUtYml0CiAgICB0cmFuc2l0aW9u czsgb25seSB0aGUgZXZpY3Rpb24gY2xhaW0gaXMgYSBDQVMuCgogIC0gVGhlIGJhY2tncm91 bmQgd3JpdGVyIG1haW50YWlucyB0aGUgc3VwcGx5IG9mIENPT0wgdmljdGltcy4gIEFzIGl0 cyBMUlUKICAgIHNjYW4gcnVucyBhaGVhZCBvZiB0aGUgY2xvY2sgaGFuZCBpdCBkZW1vdGVz IEhPVCBidWZmZXJzIHRvIENPT0wsIHNvIHRoZQogICAgZm9yZWdyb3VuZCBmaW5kcyBhIHZp Y3RpbSBpbiBhIHNpbmdsZSBwYXNzIHJhdGhlciB0aGFuIGhhdmluZyB0byBjb29sCiAgICBi dWZmZXJzIGl0c2VsZi4gIFRoZSBkZW1vdGlvbiBpcyBkZW1hbmQtZHJpdmVuIC0tIGJvdW5k ZWQgYnkgdGhlIHByZWRpY3RlZAogICAgYWxsb2NhdGlvbiBmb3IgdGhlIG5leHQgY3ljbGUg LS0gc28gaXQgc3RhZ2VzIGp1c3QgZW5vdWdoIENPT0wgYnVmZmVycwogICAgd2l0aG91dCBj b29saW5nIHRoZSB3aG9sZSBwb29sLCBhbmQgaXQgaXMgZG9uZSB1bmRlciB0aGUgYnVmZmVy IGhlYWRlcgogICAgbG9jayB0aGUgc2NhbiBhbHJlYWR5IGhvbGRzLiAgQSBzaW5nbGUgc2Vj b25kLWNoYW5jZSByZWZlcmVuY2UgYml0CiAgICAoc2V0IGJ5IFBpbkJ1ZmZlciwgY2xlYXJl ZCBvbiB0aGUgYmd3cml0ZXIncyBmaXJzdCBwYXNzIG92ZXIgYSBIT1QgYnVmZmVyKQogICAg c3BhcmVzIGEgcmVjZW50bHktYWNjZXNzZWQgYnVmZmVyIG9uZSBjb29saW5nIHBhc3MsIGtl ZXBpbmcgdGhlIGdlbnVpbmVseQogICAgaG90IHNldCBvdXQgb2YgdGhlIENPT0wgc3RhZ2Ug dW5kZXIgc2NhbiBwcmVzc3VyZS4gIEJnQnVmZmVyU3luYyBhbHNvCiAgICB0cmFja3MgdGhl IHJldXNhYmxlLWJ1ZmZlciBkZW5zaXR5IGl0IGRpcmVjdGx5IG9ic2VydmVzIG9uIGEgc2hv cnRlcgogICAgc21vb3RoaW5nIHdpbmRvdywgc28gYSBidXJzdCBvZiBwcm9iYXRpb25hcnkv c2NhbiBDT09MIHBhZ2VzIGlzIGZvbGxvd2VkCiAgICBwcm9tcHRseSByYXRoZXIgdGhhbiBh dmVyYWdlZCBhd2F5LgoKVGhlIDQtYml0IHVzYWdlX2NvdW50IGZpZWxkIGlzIHJlaW50ZXJw cmV0ZWQgaW4gcGxhY2U6IGJpdCAwIGlzIHRoZSBIT1QvQ09PTApzdGF0ZSAoQlVGX0NPT0xT VEFURV9PTkUpLCBiaXQgMSB0aGUgcmVmZXJlbmNlIGJpdCAoQlVGX1JFRkJJVCkuICBUaGUg NjQtYml0CmJ1ZmZlci1zdGF0ZSBsYXlvdXQgLS0gcmVmY291bnQsIGZsYWcgYW5kIGxvY2sg b2Zmc2V0cyBhbmQgdGhlaXIgU3RhdGljQXNzZXJ0cwotLSBpcyB1bmNoYW5nZWQ7IG9ubHkg dGhlIG1lYW5pbmcgb2YgdGhlIGZpZWxkIGFuZCB0aGUgaW5zdHJ1Y3Rpb25zIHRoYXQgdG91 Y2gKaXQgY2hhbmdlLiAgQSBTdGF0aWNBc3NlcnQgcmVxdWlyZXMgdGhlIGZpZWxkIHRvIGJl IGF0IGxlYXN0IDIgYml0cyB3aWRlIHNvIGEKZnV0dXJlIHdpZHRoIGNoYW5nZSBjYW5ub3Qg cHVzaCB0aGUgcmVmZXJlbmNlIGJpdCBpbnRvIHRoZSBmbGFnIGJpdHMuCkJNX01BWF9VU0FH RV9DT1VOVCBiZWNvbWVzIEJVRl9DT09MU1RBVEVfSE9UICgxKSwgc28gdGhlIHBpbiBmYXN0 IHBhdGgKc2F0dXJhdGVzIGF0IEhPVC4gIExvY2FsICh0ZW1wLXRhYmxlKSBidWZmZXJzIGdl dCB0aGUgc2FtZSB0d28tc3RhdGUKdHJlYXRtZW50OyBiZWluZyBzaW5nbGUtYmFja2VuZCB0 aGV5IG5lZWQgbm8gYmFja2dyb3VuZCBjb29sZXIuCgpCZWNhdXNlIHRoZSByZWZlcmVuY2Ug Yml0IHNoYXJlcyB0aGUgZmllbGQsIHRoZSBmdWxsIDQtYml0IHZhbHVlIGNhbiBiZSAwLi4z OwpyZWFkZXJzIHRoYXQgbWVhbiAidGhlIGNvb2xpbmcgc3RhdGUiIG11c3QgdXNlIEJVRl9T VEFURV9HRVRfQ09PTFNUQVRFKCksIHdoaWNoCm1hc2tzIHRvIGJpdCAwIGFuZCByZXR1cm5z IG9ubHkgMCAoQ09PTCkgb3IgMSAoSE9UKSwgbmV2ZXIgdGhlIHJhdyBmaWVsZC4KY29udHJp Yi9wZ19idWZmZXJjYWNoZSBpcyB1cGRhdGVkIGFjY29yZGluZ2x5OiBpdHMgdXNhZ2Vjb3Vu dCBjb2x1bW4gYW5kIHRoZQpwZ19idWZmZXJjYWNoZV9zdW1tYXJ5IGF2ZXJhZ2UgcmVwb3J0 IHRoZSBjb29saW5nIHN0YXRlICgwID0gQ09PTCwgMSA9IEhPVCksCmFuZCBwZ19idWZmZXJj YWNoZV91c2FnZV9jb3VudHMoKSBidWNrZXRzIG9uIGl0LiAgVXNpbmcgdGhlIHJhdyA0LWJp dCBnZXR0ZXIKdGhlcmUgd291bGQgaW5kZXggaXRzIEJNX01BWF9VU0FHRV9DT1VOVCsxID0g Mi1lbGVtZW50IGFycmF5cyB3aXRoIHZhbHVlcyB1cAp0byAzIGFuZCBvdmVycnVuIHRoZSBz dGFjazsgbWFza2luZyB0byB0aGUgY29vbGluZyBiaXQga2VlcHMgdGhlIGluZGV4IGluCnJh bmdlLiAgVGhlIHJlZmVyZW5jZSBiaXQgaXMgZGVsaWJlcmF0ZWx5IG5vdCBleHBvc2VkIGFz IHVzYWdlY291bnQuCgpEZXBlbmRzIG9uIHRoZSBiYXRjaGVkIGNsb2NrIHN3ZWVwIGZyb20g dGhlIHByZXZpb3VzIGNvbW1pdC4KLS0tCiBjb250cmliL3BnX2J1ZmZlcmNhY2hlL3BnX2J1 ZmZlcmNhY2hlX3BhZ2VzLmMgfCAgIDYgKy0KIHNyYy9iYWNrZW5kL3N0b3JhZ2UvYnVmZmVy L2J1Zm1nci5jICAgICAgICAgICB8IDEwMyArKysrKysrKysrLS0tLQogc3JjL2JhY2tlbmQv c3RvcmFnZS9idWZmZXIvZnJlZWxpc3QuYyAgICAgICAgIHwgMTI4ICsrKysrKysrKysrKy0t LS0tLQogc3JjL2JhY2tlbmQvc3RvcmFnZS9idWZmZXIvbG9jYWxidWYuYyAgICAgICAgIHwg IDEzICstCiBzcmMvaW5jbHVkZS9zdG9yYWdlL2J1Zl9pbnRlcm5hbHMuaCAgICAgICAgICAg fCAgNjMgKysrKysrKy0tCiA1IGZpbGVzIGNoYW5nZWQsIDIyOSBpbnNlcnRpb25zKCspLCA4 NCBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9jb250cmliL3BnX2J1ZmZlcmNhY2hlL3Bn X2J1ZmZlcmNhY2hlX3BhZ2VzLmMgYi9jb250cmliL3BnX2J1ZmZlcmNhY2hlL3BnX2J1ZmZl cmNhY2hlX3BhZ2VzLmMKaW5kZXggNTEwNDU1OTk4YWEuLmI5NGU2ZjZmZGE4IDEwMDY0NAot LS0gYS9jb250cmliL3BnX2J1ZmZlcmNhY2hlL3BnX2J1ZmZlcmNhY2hlX3BhZ2VzLmMKKysr IGIvY29udHJpYi9wZ19idWZmZXJjYWNoZS9wZ19idWZmZXJjYWNoZV9wYWdlcy5jCkBAIC0x NjEsNyArMTYxLDcgQEAgcGdfYnVmZmVyY2FjaGVfcGFnZXMoUEdfRlVOQ1RJT05fQVJHUykK IAkJcmVsZGF0YWJhc2UgPSBidWZIZHItPnRhZy5kYk9pZDsKIAkJZm9ya251bSA9IEJ1ZlRh Z0dldEZvcmtOdW0oJmJ1Zkhkci0+dGFnKTsKIAkJYmxvY2tudW0gPSBidWZIZHItPnRhZy5i bG9ja051bTsKLQkJdXNhZ2Vjb3VudCA9IEJVRl9TVEFURV9HRVRfVVNBR0VDT1VOVChidWZf c3RhdGUpOworCQl1c2FnZWNvdW50ID0gQlVGX1NUQVRFX0dFVF9DT09MU1RBVEUoYnVmX3N0 YXRlKTsKIAkJcGlubmluZ19iYWNrZW5kcyA9IEJVRl9TVEFURV9HRVRfUkVGQ09VTlQoYnVm X3N0YXRlKTsKIAogCQlpZiAoYnVmX3N0YXRlICYgQk1fRElSVFkpCkBAIC02MDUsNyArNjA1 LDcgQEAgcGdfYnVmZmVyY2FjaGVfc3VtbWFyeShQR19GVU5DVElPTl9BUkdTKQogCQlpZiAo YnVmX3N0YXRlICYgQk1fVkFMSUQpCiAJCXsKIAkJCWJ1ZmZlcnNfdXNlZCsrOwotCQkJdXNh Z2Vjb3VudF90b3RhbCArPSBCVUZfU1RBVEVfR0VUX1VTQUdFQ09VTlQoYnVmX3N0YXRlKTsK KwkJCXVzYWdlY291bnRfdG90YWwgKz0gQlVGX1NUQVRFX0dFVF9DT09MU1RBVEUoYnVmX3N0 YXRlKTsKIAogCQkJaWYgKGJ1Zl9zdGF0ZSAmIEJNX0RJUlRZKQogCQkJCWJ1ZmZlcnNfZGly dHkrKzsKQEAgLTY1NSw3ICs2NTUsNyBAQCBwZ19idWZmZXJjYWNoZV91c2FnZV9jb3VudHMo UEdfRlVOQ1RJT05fQVJHUykKIAogCQlDSEVDS19GT1JfSU5URVJSVVBUUygpOwogCi0JCXVz YWdlX2NvdW50ID0gQlVGX1NUQVRFX0dFVF9VU0FHRUNPVU5UKGJ1Zl9zdGF0ZSk7CisJCXVz YWdlX2NvdW50ID0gQlVGX1NUQVRFX0dFVF9DT09MU1RBVEUoYnVmX3N0YXRlKTsKIAkJdXNh Z2VfY291bnRzW3VzYWdlX2NvdW50XSsrOwogCiAJCWlmIChidWZfc3RhdGUgJiBCTV9ESVJU WSkKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYnVmZmVyL2J1Zm1nci5jIGIv c3JjL2JhY2tlbmQvc3RvcmFnZS9idWZmZXIvYnVmbWdyLmMKaW5kZXggOWFiMjgyYTc2ZDEu LjExNzNiNTBiN2MxIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9zdG9yYWdlL2J1ZmZlci9i dWZtZ3IuYworKysgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2J1ZmZlci9idWZtZ3IuYwpAQCAt ODMsNiArODMsNyBAQAogLyogQml0cyBpbiBTeW5jT25lQnVmZmVyJ3MgcmV0dXJuIHZhbHVl ICovCiAjZGVmaW5lIEJVRl9XUklUVEVOCQkJCTB4MDEKICNkZWZpbmUgQlVGX1JFVVNBQkxF CQkJMHgwMgorI2RlZmluZSBCVUZfQ09PTEVECQkJCTB4MDQKIAogI2RlZmluZSBSRUxTX0JT RUFSQ0hfVEhSRVNIT0xECQkyMAogCkBAIC02MzQsNyArNjM1LDcgQEAgc3RhdGljIHZvaWQg UGluQnVmZmVyX0xvY2tlZChCdWZmZXJEZXNjICpidWYpOwogc3RhdGljIHZvaWQgVW5waW5C dWZmZXIoQnVmZmVyRGVzYyAqYnVmKTsKIHN0YXRpYyB2b2lkIFVucGluQnVmZmVyTm9Pd25l cihCdWZmZXJEZXNjICpidWYpOwogc3RhdGljIHZvaWQgQnVmZmVyU3luYyhpbnQgZmxhZ3Mp Owotc3RhdGljIGludAlTeW5jT25lQnVmZmVyKGludCBidWZfaWQsIGJvb2wgc2tpcF9yZWNl bnRseV91c2VkLAorc3RhdGljIGludAlTeW5jT25lQnVmZmVyKGludCBidWZfaWQsIGJvb2wg c2tpcF9yZWNlbnRseV91c2VkLCBib29sIGNvb2xfaWZfaG90LAogCQkJCQkJICBXcml0ZWJh Y2tDb250ZXh0ICp3Yl9jb250ZXh0KTsKIHN0YXRpYyB2b2lkIFdhaXRJTyhCdWZmZXJEZXNj ICpidWYpOwogc3RhdGljIHZvaWQgQWJvcnRCdWZmZXJJTyhCdWZmZXIgYnVmZmVyKTsKQEAg LTIzMzMsNyArMjMzNCwxMCBAQCBCdWZmZXJBbGxvYyhTTWdyUmVsYXRpb24gc21nciwgY2hh ciByZWxwZXJzaXN0ZW5jZSwgRm9ya051bWJlciBmb3JrTnVtLAogCSAqIGNoZWNrcG9pbnRz LCBleGNlcHQgZm9yIHRoZWlyICJpbml0IiBmb3Jrcywgd2hpY2ggbmVlZCB0byBiZSB0cmVh dGVkCiAJICoganVzdCBsaWtlIHBlcm1hbmVudCByZWxhdGlvbnMuCiAJICovCi0Jc2V0X2Jp dHMgfD0gQk1fVEFHX1ZBTElEIHwgQlVGX1VTQUdFQ09VTlRfT05FOworCXNldF9iaXRzIHw9 IEJNX1RBR19WQUxJRDsKKwkvKiBBZG1pdCB0aGUgbmV3bHkgbG9hZGVkIHBhZ2UgQ09PTCAo cHJvYmF0aW9uKTsgYSBzZWNvbmQgYWNjZXNzIHZpYQorCSAqIFBpbkJ1ZmZlciBwcm9tb3Rl cyBpdCB0byBIT1QuICBUaGlzIGlzIHdoYXQgbWFrZXMgYSBvbmUtdG91Y2ggc2NhbgorCSAq IHNlbGYtZXZpY3RpbmcgLS0gc2VlIHRoZSBjb29saW5nLXN0YXRlIG5vdGVzIGluIGJ1Zl9p bnRlcm5hbHMuaC4gKi8KIAlpZiAocmVscGVyc2lzdGVuY2UgPT0gUkVMUEVSU0lTVEVOQ0Vf UEVSTUFORU5UIHx8IGZvcmtOdW0gPT0gSU5JVF9GT1JLTlVNKQogCQlzZXRfYml0cyB8PSBC TV9QRVJNQU5FTlQ7CiAKQEAgLTMwMDIsNyArMzAwNiw5IEBAIEV4dGVuZEJ1ZmZlcmVkUmVs U2hhcmVkKEJ1ZmZlck1hbmFnZXJSZWxhdGlvbiBibXIsCiAKIAkJCXZpY3RpbV9idWZfaGRy LT50YWcgPSB0YWc7CiAKLQkJCXNldF9iaXRzIHw9IEJNX1RBR19WQUxJRCB8IEJVRl9VU0FH RUNPVU5UX09ORTsKKwkJCXNldF9iaXRzIHw9IEJNX1RBR19WQUxJRDsKKwkJCS8qIEFkbWl0 IENPT0wgKHByb2JhdGlvbik7IHNlZSB0aGUgY29tbWVudCBhdCB0aGUgb3RoZXIgYWRtaXNz aW9uCisJCQkgKiBzaXRlIGFuZCB0aGUgY29vbGluZy1zdGF0ZSBub3RlcyBpbiBidWZfaW50 ZXJuYWxzLmguICovCiAJCQlpZiAoYm1yLnJlbHBlcnNpc3RlbmNlID09IFJFTFBFUlNJU1RF TkNFX1BFUk1BTkVOVCB8fCBmb3JrID09IElOSVRfRk9SS05VTSkKIAkJCQlzZXRfYml0cyB8 PSBCTV9QRVJNQU5FTlQ7CiAKQEAgLTMzMzIsMjEgKzMzMzgsMTcgQEAgUGluQnVmZmVyKEJ1 ZmZlckRlc2MgKmJ1ZiwgQnVmZmVyQWNjZXNzU3RyYXRlZ3kgc3RyYXRlZ3ksCiAJCQkvKiBp bmNyZWFzZSByZWZjb3VudCAqLwogCQkJYnVmX3N0YXRlICs9IEJVRl9SRUZDT1VOVF9PTkU7 CiAKLQkJCWlmIChzdHJhdGVneSA9PSBOVUxMKQotCQkJewotCQkJCS8qIERlZmF1bHQgY2Fz ZTogaW5jcmVhc2UgdXNhZ2Vjb3VudCB1bmxlc3MgYWxyZWFkeSBtYXguICovCi0JCQkJaWYg KEJVRl9TVEFURV9HRVRfVVNBR0VDT1VOVChidWZfc3RhdGUpIDwgQk1fTUFYX1VTQUdFX0NP VU5UKQotCQkJCQlidWZfc3RhdGUgKz0gQlVGX1VTQUdFQ09VTlRfT05FOwotCQkJfQotCQkJ ZWxzZQotCQkJewotCQkJCS8qCi0JCQkJICogUmluZyBidWZmZXJzIHNob3VsZG4ndCBldmlj dCBvdGhlcnMgZnJvbSBwb29sLiAgVGh1cyB3ZQotCQkJCSAqIGRvbid0IG1ha2UgdXNhZ2Vj b3VudCBtb3JlIHRoYW4gMS4KLQkJCQkgKi8KLQkJCQlpZiAoQlVGX1NUQVRFX0dFVF9VU0FH RUNPVU5UKGJ1Zl9zdGF0ZSkgPT0gMCkKLQkJCQkJYnVmX3N0YXRlICs9IEJVRl9VU0FHRUNP VU5UX09ORTsKLQkJCX0KKwkJCS8qCisJCQkgKiBBY2Nlc3NpbmcgYSByZXNpZGVudCBidWZm ZXIgcHJvbW90ZXMgaXQgdG8gSE9UICh0aGUgMlEgcmVzY3VlKToKKwkJCSAqIGEgcGFnZSBs b2FkZWQgQ09PTCBvbiBwcm9iYXRpb24gYmVjb21lcyBwYXJ0IG9mIHRoZSBob3Qgd29ya2lu ZworCQkJICogc2V0IG9uIGl0cyBzZWNvbmQgdG91Y2guICBCTV9NQVhfVVNBR0VfQ09VTlQg aXMKKwkJCSAqIEJVRl9DT09MU1RBVEVfSE9UICgxKSwgc28gdGhpcyBzYXR1cmF0ZXMgYXQg SE9UIGFuZCBuZXZlcgorCQkJICogb3ZlcmZsb3dzIHRoZSBmaWVsZC4gIFdlIGFsc28gc2V0 IHRoZSBzZWNvbmQtY2hhbmNlIHJlZiBiaXQgc28KKwkJCSAqIHRoZSBiZ3dyaXRlcidzIG5l eHQgY29vbGluZyBwYXNzIHNwYXJlcyB0aGlzIHJlY2VudGx5LXVzZWQgYnVmZmVyLgorCQkJ ICovCisJCQlpZiAoQlVGX1NUQVRFX0dFVF9DT09MU1RBVEUoYnVmX3N0YXRlKSA8IEJVRl9D T09MU1RBVEVfSE9UKQorCQkJCWJ1Zl9zdGF0ZSArPSBCVUZfQ09PTFNUQVRFX09ORTsKKwkJ CWJ1Zl9zdGF0ZSB8PSBCVUZfUkVGQklUOwogCiAJCQlpZiAocGdfYXRvbWljX2NvbXBhcmVf ZXhjaGFuZ2VfdTY0KCZidWYtPnN0YXRlLCAmb2xkX2J1Zl9zdGF0ZSwKIAkJCQkJCQkJCQkJ ICAgYnVmX3N0YXRlKSkKQEAgLTM3ODUsNyArMzc4Nyw3IEBAIEJ1ZmZlclN5bmMoaW50IGZs YWdzKQogCQkgKi8KIAkJaWYgKHBnX2F0b21pY19yZWFkX3U2NCgmYnVmSGRyLT5zdGF0ZSkg JiBCTV9DSEVDS1BPSU5UX05FRURFRCkKIAkJewotCQkJaWYgKFN5bmNPbmVCdWZmZXIoYnVm X2lkLCBmYWxzZSwgJndiX2NvbnRleHQpICYgQlVGX1dSSVRURU4pCisJCQlpZiAoU3luY09u ZUJ1ZmZlcihidWZfaWQsIGZhbHNlLCBmYWxzZSwgJndiX2NvbnRleHQpICYgQlVGX1dSSVRU RU4pCiAJCQl7CiAJCQkJVFJBQ0VfUE9TVEdSRVNRTF9CVUZGRVJfU1lOQ19XUklUVEVOKGJ1 Zl9pZCk7CiAJCQkJUGVuZGluZ0NoZWNrcG9pbnRlclN0YXRzLmJ1ZmZlcnNfd3JpdHRlbisr OwpAQCAtMzg3Niw2ICszODc4LDE5IEBAIEJnQnVmZmVyU3luYyhXcml0ZWJhY2tDb250ZXh0 ICp3Yl9jb250ZXh0KQogCWZsb2F0CQlzbW9vdGhpbmdfc2FtcGxlcyA9IDE2OwogCWZsb2F0 CQlzY2FuX3dob2xlX3Bvb2xfbWlsbGlzZWNvbmRzID0gMTIwMDAwLjA7CiAKKwkvKgorCSAq IFRoZSBjbGVhbmVyIHNjYW4gZGlyZWN0bHkgb2JzZXJ2ZXMgdGhlIHJldXNhYmxlIChDT09M LCB1bnBpbm5lZCkgYnVmZmVyCisJICogZGVuc2l0eSBvdmVyIHRoZSByZWdpb24gaXQgd2Fs a3MsIHdoaWNoIC0tIHdpdGggdGhlIGNvb2xpbmctc3RhZ2UKKwkgKiBldmljdG9yIC0tIGlz IGV4YWN0bHkgdGhlIHN3ZWVwJ3MgdmljdGltIHByZWRpY2F0ZS4gIFRoYXQgb2JzZXJ2YXRp b24gaXMKKwkgKiBncm91bmQgdHJ1dGggZm9yIHRoZSBidWZmZXJzIGFib3V0IHRvIGJlIHJl dXNlZCwgd2hlcmVhcyB0aGUgc3RyYXRlZ3kKKwkgKiBzY2FuJ3MgcG9zaXRpb25hbCBwcm94 eSAoc3RyYXRlZ3lfZGVsdGEvcmVjZW50X2FsbG9jKSBibHVycyBhIHBvb2wgd2hvc2UKKwkg KiBDT09MIHBvcHVsYXRpb24gaXMgc3BhdGlhbGx5IGNsdXN0ZXJlZCAoYSBzY2FuIGJ1cnN0 IGxlYXZlcyB3aG9sZSByZWdpb25zCisJICogQ09PTCwgaG90IE9MVFAgcmVnaW9ucyBub3Qp LiAgU28gd2UgbGV0IHRoZSBjbGVhbmVyJ3Mgb3duIHNhbXBsZSBhZGFwdCBvbgorCSAqIGEg c2hvcnRlciB3aW5kb3cgdGhhbiB0aGUgc3RyYXRlZ3kgcHJveHksIHRyYWNraW5nIGEgYnVy c3Qgb2YKKwkgKiBwcm9iYXRpb25hcnkvc2NhbiBDT09MIHBhZ2VzIHdpdGhpbiBhIGN5Y2xl IG9yIHR3byBpbnN0ZWFkIG9mIGxhZ2dpbmcgaXQuCisJICovCisJZmxvYXQJCWNsZWFuZXJf c21vb3RoaW5nX3NhbXBsZXMgPSA0OworCiAJLyogVXNlZCB0byBjb21wdXRlIGhvdyBmYXIg d2Ugc2NhbiBhaGVhZCAqLwogCWxvbmcJCXN0cmF0ZWd5X2RlbHRhOwogCWludAkJCWJ1ZnNf dG9fbGFwOwpAQCAtNDA3Myw3ICs0MDg4LDcgQEAgQmdCdWZmZXJTeW5jKFdyaXRlYmFja0Nv bnRleHQgKndiX2NvbnRleHQpCiAJLyogRXhlY3V0ZSB0aGUgTFJVIHNjYW4gKi8KIAl3aGls ZSAobnVtX3RvX3NjYW4gPiAwICYmIHJldXNhYmxlX2J1ZmZlcnMgPCB1cGNvbWluZ19hbGxv Y19lc3QpCiAJewotCQlpbnQJCQlzeW5jX3N0YXRlID0gU3luY09uZUJ1ZmZlcihuZXh0X3Rv X2NsZWFuLCB0cnVlLAorCQlpbnQJCQlzeW5jX3N0YXRlID0gU3luY09uZUJ1ZmZlcihuZXh0 X3RvX2NsZWFuLCB0cnVlLCB0cnVlLAogCQkJCQkJCQkJCQkgICB3Yl9jb250ZXh0KTsKIAog CQlpZiAoKytuZXh0X3RvX2NsZWFuID49IE5CdWZmZXJzKQpAQCAtNDEyMSw3ICs0MTM2LDcg QEAgQmdCdWZmZXJTeW5jKFdyaXRlYmFja0NvbnRleHQgKndiX2NvbnRleHQpCiAJewogCQlz Y2Fuc19wZXJfYWxsb2MgPSAoZmxvYXQpIG5ld19zdHJhdGVneV9kZWx0YSAvIChmbG9hdCkg bmV3X3JlY2VudF9hbGxvYzsKIAkJc21vb3RoZWRfZGVuc2l0eSArPSAoc2NhbnNfcGVyX2Fs bG9jIC0gc21vb3RoZWRfZGVuc2l0eSkgLwotCQkJc21vb3RoaW5nX3NhbXBsZXM7CisJCQlj bGVhbmVyX3Ntb290aGluZ19zYW1wbGVzOwogCiAjaWZkZWYgQkdXX0RFQlVHCiAJCWVsb2co REVCVUcyLCAiYmd3cml0ZXI6IGNsZWFuZXIgZGVuc2l0eSBhbGxvYz0ldSBzY2FuPSVsZCBk ZW5zaXR5PSUuMmYgbmV3IHNtb290aGVkPSUuMmYiLApAQCAtNDE0MCwxNiArNDE1NSwyNiBA QCBCZ0J1ZmZlclN5bmMoV3JpdGViYWNrQ29udGV4dCAqd2JfY29udGV4dCkKICAqIElmIHNr aXBfcmVjZW50bHlfdXNlZCBpcyB0cnVlLCB3ZSBkb24ndCB3cml0ZSBjdXJyZW50bHktcGlu bmVkIGJ1ZmZlcnMsIG5vcgogICogYnVmZmVycyBtYXJrZWQgcmVjZW50bHkgdXNlZCwgYXMg dGhlc2UgYXJlIG5vdCByZXBsYWNlbWVudCBjYW5kaWRhdGVzLgogICoKKyAqIElmIGNvb2xf aWZfaG90IGlzIHRydWUgKHRoZSBiZ3dyaXRlcidzIExSVSBzY2FuKSwgYW4gdW5waW5uZWQg SE9UIGJ1ZmZlciBpcworICogZGVtb3RlZCBIT1QgLT4gQ09PTCBhcyB3ZSBwYXNzIGl0LCBw cmUtc3RhZ2luZyBldmljdGlvbiBjYW5kaWRhdGVzIHNvIHRoZQorICogZm9yZWdyb3VuZCBj bG9jayBzd2VlcCBmaW5kcyBhIENPT0wgdmljdGltIGluIGEgc2luZ2xlIHBhc3MgaW5zdGVh ZCBvZgorICogaGF2aW5nIHRvIGNvb2wgYnVmZmVycyBpdHNlbGYgKGZvcmNlX2Nvb2wpLiAg VGhlIGRlbW90aW9uIGlzIGRvbmUgdW5kZXIgdGhlCisgKiBidWZmZXIgaGVhZGVyIGxvY2sg d2UgYWxyZWFkeSBob2xkLCBzbyBpdCBuZWVkcyBubyBDQVMgYW5kIGNhbm5vdCByYWNlIGEK KyAqIGNvbmN1cnJlbnQgZGVtb3Rpb24uICBBIGNvbmN1cnJlbnQgUGluQnVmZmVyIHByb21v dGVzIGl0IGJhY2sgdG8gSE9ULCB3aGljaAorICogaXMgdGhlIGludGVuZGVkIDJRIGJlaGF2 aW9yIChhIHJlLWFjY2Vzc2VkIGJ1ZmZlciBpcyByZXNjdWVkKS4KKyAqCiAgKiBSZXR1cm5z IGEgYml0bWFzayBjb250YWluaW5nIHRoZSBmb2xsb3dpbmcgZmxhZyBiaXRzOgogICoJQlVG X1dSSVRURU46IHdlIHdyb3RlIHRoZSBidWZmZXIuCiAgKglCVUZfUkVVU0FCTEU6IGJ1ZmZl ciBpcyBhdmFpbGFibGUgZm9yIHJlcGxhY2VtZW50LCBpZSwgaXQgaGFzCi0gKgkJcGluIGNv dW50IDAgYW5kIHVzYWdlIGNvdW50IDAuCisgKgkJcGluIGNvdW50IDAgYW5kIGlzIENPT0wg KGFuIGV2aWN0aW9uIGNhbmRpZGF0ZSkuCisgKglCVUZfQ09PTEVEOiB3ZSBkZW1vdGVkIHRo aXMgYnVmZmVyIEhPVCAtPiBDT09MIHRoaXMgY2FsbC4KICAqCiAgKiAoQlVGX1dSSVRURU4g Y291bGQgYmUgc2V0IGluIGVycm9yIGlmIEZsdXNoQnVmZmVyIGZpbmRzIHRoZSBidWZmZXIg Y2xlYW4KICAqIGFmdGVyIGxvY2tpbmcgaXQsIGJ1dCB3ZSBkb24ndCBjYXJlIGFsbCB0aGF0 IG11Y2guKQogICovCiBzdGF0aWMgaW50Ci1TeW5jT25lQnVmZmVyKGludCBidWZfaWQsIGJv b2wgc2tpcF9yZWNlbnRseV91c2VkLCBXcml0ZWJhY2tDb250ZXh0ICp3Yl9jb250ZXh0KQor U3luY09uZUJ1ZmZlcihpbnQgYnVmX2lkLCBib29sIHNraXBfcmVjZW50bHlfdXNlZCwgYm9v bCBjb29sX2lmX2hvdCwKKwkJCSAgV3JpdGViYWNrQ29udGV4dCAqd2JfY29udGV4dCkKIHsK IAlCdWZmZXJEZXNjICpidWZIZHIgPSBHZXRCdWZmZXJEZXNjcmlwdG9yKGJ1Zl9pZCk7CiAJ aW50CQkJcmVzdWx0ID0gMDsKQEAgLTQxNzEsOCArNDE5NiwzOCBAQCBTeW5jT25lQnVmZmVy KGludCBidWZfaWQsIGJvb2wgc2tpcF9yZWNlbnRseV91c2VkLCBXcml0ZWJhY2tDb250ZXh0 ICp3Yl9jb250ZXh0KQogCSAqLwogCWJ1Zl9zdGF0ZSA9IExvY2tCdWZIZHIoYnVmSGRyKTsK IAorCS8qCisJICogUHJlLWNvb2wgd2l0aCBhIHNlY29uZCBjaGFuY2U6IGlmIGFza2VkLCBh Y3Qgb24gYW4gdW5waW5uZWQgSE9UIGJ1ZmZlci4KKwkgKiBJZiBpdHMgcmVmIGJpdCBpcyBz ZXQgKGFjY2Vzc2VkIHNpbmNlIG91ciBsYXN0IHBhc3MpLCBjbGVhciB0aGUgcmVmIGJpdAor CSAqIGFuZCBsZWF2ZSBpdCBIT1QgLS0gYSByZWNlbnRseS11c2VkIGJ1ZmZlciBlYXJucyBv bmUgcmVwcmlldmUsIGtlZXBpbmcKKwkgKiB0aGUgaG90IHdvcmtpbmcgc2V0IG91dCBvZiB0 aGUgQ09PTCBzdGFnZSB1bmRlciBzY2FuIHByZXNzdXJlLiAgT25seSBhCisJICogSE9UIGJ1 ZmZlciB3aG9zZSByZWYgYml0IGlzIGFscmVhZHkgY2xlYXIgaXMgZGVtb3RlZCBIT1QgLT4g Q09PTCwKKwkgKiBwcmUtc3RhZ2luZyBpdCBhcyBhbiBldmljdGlvbiBjYW5kaWRhdGUgZm9y IHRoZSBmb3JlZ3JvdW5kIHN3ZWVwLiAgV2UKKwkgKiBob2xkIHRoZSBoZWFkZXIgbG9jaywg c28gZWFjaCB0cmFuc2l0aW9uIGlzIGEgcGxhaW4gbWFza2VkIHN0b3JlIGFwcGxpZWQKKwkg KiBhdG9taWNhbGx5IGJ5IFVubG9ja0J1ZkhkckV4dDsgd2UgcmUtbG9jayB0byBjb250aW51 ZSB0aGUgZGlydHktd3JpdGUKKwkgKiBpbnNwZWN0aW9uIGJlbG93LgorCSAqLworCWlmIChj b29sX2lmX2hvdCAmJgorCQlCVUZfU1RBVEVfR0VUX1JFRkNPVU5UKGJ1Zl9zdGF0ZSkgPT0g MCAmJgorCQlCVUZfU1RBVEVfR0VUX0NPT0xTVEFURShidWZfc3RhdGUpICE9IEJVRl9DT09M U1RBVEVfQ09PTCkKKwl7CisJCWlmIChCVUZfU1RBVEVfR0VUX1JFRkJJVChidWZfc3RhdGUp KQorCQl7CisJCQkvKiBzZWNvbmQgY2hhbmNlOiBjb25zdW1lIHRoZSByZWYgYml0LCBzdGF5 IEhPVCAqLworCQkJVW5sb2NrQnVmSGRyRXh0KGJ1ZkhkciwgYnVmX3N0YXRlLCAwLCBCVUZf UkVGQklULCAwKTsKKwkJCWJ1Zl9zdGF0ZSA9IExvY2tCdWZIZHIoYnVmSGRyKTsKKwkJfQor CQllbHNlCisJCXsKKwkJCS8qIG5vdCByZS1hY2Nlc3NlZCBzaW5jZSBsYXN0IHBhc3M6IGRl bW90ZSB0byBDT09MICovCisJCQlVbmxvY2tCdWZIZHJFeHQoYnVmSGRyLCBidWZfc3RhdGUs IDAsIEJVRl9VU0FHRUNPVU5UX01BU0ssIDApOworCQkJYnVmX3N0YXRlID0gTG9ja0J1Zkhk cihidWZIZHIpOworCQkJcmVzdWx0IHw9IEJVRl9DT09MRUQ7CisJCX0KKwl9CisKIAlpZiAo QlVGX1NUQVRFX0dFVF9SRUZDT1VOVChidWZfc3RhdGUpID09IDAgJiYKLQkJQlVGX1NUQVRF X0dFVF9VU0FHRUNPVU5UKGJ1Zl9zdGF0ZSkgPT0gMCkKKwkJQlVGX1NUQVRFX0dFVF9DT09M U1RBVEUoYnVmX3N0YXRlKSA9PSBCVUZfQ09PTFNUQVRFX0NPT0wpCiAJewogCQlyZXN1bHQg fD0gQlVGX1JFVVNBQkxFOwogCX0KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3N0b3JhZ2Uv YnVmZmVyL2ZyZWVsaXN0LmMgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2J1ZmZlci9mcmVlbGlz dC5jCmluZGV4IDkzZmM0ZGQ3NThiLi5jYzc3MTQ0MjI0YyAxMDA2NDQKLS0tIGEvc3JjL2Jh Y2tlbmQvc3RvcmFnZS9idWZmZXIvZnJlZWxpc3QuYworKysgYi9zcmMvYmFja2VuZC9zdG9y YWdlL2J1ZmZlci9mcmVlbGlzdC5jCkBAIC00OSw2ICs0OSwxNiBAQCB0eXBlZGVmIHN0cnVj dAogCXVpbnQzMgkJY29tcGxldGVQYXNzZXM7IC8qIENvbXBsZXRlIGN5Y2xlcyBvZiB0aGUg Y2xvY2stc3dlZXAgKi8KIAlwZ19hdG9taWNfdWludDMyIG51bUJ1ZmZlckFsbG9jczsJLyog QnVmZmVycyBhbGxvY2F0ZWQgc2luY2UgbGFzdCByZXNldCAqLwogCisJLyoKKwkgKiBOdW1i ZXIgb2YgY2xvY2staGFuZCB2YWx1ZXMgYSBiYWNrZW5kIGNsYWltcyBwZXIgYXRvbWljIGZl dGNoLWFkZC4KKwkgKiBDb21wdXRlZCBvbmNlIGF0IHN0YXJ0dXAgKHNlZSBTdHJhdGVneUN0 bFNobWVtSW5pdCkuICBLZXB0IGluIHNoYXJlZAorCSAqIG1lbW9yeSByYXRoZXIgdGhhbiBh IGJhY2tlbmQtbG9jYWwgc3RhdGljIHNvIHRoYXQgRVhFQ19CQUNLRU5EIGNoaWxkcmVuCisJ ICogKHdoaWNoIGRvIG5vdCBpbmhlcml0IHRoZSBwb3N0bWFzdGVyJ3Mgc3RhdGljcykgc2Vl IHRoZSBzYW1lIHZhbHVlOyBhCisJICogYmFja2VuZC1sb2NhbCBjb3B5IHdvdWxkIHNpbGVu dGx5IHJlc2V0IHRvIDEgdGhlcmUsIGRpc2FibGluZyBiYXRjaGluZworCSAqIG9uIFdpbmRv d3MuCisJICovCisJdWludDMyCQliYXRjaFNpemU7CisKIAkvKgogCSAqIEJnd29ya2VyIHBy b2Nlc3MgdG8gYmUgbm90aWZpZWQgdXBvbiBhY3Rpdml0eSBvciAtMSBpZiBub25lLiBTZWUK IAkgKiBTdHJhdGVneU5vdGlmeUJnV3JpdGVyLgpAQCAtMTEzLDE3ICsxMjMsNiBAQCBzdGF0 aWMgdm9pZCBBZGRCdWZmZXJUb1JpbmcoQnVmZmVyQWNjZXNzU3RyYXRlZ3kgc3RyYXRlZ3ks CiBzdGF0aWMgdWludDMyIE15QmF0Y2hQb3MgPSAwOwogc3RhdGljIHVpbnQzMiBNeUJhdGNo RW5kID0gMDsKIAotLyoKLSAqIE51bWJlciBvZiBjbG9jay1oYW5kIHZhbHVlcyBhIGJhY2tl bmQgY2xhaW1zIHBlciBhdG9taWMgZmV0Y2gtYWRkLAotICogY29tcHV0ZWQgb25jZSBhdCBz dGFydHVwIChzZWUgU3RyYXRlZ3lDdGxTaG1lbUluaXQpLiAgV2hlbiBiYXRjaGluZyBpcwot ICogZW5hYmxlZCBpdCBpcyBvbmUgY2FjaGUgbGluZSdzIHdvcnRoIG9mIGhhbmQgYWR2YW5j ZSwgc28gY29uY3VycmVudAotICogYmFja2VuZHMgc3dlZXAgbm9uLW92ZXJsYXBwaW5nLCBj YWNoZS1saW5lLXNpemVkIHJ1bnMgb2YgdGhlIHBvb2w7IHRoZQotICogZ2xvYmFsIHN3ZWVw IG9yZGVyIGlzIHByZXNlcnZlZCAoZWFjaCBidWZmZXIgaXMgc3RpbGwgdmlzaXRlZCBleGFj dGx5IG9uY2UKLSAqIHBlciBwYXNzKS4gIEJhdGNoaW5nIGlzIGVuYWJsZWQgb25seSBvbiBt dWx0aS1ub2RlIE5VTUEgaGFyZHdhcmU7IG90aGVyd2lzZQotICogdGhpcyBzdGF5cyAxIGFu ZCB0aGUgc3dlZXAgaXMgYnl0ZS1pZGVudGljYWwgdG8gdGhlIHN0b2NrIGNsb2NrLgotICov Ci1zdGF0aWMgdWludDMyIENsb2NrU3dlZXBCYXRjaFNpemUgPSAxOwotCiAvKgogICogQ2xv Y2tTd2VlcFRpY2sgLSBIZWxwZXIgcm91dGluZSBmb3IgU3RyYXRlZ3lHZXRCdWZmZXIoKQog ICoKQEAgLTE0NCw3ICsxNDMsNyBAQCBDbG9ja1N3ZWVwVGljayh2b2lkKQogCQkgKiBhdG9t aWMgb3BlcmF0aW9uIHBlciBiYXRjaCwgcmVkdWNpbmcgY29udGVudGlvbiBieSB0aGUgYmF0 Y2ggc2l6ZS4KIAkJICovCiAJCXVpbnQzMgkJc3RhcnQ7Ci0JCXVpbnQzMgkJYmF0Y2hfc2l6 ZSA9IENsb2NrU3dlZXBCYXRjaFNpemU7CisJCXVpbnQzMgkJYmF0Y2hfc2l6ZSA9IFN0cmF0 ZWd5Q29udHJvbC0+YmF0Y2hTaXplOwogCiAJCXN0YXJ0ID0gcGdfYXRvbWljX2ZldGNoX2Fk ZF91MzIoJlN0cmF0ZWd5Q29udHJvbC0+bmV4dFZpY3RpbUJ1ZmZlciwKIAkJCQkJCQkJCQli YXRjaF9zaXplKTsKQEAgLTIxMSw2ICsyMTAsNyBAQCBTdHJhdGVneUdldEJ1ZmZlcihCdWZm ZXJBY2Nlc3NTdHJhdGVneSBzdHJhdGVneSwgdWludDY0ICpidWZfc3RhdGUsIGJvb2wgKmZy b21fcgogCUJ1ZmZlckRlc2MgKmJ1ZjsKIAlpbnQJCQliZ3dwcm9jbm87CiAJaW50CQkJdHJ5 Y291bnRlcjsKKwlib29sCQlmb3JjZV9jb29sOwogCiAJKmZyb21fcmluZyA9IGZhbHNlOwog CkBAIC0yNjEsMTIgKzI2MSwzMiBAQCBTdHJhdGVneUdldEJ1ZmZlcihCdWZmZXJBY2Nlc3NT dHJhdGVneSBzdHJhdGVneSwgdWludDY0ICpidWZfc3RhdGUsIGJvb2wgKmZyb21fcgogCSAq LwogCXBnX2F0b21pY19mZXRjaF9hZGRfdTMyKCZTdHJhdGVneUNvbnRyb2wtPm51bUJ1ZmZl ckFsbG9jcywgMSk7CiAKLQkvKiBVc2UgdGhlICJjbG9jayBzd2VlcCIgYWxnb3JpdGhtIHRv IGZpbmQgYSBmcmVlIGJ1ZmZlciAqLworCS8qCisJICogVXNlIHRoZSBjb29saW5nLXN0YWdl IGNsb2NrIHN3ZWVwIHRvIGZpbmQgYSB2aWN0aW0uCisJICoKKwkgKiBBIGJ1ZmZlciBpcyBI T1QgKHJlY2VudGx5IHVzZWQpIG9yIENPT0wgKGFuIGV2aWN0aW9uIGNhbmRpZGF0ZSkuICBX ZQorCSAqIHByZWZlciB0byByZWNsYWltIGFuIGFscmVhZHktQ09PTCBidWZmZXIgYW5kIGRl bW90ZSBhIEhPVCBidWZmZXIgdG8KKwkgKiBDT09MIG9ubHkgb25jZSBhIGZ1bGwgc3dlZXAg aGFzIGZvdW5kIG5vIENPT0wgdmljdGltIChmb3JjZV9jb29sKSAtLSBzbworCSAqIGFuIGFi dW5kYW50IHN1cHBseSBvZiBDT09ML3Byb2JhdGlvbmFyeSBwYWdlcyAoZS5nLiBhIHNjYW4p IGlzIGRyYWluZWQKKwkgKiBiZWZvcmUgdGhlIGhvdCB3b3JraW5nIHNldCBpcyBjb29sZWQu ICBOZXdseSBsb2FkZWQgcGFnZXMgYXJlIGFkbWl0dGVkCisJICogQ09PTCAoc2VlIEJ1ZmZl ckFsbG9jKSwgc28gc2NhbiByZXNpc3RhbmNlIGZhbGxzIG91dCBvZiB0aGUgYWxnb3JpdGht LgorCSAqCisJICogdHJ5Y291bnRlciBib3VuZHMgdGhlIHNlYXJjaC4gIEFueSB0aWNrIHRo YXQgZG9lcyBub3QgcHJvZHVjZSBhIHZpY3RpbQorCSAqIGFuZCBkb2VzIG5vdCBtYWtlIHBy b2dyZXNzIC0tIGEgcGlubmVkIGJ1ZmZlciwgb3IgYSBIT1QgYnVmZmVyIHNraXBwZWQKKwkg KiBvbiBhIHByZWZlci1DT09MIHBhc3MgLS0gZGVjcmVtZW50cyBpdC4gIENvb2xpbmcgYSBI T1QgYnVmZmVyICh1bmRlcgorCSAqIGZvcmNlX2Nvb2wpIGlzIHByb2dyZXNzIGFuZCByZXNl dHMgaXQuICBXaGVuIGEgZnVsbCBwYXNzIChOQnVmZmVycykKKwkgKiBtYWtlcyBubyBwcm9n cmVzcyB3ZSBlc2NhbGF0ZSB0byBmb3JjZV9jb29sIHNvIHRoZSBuZXh0IHBhc3MgY29vbHMg SE9UCisJICogYnVmZmVycyBpbnRvIHZpY3RpbXM7IGlmIGEgZm9yY2VfY29vbCBwYXNzIEFM U08gbWFrZXMgbm8gcHJvZ3Jlc3MgZXZlcnkKKwkgKiBidWZmZXIgaXMgcGlubmVkIGFuZCB3 ZSBmYWlsLCBtYXRjaGluZyB0aGUgc3RvY2sgIm5vIHVucGlubmVkIGJ1ZmZlcnMKKwkgKiBh dmFpbGFibGUiIGNvbnRyYWN0LgorCSAqLwogCXRyeWNvdW50ZXIgPSBOQnVmZmVyczsKKwlm b3JjZV9jb29sID0gZmFsc2U7CiAJZm9yICg7OykKIAl7CiAJCXVpbnQ2NAkJb2xkX2J1Zl9z dGF0ZTsKIAkJdWludDY0CQlsb2NhbF9idWZfc3RhdGU7CisJCWJvb2wJCW5vX3Byb2dyZXNz ID0gZmFsc2U7CiAKIAkJYnVmID0gR2V0QnVmZmVyRGVzY3JpcHRvcihDbG9ja1N3ZWVwVGlj aygpKTsKIApAQCAtMjc5LDI1ICsyOTksMTAgQEAgU3RyYXRlZ3lHZXRCdWZmZXIoQnVmZmVy QWNjZXNzU3RyYXRlZ3kgc3RyYXRlZ3ksIHVpbnQ2NCAqYnVmX3N0YXRlLCBib29sICpmcm9t X3IKIAkJewogCQkJbG9jYWxfYnVmX3N0YXRlID0gb2xkX2J1Zl9zdGF0ZTsKIAotCQkJLyoK LQkJCSAqIElmIHRoZSBidWZmZXIgaXMgcGlubmVkIG9yIGhhcyBhIG5vbnplcm8gdXNhZ2Vf Y291bnQsIHdlIGNhbm5vdAotCQkJICogdXNlIGl0OyBkZWNyZW1lbnQgdGhlIHVzYWdlX2Nv dW50ICh1bmxlc3MgcGlubmVkKSBhbmQga2VlcAotCQkJICogc2Nhbm5pbmcuCi0JCQkgKi8K LQorCQkJLyogSWYgdGhlIGJ1ZmZlciBpcyBwaW5uZWQgd2UgY2Fubm90IHVzZSBpdDsga2Vl cCBzY2FubmluZy4gKi8KIAkJCWlmIChCVUZfU1RBVEVfR0VUX1JFRkNPVU5UKGxvY2FsX2J1 Zl9zdGF0ZSkgIT0gMCkKIAkJCXsKLQkJCQlpZiAoLS10cnljb3VudGVyID09IDApCi0JCQkJ ewotCQkJCQkvKgotCQkJCQkgKiBXZSd2ZSBzY2FubmVkIGFsbCB0aGUgYnVmZmVycyB3aXRo b3V0IG1ha2luZyBhbnkgc3RhdGUKLQkJCQkJICogY2hhbmdlcywgc28gYWxsIHRoZSBidWZm ZXJzIGFyZSBwaW5uZWQgKG9yIHdlcmUgd2hlbiB3ZQotCQkJCQkgKiBsb29rZWQgYXQgdGhl bSkuIFdlIGNvdWxkIGhvcGUgdGhhdCBzb21lb25lIHdpbGwgZnJlZQotCQkJCQkgKiBvbmUg ZXZlbnR1YWxseSwgYnV0IGl0J3MgcHJvYmFibHkgYmV0dGVyIHRvIGZhaWwgdGhhbgotCQkJ CQkgKiB0byByaXNrIGdldHRpbmcgc3R1Y2sgaW4gYW4gaW5maW5pdGUgbG9vcC4KLQkJCQkJ ICovCi0JCQkJCWVsb2coRVJST1IsICJubyB1bnBpbm5lZCBidWZmZXJzIGF2YWlsYWJsZSIp OwotCQkJCX0KKwkJCQlub19wcm9ncmVzcyA9IHRydWU7CiAJCQkJYnJlYWs7CiAJCQl9CiAK QEAgLTMwOCwyMCArMzEzLDQzIEBAIFN0cmF0ZWd5R2V0QnVmZmVyKEJ1ZmZlckFjY2Vzc1N0 cmF0ZWd5IHN0cmF0ZWd5LCB1aW50NjQgKmJ1Zl9zdGF0ZSwgYm9vbCAqZnJvbV9yCiAJCQkJ Y29udGludWU7CiAJCQl9CiAKLQkJCWlmIChCVUZfU1RBVEVfR0VUX1VTQUdFQ09VTlQobG9j YWxfYnVmX3N0YXRlKSAhPSAwKQorCQkJaWYgKEJVRl9TVEFURV9HRVRfQ09PTFNUQVRFKGxv Y2FsX2J1Zl9zdGF0ZSkgIT0gQlVGX0NPT0xTVEFURV9DT09MKQogCQkJewotCQkJCWxvY2Fs X2J1Zl9zdGF0ZSAtPSBCVUZfVVNBR0VDT1VOVF9PTkU7CisJCQkJLyoKKwkJCQkgKiBIT1Qg YnVmZmVyLiAgUHJlZmVyIGEgQ09PTCB2aWN0aW06IG9uIGEgbm9ybWFsIHBhc3MganVzdAor CQkJCSAqIGFkdmFuY2UgdGhlIGhhbmQgKG5vIHByb2dyZXNzKS4gIFVuZGVyIGZvcmNlX2Nv b2wgZGVtb3RlIGl0CisJCQkJICogSE9UIC0+IENPT0wgLS0gdGhlIGNvb2xpbmcgdGljaywg d2hpY2ggSVMgcHJvZ3Jlc3MuCisJCQkJICovCisJCQkJaWYgKCFmb3JjZV9jb29sKQorCQkJ CXsKKwkJCQkJbm9fcHJvZ3Jlc3MgPSB0cnVlOworCQkJCQlicmVhazsJCQkvKiBhZHZhbmNl IHRoZSBoYW5kLCBsb29rIGZvciBDT09MICovCisJCQkJfQorCisJCQkJbG9jYWxfYnVmX3N0 YXRlICY9IH5CVUZfVVNBR0VDT1VOVF9NQVNLOwkvKiBIT1QgLT4gQ09PTCwgY2xlYXIgcmVm IGJpdCAqLwogCiAJCQkJaWYgKHBnX2F0b21pY19jb21wYXJlX2V4Y2hhbmdlX3U2NCgmYnVm LT5zdGF0ZSwgJm9sZF9idWZfc3RhdGUsCiAJCQkJCQkJCQkJCQkgICBsb2NhbF9idWZfc3Rh dGUpKQogCQkJCXsKKwkJCQkJLyoKKwkJCQkJICogQ29vbGluZyBhIGJ1ZmZlciBpcyBwcm9n cmVzcyB0b3dhcmQgYSB2aWN0aW0sIHNvIHJlc2V0IHRoZQorCQkJCQkgKiBjb3VudGVyIGFu ZCBkcm9wIGJhY2sgb3V0IG9mIGZvcmNlX2Nvb2wuICBCZWNhdXNlIHdlIGNsZWFyCisJCQkJ CSAqIGZvcmNlX2Nvb2wgYWZ0ZXIgYSBzaW5nbGUgZGVtb3Rpb24sIGFuIGFsbC1IT1QgcG9v bCBjYW4gdGFrZQorCQkJCQkgKiB1cCB0byB+MiBmdWxsIHBhc3NlcyB0byB5aWVsZCBhIHZp Y3RpbSAob25lIHRvIGRpc2NvdmVyIG5vCisJCQkJCSAqIENPT0wgYnVmZmVyIGV4aXN0cywg b25lIHRvIGNvb2wgKyByZWNsYWltKS4gIFRoYXQgaXMgc3RpbGwKKwkJCQkJICogd2l0aGlu IHRoZSBzdG9jayBjbG9jaydzIHdvcnN0IGNhc2UgKHVwIHRvCisJCQkJCSAqIEJNX01BWF9V U0FHRV9DT1VOVCsxIHBhc3NlcyksIGFuZCBpbiBwcmFjdGljZSB0aGUgYmd3cml0ZXIKKwkJ CQkJICogcHJlLWNvb2xpbmcga2VlcHMgYSBDT09MIHZpY3RpbSBhdmFpbGFibGUgc28gZm9y Y2VfY29vbAorCQkJCQkgKiByYXJlbHkgZmlyZXMgYXQgYWxsLgorCQkJCQkgKi8KIAkJCQkJ dHJ5Y291bnRlciA9IE5CdWZmZXJzOworCQkJCQlmb3JjZV9jb29sID0gZmFsc2U7CiAJCQkJ CWJyZWFrOwogCQkJCX0KIAkJCX0KIAkJCWVsc2UKIAkJCXsKLQkJCQkvKiBwaW4gdGhlIGJ1 ZmZlciBpZiB0aGUgQ0FTIHN1Y2NlZWRzICovCisJCQkJLyogQ09PTCBhbmQgdW5waW5uZWQ6 IGNsYWltIGl0LiAgUGluIGlmIHRoZSBDQVMgc3VjY2VlZHMuICovCiAJCQkJbG9jYWxfYnVm X3N0YXRlICs9IEJVRl9SRUZDT1VOVF9PTkU7CiAKIAkJCQlpZiAocGdfYXRvbWljX2NvbXBh cmVfZXhjaGFuZ2VfdTY0KCZidWYtPnN0YXRlLCAmb2xkX2J1Zl9zdGF0ZSwKQEAgLTMzOCw2 ICszNjYsMjEgQEAgU3RyYXRlZ3lHZXRCdWZmZXIoQnVmZmVyQWNjZXNzU3RyYXRlZ3kgc3Ry YXRlZ3ksIHVpbnQ2NCAqYnVmX3N0YXRlLCBib29sICpmcm9tX3IKIAkJCQl9CiAJCQl9CiAJ CX0KKworCQkvKgorCQkgKiBBIHRpY2sgdGhhdCBtYWRlIG5vIHByb2dyZXNzIHRvd2FyZCBh IHZpY3RpbSBjb3VudHMgZG93biB0cnljb3VudGVyLgorCQkgKiBBIGZ1bGwgdW5wcm9kdWN0 aXZlIHBhc3MgZXNjYWxhdGVzIHRvIGZvcmNlX2Nvb2wgKGNvb2wgSE9UIGJ1ZmZlcnMKKwkJ ICogaW50byB2aWN0aW1zKTsgYSBzZWNvbmQgdW5wcm9kdWN0aXZlIGZ1bGwgcGFzcyBtZWFu cyBldmVyeXRoaW5nIGlzCisJCSAqIHBpbm5lZCwgc28gZmFpbCByYXRoZXIgdGhhbiBzcGlu IGZvcmV2ZXIuICAoQSBmYWlsZWQgQ0FTIGFib3ZlIGlzCisJCSAqIG5laXRoZXIgcHJvZ3Jl c3Mgbm9yIGEgZnVsbCBtaXNzOiB3ZSBzaW1wbHkgcmV0cnkgdGhlIHNhbWUgYnVmZmVyLikK KwkJICovCisJCWlmIChub19wcm9ncmVzcyAmJiAtLXRyeWNvdW50ZXIgPT0gMCkKKwkJewor CQkJaWYgKGZvcmNlX2Nvb2wpCisJCQkJZWxvZyhFUlJPUiwgIm5vIHVucGlubmVkIGJ1ZmZl cnMgYXZhaWxhYmxlIik7CisJCQlmb3JjZV9jb29sID0gdHJ1ZTsKKwkJCXRyeWNvdW50ZXIg PSBOQnVmZmVyczsKKwkJfQogCX0KIH0KIApAQCAtNDUyLDEwICs0OTUsMTAgQEAgU3RyYXRl Z3lDdGxTaG1lbUluaXQodm9pZCAqYXJnKQogCSAqLwogCWlmIChwZ19udW1hX2luaXQoKSAh PSAtMSAmJgogCQlwZ19udW1hX2dldF9tYXhfbm9kZSgpID49IDEpCi0JCUNsb2NrU3dlZXBC YXRjaFNpemUgPSBNaW4oUEdfQ0FDSEVfTElORV9TSVpFIC8gKHVpbnQzMikgc2l6ZW9mKHVp bnQzMiksCi0JCQkJCQkJCSAgKHVpbnQzMikgTkJ1ZmZlcnMpOworCQlTdHJhdGVneUNvbnRy b2wtPmJhdGNoU2l6ZSA9IE1pbihQR19DQUNIRV9MSU5FX1NJWkUgLyAodWludDMyKSBzaXpl b2YodWludDMyKSwKKwkJCQkJCQkJCQkgKHVpbnQzMikgTkJ1ZmZlcnMpOwogCWVsc2UKLQkJ Q2xvY2tTd2VlcEJhdGNoU2l6ZSA9IDE7CisJCVN0cmF0ZWd5Q29udHJvbC0+YmF0Y2hTaXpl ID0gMTsKIH0KIAogCkBAIC03MDMsMTQgKzc0NiwxMyBAQCBHZXRCdWZmZXJGcm9tUmluZyhC dWZmZXJBY2Nlc3NTdHJhdGVneSBzdHJhdGVneSwgdWludDY0ICpidWZfc3RhdGUpCiAJCS8q CiAJCSAqIElmIHRoZSBidWZmZXIgaXMgcGlubmVkIHdlIGNhbm5vdCB1c2UgaXQgdW5kZXIg YW55IGNpcmN1bXN0YW5jZXMuCiAJCSAqCi0JCSAqIElmIHVzYWdlX2NvdW50IGlzIDAgb3Ig MSB0aGVuIHRoZSBidWZmZXIgaXMgZmFpciBnYW1lICh3ZSBleHBlY3QgMSwKLQkJICogc2lu Y2Ugb3VyIG93biBwcmV2aW91cyB1c2FnZSBvZiB0aGUgcmluZyBlbGVtZW50IHdvdWxkIGhh dmUgbGVmdCBpdAotCQkgKiB0aGVyZSwgYnV0IGl0IG1pZ2h0J3ZlIGJlZW4gZGVjcmVtZW50 ZWQgYnkgY2xvY2stc3dlZXAgc2luY2UgdGhlbikuCi0JCSAqIEEgaGlnaGVyIHVzYWdlX2Nv dW50IGluZGljYXRlcyBzb21lb25lIGVsc2UgaGFzIHRvdWNoZWQgdGhlIGJ1ZmZlciwKLQkJ ICogc28gd2Ugc2hvdWxkbid0IHJlLXVzZSBpdC4KKwkJICogV2l0aCB0aGUgY29vbGluZy1z dGF0ZSByZXBsYWNlbWVudCB0aGUgZmllbGQgaG9sZHMgb25seSBDT09MIG9yIEhPVCwKKwkJ ICogc28gdGhlIHN0b2NrICJ1c2FnZV9jb3VudCA+IDEgbWVhbnMgYW5vdGhlciBiYWNrZW5k IHRvdWNoZWQgaXQiCisJCSAqIGhldXJpc3RpYyBubyBsb25nZXIgYXBwbGllczogYSByaW5n IGVsZW1lbnQgaXMgcmV1c2FibGUgd2hlbmV2ZXIgaXQKKwkJICogaXMgdW5waW5uZWQuICAo VGhlIHdob2xlIHJpbmcgbWVjaGFuaXNtIGlzIHJlbW92ZWQgaW4gYSBsYXRlciBwYXRjaDsK KwkJICogc2NhbiByZXNpc3RhbmNlIGlzIG5vdyBpbnRyaW5zaWMgdG8gdGhlIHN3ZWVwLikK IAkJICovCi0JCWlmIChCVUZfU1RBVEVfR0VUX1JFRkNPVU5UKGxvY2FsX2J1Zl9zdGF0ZSkg IT0gMAotCQkJfHwgQlVGX1NUQVRFX0dFVF9VU0FHRUNPVU5UKGxvY2FsX2J1Zl9zdGF0ZSkg PiAxKQorCQlpZiAoQlVGX1NUQVRFX0dFVF9SRUZDT1VOVChsb2NhbF9idWZfc3RhdGUpICE9 IDApCiAJCQlicmVhazsKIAogCQkvKiBTZWUgZXF1aXZhbGVudCBjb2RlIGluIFBpbkJ1ZmZl cigpICovCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9zdG9yYWdlL2J1ZmZlci9sb2NhbGJ1 Zi5jIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9idWZmZXIvbG9jYWxidWYuYwppbmRleCA0ODcw YzhlMTNkMC4uMjFjMDgwOTFjNDkgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3N0b3JhZ2Uv YnVmZmVyL2xvY2FsYnVmLmMKKysrIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9idWZmZXIvbG9j YWxidWYuYwpAQCAtMTY3LDcgKzE2Nyw3IEBAIExvY2FsQnVmZmVyQWxsb2MoU01nclJlbGF0 aW9uIHNtZ3IsIEZvcmtOdW1iZXIgZm9ya051bSwgQmxvY2tOdW1iZXIgYmxvY2tOdW0sCiAK IAkJYnVmX3N0YXRlID0gcGdfYXRvbWljX3JlYWRfdTY0KCZidWZIZHItPnN0YXRlKTsKIAkJ YnVmX3N0YXRlICY9IH4oQlVGX0ZMQUdfTUFTSyB8IEJVRl9VU0FHRUNPVU5UX01BU0spOwot CQlidWZfc3RhdGUgfD0gQk1fVEFHX1ZBTElEIHwgQlVGX1VTQUdFQ09VTlRfT05FOworCQli dWZfc3RhdGUgfD0gQk1fVEFHX1ZBTElEOwkvKiBhZG1pdCBDT09MIChwcm9iYXRpb24pICov CiAJCXBnX2F0b21pY191bmxvY2tlZF93cml0ZV91NjQoJmJ1Zkhkci0+c3RhdGUsIGJ1Zl9z dGF0ZSk7CiAKIAkJKmZvdW5kUHRyID0gZmFsc2U7CkBAIC0yNDgsOSArMjQ4LDEwIEBAIEdl dExvY2FsVmljdGltQnVmZmVyKHZvaWQpCiAJCXsKIAkJCXVpbnQ2NAkJYnVmX3N0YXRlID0g cGdfYXRvbWljX3JlYWRfdTY0KCZidWZIZHItPnN0YXRlKTsKIAotCQkJaWYgKEJVRl9TVEFU RV9HRVRfVVNBR0VDT1VOVChidWZfc3RhdGUpID4gMCkKKwkJCWlmIChCVUZfU1RBVEVfR0VU X0NPT0xTVEFURShidWZfc3RhdGUpICE9IEJVRl9DT09MU1RBVEVfQ09PTCkKIAkJCXsKLQkJ CQlidWZfc3RhdGUgLT0gQlVGX1VTQUdFQ09VTlRfT05FOworCQkJCS8qIEhPVDogZ2l2ZSBp dCBhIHNlY29uZCBjaGFuY2UsIGNvb2wgaXQgYW5kIGtlZXAgc2Nhbm5pbmcuICovCisJCQkJ YnVmX3N0YXRlIC09IEJVRl9DT09MU1RBVEVfT05FOwogCQkJCXBnX2F0b21pY191bmxvY2tl ZF93cml0ZV91NjQoJmJ1Zkhkci0+c3RhdGUsIGJ1Zl9zdGF0ZSk7CiAJCQkJdHJ5Y291bnRl ciA9IE5Mb2NCdWZmZXI7CiAJCQl9CkBAIC00NTQsNyArNDU1LDcgQEAgRXh0ZW5kQnVmZmVy ZWRSZWxMb2NhbChCdWZmZXJNYW5hZ2VyUmVsYXRpb24gYm1yLAogCiAJCQl2aWN0aW1fYnVm X2hkci0+dGFnID0gdGFnOwogCi0JCQlidWZfc3RhdGUgfD0gQk1fVEFHX1ZBTElEIHwgQlVG X1VTQUdFQ09VTlRfT05FOworCQkJYnVmX3N0YXRlIHw9IEJNX1RBR19WQUxJRDsJLyogYWRt aXQgQ09PTCAocHJvYmF0aW9uKSAqLwogCiAJCQlwZ19hdG9taWNfdW5sb2NrZWRfd3JpdGVf dTY0KCZ2aWN0aW1fYnVmX2hkci0+c3RhdGUsIGJ1Zl9zdGF0ZSk7CiAKQEAgLTgzOSw5ICs4 NDAsOSBAQCBQaW5Mb2NhbEJ1ZmZlcihCdWZmZXJEZXNjICpidWZfaGRyLCBib29sIGFkanVz dF91c2FnZWNvdW50KQogCQlOTG9jYWxQaW5uZWRCdWZmZXJzKys7CiAJCWJ1Zl9zdGF0ZSAr PSBCVUZfUkVGQ09VTlRfT05FOwogCQlpZiAoYWRqdXN0X3VzYWdlY291bnQgJiYKLQkJCUJV Rl9TVEFURV9HRVRfVVNBR0VDT1VOVChidWZfc3RhdGUpIDwgQk1fTUFYX1VTQUdFX0NPVU5U KQorCQkJQlVGX1NUQVRFX0dFVF9DT09MU1RBVEUoYnVmX3N0YXRlKSA8IEJVRl9DT09MU1RB VEVfSE9UKQogCQl7Ci0JCQlidWZfc3RhdGUgKz0gQlVGX1VTQUdFQ09VTlRfT05FOworCQkJ YnVmX3N0YXRlICs9IEJVRl9DT09MU1RBVEVfT05FOwogCQl9CiAJCXBnX2F0b21pY191bmxv Y2tlZF93cml0ZV91NjQoJmJ1Zl9oZHItPnN0YXRlLCBidWZfc3RhdGUpOwogCmRpZmYgLS1n aXQgYS9zcmMvaW5jbHVkZS9zdG9yYWdlL2J1Zl9pbnRlcm5hbHMuaCBiL3NyYy9pbmNsdWRl L3N0b3JhZ2UvYnVmX2ludGVybmFscy5oCmluZGV4IGU0ZmY1NjE5Yjc5Li4xMzFkZjEyNmNk YSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9idWZfaW50ZXJuYWxzLmgKKysr IGIvc3JjL2luY2x1ZGUvc3RvcmFnZS9idWZfaW50ZXJuYWxzLmgKQEAgLTY3LDYgKzY3LDUw IEBAIFN0YXRpY0Fzc2VydERlY2woQlVGX1JFRkNPVU5UX0JJVFMgKyBCVUZfVVNBR0VDT1VO VF9CSVRTICsgQlVGX0ZMQUdfQklUUyArIEJVRl9MCiAjZGVmaW5lIEJVRl9VU0FHRUNPVU5U X09ORSBcCiAJKFVJTlQ2NENPTlNUKDEpIDw8IEJVRl9SRUZDT1VOVF9CSVRTKQogCisvKgor ICogQ29vbGluZyBzdGF0ZSAoTGVhblN0b3JlIC8gMlEtQTEgY29vbGluZy1zdGFnZSBjbG9j ayBzd2VlcCkuCisgKgorICogVGhlIGZpZWxkIGhpc3RvcmljYWxseSB1c2VkIGZvciB0aGUg MC4uNSB1c2FnZV9jb3VudCBub3cgaG9sZHMgYSBzaW5nbGUKKyAqIGNvb2xpbmctc3RhdGUg Yml0OiBIT1QgKHJlY2VudGx5IGFjY2Vzc2VkLCBub3QgYW4gZXZpY3Rpb24gY2FuZGlkYXRl KSBvcgorICogQ09PTCAoYW4gZXZpY3Rpb24gY2FuZGlkYXRlKS4gIFdlIHJldXNlIEJVRl9V U0FHRUNPVU5UX09ORSBhcyB0aGUgdW5pdCBzbworICogdGhlIGJ1ZmZlci1zdGF0ZSBiaXQg Z2VvZ3JhcGh5IC0tIHJlZmNvdW50LCBmbGFnLCBhbmQgbG9jayBvZmZzZXRzLCBhbmQgdGhl CisgKiA2NC1iaXQgU3RhdGljQXNzZXJ0cyAtLSBpcyB1bmNoYW5nZWQ7IG9ubHkgdGhlIG1l YW5pbmcgb2YgdGhlIGZpZWxkIGFuZCB0aGUKKyAqIGluc3RydWN0aW9ucyB0aGF0IHRvdWNo IGl0IGNoYW5nZS4KKyAqCisgKiBBIGRlbWFuZC1sb2FkZWQgcGFnZSBpcyBhZG1pdHRlZCBD T09MIChwcm9iYXRpb24pOyBhIHNlY29uZCBhY2Nlc3MgcHJvbW90ZXMKKyAqIGl0IHRvIEhP VCAodGhlIHJlc2N1ZSkuICBUaGUgc3dlZXAgcHJlZmVycyBDT09MIHZpY3RpbXMgYW5kIGRl bW90ZXMgSE9UIHRvCisgKiBDT09MIG9ubHkgd2hlbiBhIGZ1bGwgcGFzcyBmaW5kcyBubyBD T09MIHZpY3RpbS4gIFNvIGEgb25lLXRvdWNoIHNjYW4gZmlsbHMKKyAqIGFuZCBkcmFpbnMg dGhlIENPT0wgc3RhZ2Ugd2l0aG91dCBkaXNwbGFjaW5nIHRoZSBIT1Qgd29ya2luZyBzZXQg LS0gc2NhbgorICogcmVzaXN0YW5jZSBpbnRyaW5zaWMgdG8gdGhlIHJlcGxhY2VtZW50IGFs Z29yaXRobS4KKyAqLworI2RlZmluZSBCVUZfQ09PTFNUQVRFX0NPT0wJMAorI2RlZmluZSBC VUZfQ09PTFNUQVRFX0hPVAkxCisjZGVmaW5lIEJVRl9DT09MU1RBVEVfT05FCUJVRl9VU0FH RUNPVU5UX09ORQorCisvKgorICogU2Vjb25kLWNoYW5jZSByZWZlcmVuY2UgYml0LCBiaXQg MSBvZiB0aGUgKGZvcm1lciB1c2FnZWNvdW50KSBmaWVsZCwgb25lCisgKiBwb3NpdGlvbiBh Ym92ZSB0aGUgY29vbGluZy1zdGF0ZSBiaXQuICBQaW5CdWZmZXIgc2V0cyBpdCBvbiBldmVy eSBhY2Nlc3MuCisgKiBUaGUgYmd3cml0ZXIncyBwcmUtY29vbGluZyBnaXZlcyBhIEhPVCBi dWZmZXIgYSBzZWNvbmQgY2hhbmNlOiB0aGUgZmlyc3QKKyAqIHRpbWUgaXQgcGFzc2VzIGEg SE9UIGJ1ZmZlciB3aG9zZSByZWYgYml0IGlzIHNldCwgaXQgY2xlYXJzIHRoZSByZWYgYml0 IGFuZAorICogbGVhdmVzIHRoZSBidWZmZXIgSE9UOyBvbmx5IGEgSE9UIGJ1ZmZlciB3aG9z ZSByZWYgYml0IGlzIGFscmVhZHkgY2xlYXIgKG5vdAorICogcmUtYWNjZXNzZWQgc2luY2Ug dGhlIHByZXZpb3VzIGJnd3JpdGVyIHBhc3MpIGlzIGRlbW90ZWQgdG8gQ09PTC4gIFRoaXMK KyAqIGtlZXBzIGdlbnVpbmVseS1ob3QgcGFnZXMgb3V0IG9mIHRoZSBDT09MIHN0YWdlIChw cm90ZWN0aW5nIHRoZSB3b3JraW5nIHNldAorICogZnJvbSBiZWluZyBjb29sZWQgdW5kZXIg c2NhbiBwcmVzc3VyZSkgd2hpbGUgbGVhdmluZyB0aGUgZm9yZWdyb3VuZCBzd2VlcCBhCisg KiBzaW5nbGUtcGFzcyBzZWFyY2ggb3ZlciB0aGUgcHJlLXN0YWdlZCBDT09MIGJ1ZmZlcnMu ICBBIHNlcGFyYXRlIGJpdCAobm90IGEKKyAqIGNvdW50KSBzbyBpdCBzdGF5cyBhIHBsYWlu IG1hc2tlZCBzdG9yZSB1bmRlciB0aGUgaGVhZGVyIGxvY2suCisgKi8KKyNkZWZpbmUgQlVG X1JFRkJJVAkJCShVSU5UNjRDT05TVCgyKSA8PCBCVUZfUkVGQ09VTlRfQklUUykKKyNkZWZp bmUgQlVGX1NUQVRFX0dFVF9SRUZCSVQoc3RhdGUpCSgoKHN0YXRlKSAmIEJVRl9SRUZCSVQp ICE9IDApCisKKy8qCisgKiBUaGUgY29vbGluZyBzdGF0ZSBvY2N1cGllcyBiaXQgMCBhbmQg dGhlIHJlZmVyZW5jZSBiaXQgb2NjdXBpZXMgYml0IDEgb2YKKyAqIHRoZSAoZm9ybWVyIHVz YWdlY291bnQpIGZpZWxkLCBzbyB0aGUgZmllbGQgbXVzdCBiZSBhdCBsZWFzdCAyIGJpdHMg d2lkZS4KKyAqIEFzc2VydCBpdCBoZXJlIHNvIGEgZnV0dXJlIGNoYW5nZSB0byBCVUZfVVNB R0VDT1VOVF9CSVRTIGNhbm5vdCBzaWxlbnRseQorICogcHVzaCBCVUZfUkVGQklUIHVwIGlu dG8gdGhlIGZsYWcgYml0cy4KKyAqLworU3RhdGljQXNzZXJ0RGVjbChCVUZfVVNBR0VDT1VO VF9CSVRTID49IDIsCisJCQkJICJjb29saW5nIHN0YXRlICsgcmVmZXJlbmNlIGJpdCBuZWVk IGF0IGxlYXN0IDIgYml0cyBpbiB0aGUgdXNhZ2Vjb3VudCBmaWVsZCIpOworCiAvKiBmbGFn cyByZWxhdGVkIGRlZmluaXRpb25zICovCiAjZGVmaW5lIEJVRl9GTEFHX1NISUZUIFwKIAko QlVGX1JFRkNPVU5UX0JJVFMgKyBCVUZfVVNBR0VDT1VOVF9CSVRTKQpAQCAtOTIsNiArMTM2 LDExIEBAIFN0YXRpY0Fzc2VydERlY2woQlVGX1JFRkNPVU5UX0JJVFMgKyBCVUZfVVNBR0VD T1VOVF9CSVRTICsgQlVGX0ZMQUdfQklUUyArIEJVRl9MCiAjZGVmaW5lIEJVRl9TVEFURV9H RVRfVVNBR0VDT1VOVChzdGF0ZSkgXAogCSgodWludDMyKSgoKHN0YXRlKSAmIEJVRl9VU0FH RUNPVU5UX01BU0spID4+IEJVRl9VU0FHRUNPVU5UX1NISUZUKSkKIAorLyogQ29vbGluZyBz dGF0ZSAoSE9UL0NPT0wpIGZyb20gYnVmZmVyIHN0YXRlIC0tIGJpdCAwIG9mIHRoZSBmaWVs ZCBvbmx5LCBzbworICogdGhlIHNlY29uZC1jaGFuY2UgcmVmIGJpdCAoYml0IDEpIGRvZXMg bm90IHBlcnR1cmIgdGhlIEhPVC9DT09MIHRlc3QuICovCisjZGVmaW5lIEJVRl9TVEFURV9H RVRfQ09PTFNUQVRFKHN0YXRlKSBcCisJKCh1aW50MzIpICgoKHN0YXRlKSA+PiBCVUZfVVNB R0VDT1VOVF9TSElGVCkgJiAxKSkKKwogLyoKICAqIEZsYWdzIGZvciBidWZmZXIgZGVzY3Jp cHRvcnMKICAqCkBAIC0xMzQsMTcgKzE4MywxNSBAQCBTdGF0aWNBc3NlcnREZWNsKE1BWF9C QUNLRU5EU19CSVRTIDw9IChCVUZfTE9DS19CSVRTIC0gMiksCiAKIAogLyoKLSAqIFRoZSBt YXhpbXVtIGFsbG93ZWQgdmFsdWUgb2YgdXNhZ2VfY291bnQgcmVwcmVzZW50cyBhIHRyYWRl b2ZmIGJldHdlZW4KLSAqIGFjY3VyYWN5IGFuZCBzcGVlZCBvZiB0aGUgY2xvY2stc3dlZXAg YnVmZmVyIG1hbmFnZW1lbnQgYWxnb3JpdGhtLiAgQQotICogbGFyZ2UgdmFsdWUgKGNvbXBh cmFibGUgdG8gTkJ1ZmZlcnMpIHdvdWxkIGFwcHJveGltYXRlIExSVSBzZW1hbnRpY3MuCi0g KiBCdXQgaXQgY2FuIHRha2UgYXMgbWFueSBhcyBCTV9NQVhfVVNBR0VfQ09VTlQrMSBjb21w bGV0ZSBjeWNsZXMgb2YgdGhlCi0gKiBjbG9jay1zd2VlcCBoYW5kIHRvIGZpbmQgYSBmcmVl IGJ1ZmZlciwgc28gaW4gcHJhY3RpY2Ugd2UgZG9uJ3Qgd2FudCB0aGUKLSAqIHZhbHVlIHRv IGJlIHZlcnkgbGFyZ2UuCisgKiBUaGUgY29vbGluZyBzdGF0ZSBpcyBhIHNpbmdsZSBiaXQg KEhPVC9DT09MKTsgdGhlIG1heGltdW0gdmFsdWUgc3RvcmVkIGluCisgKiB0aGUgZmllbGQg aXMgdGhlcmVmb3JlIEJVRl9DT09MU1RBVEVfSE9ULiAgUmV0YWluZWQgdW5kZXIgdGhlIGhp c3RvcmljYWwKKyAqIG5hbWUgQk1fTUFYX1VTQUdFX0NPVU5UIHNvIHRoZSBwaW4gZmFzdCBw YXRoICgicHJvbW90ZSB1bmxlc3MgYWxyZWFkeSBhdAorICogbWF4IikgcmVhZHMgbmF0dXJh bGx5LgogICovCi0jZGVmaW5lIEJNX01BWF9VU0FHRV9DT1VOVAk1CisjZGVmaW5lIEJNX01B WF9VU0FHRV9DT1VOVAlCVUZfQ09PTFNUQVRFX0hPVAogCiBTdGF0aWNBc3NlcnREZWNsKEJN X01BWF9VU0FHRV9DT1VOVCA8IChVSU5UNjRDT05TVCgxKSA8PCBCVUZfVVNBR0VDT1VOVF9C SVRTKSwKLQkJCQkgIkJNX01BWF9VU0FHRV9DT1VOVCBkb2Vzbid0IGZpdCBpbiBCVUZfVVNB R0VDT1VOVF9CSVRTIGJpdHMiKTsKKwkJCQkgImNvb2xpbmcgc3RhdGUgZG9lc24ndCBmaXQg aW4gQlVGX1VTQUdFQ09VTlRfQklUUyBiaXRzIik7CiAKIC8qCiAgKiBCdWZmZXIgdGFnIGlk ZW50aWZpZXMgd2hpY2ggZGlzayBibG9jayB0aGUgYnVmZmVyIGNvbnRhaW5zLgotLSAKMi41 MS4yCgo= --eb6ebdb126a89898ab85d3de614c44896735dbb9 Content-Disposition: attachment; filename*0="v5-0003-Remove-BufferAccessStrategy-scan-resistance-is-no.pat"; filename*1="ch" Content-Type: text/x-patch; name="=?UTF-8?Q?v5-0003-Remove-BufferAccessStrategy-scan-resistance-is-no.patc?= =?UTF-8?Q?h?=" Content-Transfer-Encoding: base64 RnJvbSBkNjU2ZmUzZTMyMWE2ODk2YjgzNGEzYzJkOGQ3Y2UzYzBhYmJjZTM0IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBHcmVnIEJ1cmQgPGdyZWdAYnVyZC5tZT4KRGF0ZTog VHVlLCA3IEp1bCAyMDI2IDA4OjQ1OjM5IC0wNDAwClN1YmplY3Q6IFtQQVRDSCB2NSAzLzNd IFJlbW92ZSBCdWZmZXJBY2Nlc3NTdHJhdGVneTsgc2NhbiByZXNpc3RhbmNlIGlzIG5vdwog aW50cmluc2ljCgpUaGUgY29vbGluZy1zdGFnZSBldmljdG9yIGFkbWl0cyBkZW1hbmQtbG9h ZGVkIHBhZ2VzIENPT0wgYW5kIHByb21vdGVzIHRoZW0gdG8KSE9UIG9ubHkgb24gYSBzZWNv bmQgYWNjZXNzLCBzbyBhIG9uZS10b3VjaCBzZXF1ZW50aWFsIHNjYW4gZmlsbHMgYW5kIGRy YWlucwp0aGUgQ09PTCBzdGFnZSB3aXRob3V0IGRpc3BsYWNpbmcgdGhlIGhvdCB3b3JraW5n IHNldC4gIFNjYW4gcmVzaXN0YW5jZSBpcwp0aGVyZWZvcmUgYSBwcm9wZXJ0eSBvZiB0aGUg cmVwbGFjZW1lbnQgYWxnb3JpdGhtIGl0c2VsZiwgYW5kIHRoZQpCdWZmZXJBY2Nlc3NTdHJh dGVneSByaW5nIGJ1ZmZlcnMgdGhhdCBwcmV2aW91c2x5IHByb3ZpZGVkIGl0IGFyZSBkZWFk IHdlaWdodC4KUmVtb3ZlIHRoZW0gZW5kIHRvIGVuZC4KCkRlbGV0ZWQ6CiAgLSB0aGUgQnVm ZmVyQWNjZXNzU3RyYXRlZ3kgdHlwZSBhbmQgdGhlIEJ1ZmZlckFjY2Vzc1N0cmF0ZWd5VHlw ZSBlbnVtCiAgICAoQkFTX05PUk1BTC9CVUxLUkVBRC9CVUxLV1JJVEUvVkFDVVVNKTsKICAt IHRoZSByaW5nIG1hY2hpbmVyeSBpbiBmcmVlbGlzdC5jIChHZXRBY2Nlc3NTdHJhdGVneVtX aXRoU2l6ZV0sCiAgICBHZXRBY2Nlc3NTdHJhdGVneUJ1ZmZlckNvdW50LCBHZXRBY2Nlc3NT dHJhdGVneVBpbkxpbWl0LAogICAgRnJlZUFjY2Vzc1N0cmF0ZWd5LCBHZXRCdWZmZXJGcm9t UmluZywgQWRkQnVmZmVyVG9SaW5nLAogICAgU3RyYXRlZ3lSZWplY3RCdWZmZXIsIElPQ29u dGV4dEZvclN0cmF0ZWd5KTsKICAtIHRoZSBzdHJhdGVneSBwYXJhbWV0ZXIgZnJvbSBSZWFk QnVmZmVyRXh0ZW5kZWQsIFJlYWRCdWZmZXJXaXRob3V0UmVsY2FjaGUsCiAgICB0aGUgRXh0 ZW5kQnVmZmVyZWRSZWwqIGZhbWlseSwgU3RyYXRlZ3lHZXRCdWZmZXIsIHJlYWRfc3RyZWFt X2JlZ2luXyosCiAgICBhbmQgZXZlcnkgc2Nhbi92YWN1dW0vYW5hbHl6ZS9pbmRleC1BTSBj YWxsZXI7CiAgLSB0aGUgc3RyYXRlZ3kgZmllbGRzIG9uIEhlYXBTY2FuRGVzY0RhdGEsIElu ZGV4U2NhbkRlc2NEYXRhLAogICAgQnVsa0luc2VydFN0YXRlRGF0YSwgUmVhZEJ1ZmZlcnNP cGVyYXRpb24sIGFuZCBSZWFkU3RyZWFtOwogIC0gX2hhc2hfZ2V0YnVmX3dpdGhfc3RyYXRl Z3kgKGlkZW50aWNhbCB0byBfaGFzaF9nZXRidWYgd2l0aG91dCBhIHN0cmF0ZWd5KS4KCnBn X3N0YXRfaW8ncyBwZXItc3RyYXRlZ3kgSU8gY29udGV4dHMgY29sbGFwc2U6IElPQ09OVEVY VF9CVUxLUkVBRCwKSU9DT05URVhUX0JVTEtXUklURSBhbmQgSU9DT05URVhUX1ZBQ1VVTSBh cmUgcmVtb3ZlZCwgbGVhdmluZyBJT0NPTlRFWFRfSU5JVAphbmQgSU9DT05URVhUX05PUk1B TC4gIElPT1BfUkVVU0Ugb25seSBldmVyIG9jY3VycmVkIHdoaWxlIHJlY3ljbGluZyBhIHJp bmcKYnVmZmVyLCBzbyBpdCBpcyBubyBsb25nZXIgdHJhY2tlZDsgR2V0VmljdGltQnVmZmVy IGNvdW50cyBJT09QX0VWSUNUIG9ubHkuCgpUaGUgdmFjdXVtX2J1ZmZlcl91c2FnZV9saW1p dCBHVUMgYW5kIHRoZSBWQUNVVU0vQU5BTFlaRSAoQlVGRkVSX1VTQUdFX0xJTUlUCi4uLikg b3B0aW9uIGFyZSByZW1vdmVkLCBhbG9uZyB3aXRoIHRoZSBWYWN1dW1CdWZmZXJVc2FnZUxp bWl0IGdsb2JhbCwgdGhlCnJpbmctc2l6ZSBwbHVtYmluZyB0aHJvdWdoIFZhY3V1bVBhcmFt cyBhbmQgcGFyYWxsZWwgdmFjdXVtLCBhbmQgdmFjdXVtZGIncwotLWJ1ZmZlci11c2FnZS1s aW1pdCBjbGllbnQgb3B0aW9uLiAgcmVhZF9zdHJlYW0ncyBwZXItYmFja2VuZCBwaW4gYnVk Z2V0IGlzCm5vdyBlbmZvcmNlZCBzb2xlbHkgYnkgR2V0UGluTGltaXQoKS9HZXRMb2NhbFBp bkxpbWl0KCksIHdoaWNoIGFscmVhZHkgYXBwbGllZAphbmQgaXMgdW5jaGFuZ2VkIGZvciB0 aGUgKGZvcm1lcmx5IHVuaXZlcnNhbCkgbm8tc3RyYXRlZ3kgY2FzZS4KCkRvY3VtZW50YXRp b24gYW5kIHRoZSBzdGF0cy9hbWNoZWNrIHJlZ3Jlc3Npb24gdGVzdHMgYXJlIHVwZGF0ZWQg dG8gZHJvcCB0aGUKcmVtb3ZlZCBjb250ZXh0cyBhbmQgb3B0aW9ucy4KLS0tCiBjb250cmli L2FtY2hlY2svZXhwZWN0ZWQvY2hlY2tfaGVhcC5vdXQgICAgICAgfCAgMTYgKy0KIGNvbnRy aWIvYW1jaGVjay9zcWwvY2hlY2tfaGVhcC5zcWwgICAgICAgICAgICB8ICAxNiArLQogY29u dHJpYi9hbWNoZWNrL3ZlcmlmeV9naW4uYyAgICAgICAgICAgICAgICAgIHwgIDE4ICstCiBj b250cmliL2FtY2hlY2svdmVyaWZ5X2hlYXBhbS5jICAgICAgICAgICAgICAgfCAgIDMgLQog Y29udHJpYi9hbWNoZWNrL3ZlcmlmeV9uYnRyZWUuYyAgICAgICAgICAgICAgIHwgIDExICst CiBjb250cmliL2Jsb29tL2Jsc2Nhbi5jICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDgg LQogY29udHJpYi9ibG9vbS9ibHV0aWxzLmMgICAgICAgICAgICAgICAgICAgICAgIHwgICA0 ICstCiBjb250cmliL2Jsb29tL2JsdmFjdXVtLmMgICAgICAgICAgICAgICAgICAgICAgfCAg IDIgLQogY29udHJpYi9wYWdlaW5zcGVjdC9yYXdwYWdlLmMgICAgICAgICAgICAgICAgIHwg ICAyICstCiBjb250cmliL3BnX3ByZXdhcm0vYXV0b3ByZXdhcm0uYyAgICAgICAgICAgICAg fCAgIDEgLQogY29udHJpYi9wZ19wcmV3YXJtL3BnX3ByZXdhcm0uYyAgICAgICAgICAgICAg IHwgICAxIC0KIGNvbnRyaWIvcGdfdmlzaWJpbGl0eS9wZ192aXNpYmlsaXR5LmMgICAgICAg ICB8ICAgNyArLQogY29udHJpYi9wZ3N0YXR0dXBsZS9wZ3N0YXRhcHByb3guYyAgICAgICAg ICAgIHwgICAzIC0KIGNvbnRyaWIvcGdzdGF0dHVwbGUvcGdzdGF0aW5kZXguYyAgICAgICAg ICAgICB8ICAgOSArLQogY29udHJpYi9wZ3N0YXR0dXBsZS9wZ3N0YXR0dXBsZS5jICAgICAg ICAgICAgIHwgIDM3ICstCiBkb2Mvc3JjL3NnbWwvY29uZmlnLnNnbWwgICAgICAgICAgICAg ICAgICAgICAgfCAgMzAgLS0KIGRvYy9zcmMvc2dtbC9tb25pdG9yaW5nLnNnbWwgICAgICAg ICAgICAgICAgICB8ICAzOCArLQogZG9jL3NyYy9zZ21sL3JlZi9hbmFseXplLnNnbWwgICAg ICAgICAgICAgICAgIHwgIDIxIC0KIGRvYy9zcmMvc2dtbC9yZWYvdmFjdXVtLnNnbWwgICAg ICAgICAgICAgICAgICB8ICAyNSAtCiBzcmMvYmFja2VuZC9hY2Nlc3MvYnJpbi9icmluLmMg ICAgICAgICAgICAgICAgfCAgMTEgKy0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9icmluL2JyaW5f cmV2bWFwLmMgICAgICAgICB8ICAgMiArLQogc3JjL2JhY2tlbmQvYWNjZXNzL2dpbi9naW5p bnNlcnQuYyAgICAgICAgICAgIHwgICA0ICstCiBzcmMvYmFja2VuZC9hY2Nlc3MvZ2luL2dp bnV0aWwuYyAgICAgICAgICAgICAgfCAgIDIgKy0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9naW4v Z2ludmFjdXVtLmMgICAgICAgICAgICB8ICAxNyArLQogc3JjL2JhY2tlbmQvYWNjZXNzL2dp c3QvZ2lzdC5jICAgICAgICAgICAgICAgIHwgICAyICstCiBzcmMvYmFja2VuZC9hY2Nlc3Mv Z2lzdC9naXN0dXRpbC5jICAgICAgICAgICAgfCAgIDIgKy0KIHNyYy9iYWNrZW5kL2FjY2Vz cy9naXN0L2dpc3R2YWN1dW0uYyAgICAgICAgICB8ICAxMCArLQogc3JjL2JhY2tlbmQvYWNj ZXNzL2hhc2gvaGFzaC5jICAgICAgICAgICAgICAgIHwgIDEzICstCiBzcmMvYmFja2VuZC9h Y2Nlc3MvaGFzaC9oYXNob3ZmbC5jICAgICAgICAgICAgfCAgNTUgKy0tCiBzcmMvYmFja2Vu ZC9hY2Nlc3MvaGFzaC9oYXNocGFnZS5jICAgICAgICAgICAgfCAgNDAgKy0KIHNyYy9iYWNr ZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbS5jICAgICAgICAgICAgICB8ICAzMSArLQogc3JjL2Jh Y2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtX2hhbmRsZXIuYyAgICAgIHwgICA0ICstCiBzcmMv YmFja2VuZC9hY2Nlc3MvaGVhcC9oaW8uYyAgICAgICAgICAgICAgICAgfCAgMTMgKy0KIHNy Yy9iYWNrZW5kL2FjY2Vzcy9oZWFwL3ZhY3V1bWxhenkuYyAgICAgICAgICB8ICAyMiArLQog c3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvdmlzaWJpbGl0eW1hcC5jICAgICAgIHwgICA0ICst CiBzcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHBhZ2UuYyAgICAgICAgICAgfCAgIDIg Ky0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0cmVlLmMgICAgICAgICAgICB8ICAg NCArLQogc3JjL2JhY2tlbmQvYWNjZXNzL3NwZ2lzdC9zcGd1dGlscy5jICAgICAgICAgIHwg ICAyICstCiBzcmMvYmFja2VuZC9hY2Nlc3Mvc3BnaXN0L3NwZ3ZhY3V1bS5jICAgICAgICAg fCAgIDQgKy0KIHNyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2dpbnNlcnQuYyAgICAg ICB8ICAgMiArLQogc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGxvZ3V0aWxzLmMgICAg ICAgIHwgICAzICstCiBzcmMvYmFja2VuZC9jYXRhbG9nL2luZGV4LmMgICAgICAgICAgICAg ICAgICAgfCAgIDEgLQogc3JjL2JhY2tlbmQvY29tbWFuZHMvYW5hbHl6ZS5jICAgICAgICAg ICAgICAgIHwgICA3ICstCiBzcmMvYmFja2VuZC9jb21tYW5kcy9kYmNvbW1hbmRzLmMgICAg ICAgICAgICAgfCAgIDYgKy0KIHNyYy9iYWNrZW5kL2NvbW1hbmRzL3JlcGFjay5jICAgICAg ICAgICAgICAgICB8ICAgMiArLQogc3JjL2JhY2tlbmQvY29tbWFuZHMvc2VxdWVuY2UuYyAg ICAgICAgICAgICAgIHwgICAyICstCiBzcmMvYmFja2VuZC9jb21tYW5kcy92YWN1dW0uYyAg ICAgICAgICAgICAgICAgfCAxMTggKy0tLS0KIHNyYy9iYWNrZW5kL2NvbW1hbmRzL3ZhY3V1 bXBhcmFsbGVsLmMgICAgICAgICB8ICAyMSArLQogc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9h dXRvdmFjdXVtLmMgICAgICAgICAgIHwgIDI5ICstCiBzcmMvYmFja2VuZC9wb3N0bWFzdGVy L2RhdGFjaGVja3N1bV9zdGF0ZS5jICAgfCAgMzMgKy0KIHNyYy9iYWNrZW5kL3N0b3JhZ2Uv YWlvL3JlYWRfc3RyZWFtLmMgICAgICAgICB8ICAxNyArLQogc3JjL2JhY2tlbmQvc3RvcmFn ZS9idWZmZXIvUkVBRE1FICAgICAgICAgICAgIHwgIDQ0IC0tCiBzcmMvYmFja2VuZC9zdG9y YWdlL2J1ZmZlci9idWZtZ3IuYyAgICAgICAgICAgfCAxODUgKysrLS0tLS0KIHNyYy9iYWNr ZW5kL3N0b3JhZ2UvYnVmZmVyL2ZyZWVsaXN0LmMgICAgICAgICB8IDQzNCArLS0tLS0tLS0t LS0tLS0tLS0KIHNyYy9iYWNrZW5kL3N0b3JhZ2UvZnJlZXNwYWNlL2ZyZWVzcGFjZS5jICAg ICB8ICAgNCArLQogc3JjL2JhY2tlbmQvc3RvcmFnZS9zbWdyL21kLmMgICAgICAgICAgICAg ICAgIHwgIDExICstCiBzcmMvYmFja2VuZC91dGlscy9hY3Rpdml0eS9wZ3N0YXRfaW8uYyAg ICAgICAgfCAgNDUgKy0KIHNyYy9iYWNrZW5kL3V0aWxzL2luaXQvZ2xvYmFscy5jICAgICAg ICAgICAgICB8ICAgMSAtCiBzcmMvYmFja2VuZC91dGlscy9taXNjL2d1Y19wYXJhbWV0ZXJz LmRhdCAgICAgfCAgMTAgLQogc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9wb3N0Z3Jlc3FsLmNv bmYuc2FtcGxlIHwgICAzIC0KIHNyYy9iaW4vc2NyaXB0cy92YWN1dW1kYi5jICAgICAgICAg ICAgICAgICAgICB8ICAxMyAtCiBzcmMvYmluL3NjcmlwdHMvdmFjdXVtaW5nLmMgICAgICAg ICAgICAgICAgICAgfCAgMjEgLQogc3JjL2Jpbi9zY3JpcHRzL3ZhY3V1bWluZy5oICAgICAg ICAgICAgICAgICAgIHwgICAxIC0KIHNyYy9pbmNsdWRlL2FjY2Vzcy9nZW5hbS5oICAgICAg ICAgICAgICAgICAgICB8ICAgMSAtCiBzcmMvaW5jbHVkZS9hY2Nlc3MvaGFzaC5oICAgICAg ICAgICAgICAgICAgICAgfCAgIDkgKy0KIHNyYy9pbmNsdWRlL2FjY2Vzcy9oZWFwYW0uaCAg ICAgICAgICAgICAgICAgICB8ICAgNCArLQogc3JjL2luY2x1ZGUvYWNjZXNzL2hpby5oICAg ICAgICAgICAgICAgICAgICAgIHwgICAxIC0KIHNyYy9pbmNsdWRlL2FjY2Vzcy90YWJsZWFt LmggICAgICAgICAgICAgICAgICB8ICAgOCArLQogc3JjL2luY2x1ZGUvY29tbWFuZHMvdmFj dXVtLmggICAgICAgICAgICAgICAgIHwgICA4ICstCiBzcmMvaW5jbHVkZS9taXNjYWRtaW4u aCAgICAgICAgICAgICAgICAgICAgICAgfCAgIDkgLQogc3JjL2luY2x1ZGUvcGdzdGF0Lmgg ICAgICAgICAgICAgICAgICAgICAgICAgIHwgICA1ICstCiBzcmMvaW5jbHVkZS9zdG9yYWdl L2J1Zi5oICAgICAgICAgICAgICAgICAgICAgfCAgIDcgLQogc3JjL2luY2x1ZGUvc3RvcmFn ZS9idWZfaW50ZXJuYWxzLmggICAgICAgICAgIHwgICA2ICstCiBzcmMvaW5jbHVkZS9zdG9y YWdlL2J1Zm1nci5oICAgICAgICAgICAgICAgICAgfCAgMzIgKy0KIHNyYy9pbmNsdWRlL3N0 b3JhZ2UvcmVhZF9zdHJlYW0uaCAgICAgICAgICAgICB8ICAgNSArLQogc3JjL2luY2x1ZGUv dXRpbHMvZ3VjX2hvb2tzLmggICAgICAgICAgICAgICAgIHwgICAyIC0KIHNyYy90ZXN0L21v ZHVsZXMvdGVzdF9haW8vdGVzdF9haW8uYyAgICAgICAgICB8ICAgNyArLQogc3JjL3Rlc3Qv cmVncmVzcy9leHBlY3RlZC9zdGF0cy5vdXQgICAgICAgICAgIHwgMTIwICstLS0tCiBzcmMv dGVzdC9yZWdyZXNzL2V4cGVjdGVkL3ZhY3V1bS5vdXQgICAgICAgICAgfCAgMTkgLQogc3Jj L3Rlc3QvcmVncmVzcy9zcWwvc3RhdHMuc3FsICAgICAgICAgICAgICAgIHwgIDQyIC0tCiBz cmMvdGVzdC9yZWdyZXNzL3NxbC92YWN1dW0uc3FsICAgICAgICAgICAgICAgfCAgMTUgLQog c3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QgICAgICAgICAgICAgIHwgICAyIC0K IDgyIGZpbGVzIGNoYW5nZWQsIDI1MiBpbnNlcnRpb25zKCspLCAxNTU5IGRlbGV0aW9ucygt KQoKZGlmZiAtLWdpdCBhL2NvbnRyaWIvYW1jaGVjay9leHBlY3RlZC9jaGVja19oZWFwLm91 dCBiL2NvbnRyaWIvYW1jaGVjay9leHBlY3RlZC9jaGVja19oZWFwLm91dAppbmRleCA5Nzll NWU4NGU3Mi4uNTY5YjAyMDJmMWMgMTAwNjQ0Ci0tLSBhL2NvbnRyaWIvYW1jaGVjay9leHBl Y3RlZC9jaGVja19oZWFwLm91dAorKysgYi9jb250cmliL2FtY2hlY2svZXhwZWN0ZWQvY2hl Y2tfaGVhcC5vdXQKQEAgLTY3LDExICs2NywxMSBAQCBJTlNFUlQgSU5UTyBoZWFwdGVzdCAo YSwgYikKIAkoU0VMRUNUIGdzLCByZXBlYXQoJ3gnLCBncykKIAkJRlJPTSBnZW5lcmF0ZV9z ZXJpZXMoMSw1MCkgZ3MpOwogLS0gcGdfc3RhdF9pbyB0ZXN0OgotLS0gdmVyaWZ5X2hlYXBh bSBhbHdheXMgdXNlcyBhIEJBU19CVUxLUkVBRCBCdWZmZXJBY2Nlc3NTdHJhdGVneSwgd2hl cmVhcyBhCi0tLSBzZXF1ZW50aWFsIHNjYW4gZG9lcyBzbyBvbmx5IGlmIHRoZSB0YWJsZSBp cyBsYXJnZSBlbm91Z2ggd2hlbiBjb21wYXJlZCB0bwotLS0gc2hhcmVkIGJ1ZmZlcnMgKHNl ZSBpbml0c2NhbigpKS4gQ1JFQVRFIERBVEFCQVNFIC4uLiBhbHNvIHVuY29uZGl0aW9uYWxs eQotLS0gdXNlcyBhIEJBU19CVUxLUkVBRCBzdHJhdGVneSwgYnV0IHdlIGhhdmUgY2hvc2Vu IHRvIHVzZSBhIHRhYmxlc3BhY2UgYW5kCi0tLSB2ZXJpZnlfaGVhcGFtIHRvIHByb3ZpZGUg Y292ZXJhZ2UgaW5zdGVhZCBvZiBhZGRpbmcgYW5vdGhlciBleHBlbnNpdmUKKy0tIHZlcmlm eV9oZWFwYW0gcmVhZHMgdGhlIGhlYXAgdGhyb3VnaCB0aGUgYnVmZmVyIG1hbmFnZXI7IHdp dGggdGhlCistLSBjb29saW5nLXN0YWdlIGNsb2NrIHN3ZWVwIHRoZXJlIGFyZSBubyBwZXIt c3RyYXRlZ3kgSU8gY29udGV4dHMsIHNvIHRoZQorLS0gcmVhZHMgYXJlIGNvdW50ZWQgaW4g dGhlICdub3JtYWwnIGNvbnRleHQuICBDUkVBVEUgREFUQUJBU0UgLi4uIGxpa2V3aXNlCist LSByZWFkcyB0aHJvdWdoIHRoZSBub3JtYWwgY29udGV4dCwgYnV0IHdlIGhhdmUgY2hvc2Vu IHRvIHVzZSBhIHRhYmxlc3BhY2UKKy0tIGFuZCB2ZXJpZnlfaGVhcGFtIHRvIHByb3ZpZGUg Y292ZXJhZ2UgaW5zdGVhZCBvZiBhZGRpbmcgYW5vdGhlciBleHBlbnNpdmUKIC0tIG9wZXJh dGlvbiB0byB0aGUgbWFpbiByZWdyZXNzaW9uIHRlc3Qgc3VpdGUuCiAtLQogLS0gQ3JlYXRl IGFuIGFsdGVybmF0aXZlIHRhYmxlc3BhY2UgYW5kIG1vdmUgdGhlIGhlYXB0ZXN0IHRhYmxl IHRvIGl0LCBjYXVzaW5nCkBAIC04Myw3ICs4Myw3IEBAIElOU0VSVCBJTlRPIGhlYXB0ZXN0 IChhLCBiKQogU0VUIGFsbG93X2luX3BsYWNlX3RhYmxlc3BhY2VzID0gdHJ1ZTsKIENSRUFU RSBUQUJMRVNQQUNFIHJlZ3Jlc3NfdGVzdF9zdGF0c190YmxzcGMgTE9DQVRJT04gJyc7CiBT RUxFQ1Qgc3VtKHJlYWRzKSBBUyBzdGF0c19idWxrcmVhZHNfYmVmb3JlCi0gIEZST00gcGdf c3RhdF9pbyBXSEVSRSBjb250ZXh0ID0gJ2J1bGtyZWFkJyBcZ3NldAorICBGUk9NIHBnX3N0 YXRfaW8gV0hFUkUgY29udGV4dCA9ICdub3JtYWwnIEFORCBvYmplY3QgPSAncmVsYXRpb24n IFxnc2V0CiBCRUdJTjsKIEFMVEVSIFRBQkxFIGhlYXB0ZXN0IFNFVCBUQUJMRVNQQUNFIHJl Z3Jlc3NfdGVzdF9zdGF0c190YmxzcGM7CiAtLSBDaGVjayB0aGF0IHZhbGlkIG9wdGlvbnMg YXJlIG5vdCByZWplY3RlZCBub3IgY29ycnVwdGlvbiByZXBvcnRlZApAQCAtMTExLDcgKzEx MSw3IEBAIFNFTEVDVCAqIEZST00gdmVyaWZ5X2hlYXBhbShyZWxhdGlvbiA6PSAnaGVhcHRl c3QnLCBzdGFydGJsb2NrIDo9IDAsIGVuZGJsb2NrIDo9CiBDT01NSVQ7CiAtLSB2ZXJpZnlf aGVhcGFtIHNob3VsZCBoYXZlIHJlYWQgaW4gdGhlIHBhZ2Ugd3JpdHRlbiBvdXQgYnkKIC0t ICAgQUxURVIgVEFCTEUgLi4uIFNFVCBUQUJMRVNQQUNFIC4uLgotLS0gY2F1c2luZyBhbiBh ZGRpdGlvbmFsIGJ1bGtyZWFkLCB3aGljaCBzaG91bGQgYmUgcmVmbGVjdGVkIGluIHBnX3N0 YXRfaW8uCistLSBjYXVzaW5nIGFkZGl0aW9uYWwgcmVhZHMsIHdoaWNoIHNob3VsZCBiZSBy ZWZsZWN0ZWQgaW4gcGdfc3RhdF9pby4KIFNFTEVDVCBwZ19zdGF0X2ZvcmNlX25leHRfZmx1 c2goKTsKICBwZ19zdGF0X2ZvcmNlX25leHRfZmx1c2ggCiAtLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQpAQCAtMTE5LDcgKzExOSw3IEBAIFNFTEVDVCBwZ19zdGF0X2ZvcmNlX25leHRf Zmx1c2goKTsKICgxIHJvdykKIAogU0VMRUNUIHN1bShyZWFkcykgQVMgc3RhdHNfYnVsa3Jl YWRzX2FmdGVyCi0gIEZST00gcGdfc3RhdF9pbyBXSEVSRSBjb250ZXh0ID0gJ2J1bGtyZWFk JyBcZ3NldAorICBGUk9NIHBnX3N0YXRfaW8gV0hFUkUgY29udGV4dCA9ICdub3JtYWwnIEFO RCBvYmplY3QgPSAncmVsYXRpb24nIFxnc2V0CiBTRUxFQ1QgOnN0YXRzX2J1bGtyZWFkc19h ZnRlciA+IDpzdGF0c19idWxrcmVhZHNfYmVmb3JlOwogID9jb2x1bW4/IAogLS0tLS0tLS0t LQpkaWZmIC0tZ2l0IGEvY29udHJpYi9hbWNoZWNrL3NxbC9jaGVja19oZWFwLnNxbCBiL2Nv bnRyaWIvYW1jaGVjay9zcWwvY2hlY2tfaGVhcC5zcWwKaW5kZXggMTc0NWJhZTYzNGUuLjYx ZjcxMGRiZWRhIDEwMDY0NAotLS0gYS9jb250cmliL2FtY2hlY2svc3FsL2NoZWNrX2hlYXAu c3FsCisrKyBiL2NvbnRyaWIvYW1jaGVjay9zcWwvY2hlY2tfaGVhcC5zcWwKQEAgLTI3LDEx ICsyNywxMSBAQCBJTlNFUlQgSU5UTyBoZWFwdGVzdCAoYSwgYikKIAkJRlJPTSBnZW5lcmF0 ZV9zZXJpZXMoMSw1MCkgZ3MpOwogCiAtLSBwZ19zdGF0X2lvIHRlc3Q6Ci0tLSB2ZXJpZnlf aGVhcGFtIGFsd2F5cyB1c2VzIGEgQkFTX0JVTEtSRUFEIEJ1ZmZlckFjY2Vzc1N0cmF0ZWd5 LCB3aGVyZWFzIGEKLS0tIHNlcXVlbnRpYWwgc2NhbiBkb2VzIHNvIG9ubHkgaWYgdGhlIHRh YmxlIGlzIGxhcmdlIGVub3VnaCB3aGVuIGNvbXBhcmVkIHRvCi0tLSBzaGFyZWQgYnVmZmVy cyAoc2VlIGluaXRzY2FuKCkpLiBDUkVBVEUgREFUQUJBU0UgLi4uIGFsc28gdW5jb25kaXRp b25hbGx5Ci0tLSB1c2VzIGEgQkFTX0JVTEtSRUFEIHN0cmF0ZWd5LCBidXQgd2UgaGF2ZSBj aG9zZW4gdG8gdXNlIGEgdGFibGVzcGFjZSBhbmQKLS0tIHZlcmlmeV9oZWFwYW0gdG8gcHJv dmlkZSBjb3ZlcmFnZSBpbnN0ZWFkIG9mIGFkZGluZyBhbm90aGVyIGV4cGVuc2l2ZQorLS0g dmVyaWZ5X2hlYXBhbSByZWFkcyB0aGUgaGVhcCB0aHJvdWdoIHRoZSBidWZmZXIgbWFuYWdl cjsgd2l0aCB0aGUKKy0tIGNvb2xpbmctc3RhZ2UgY2xvY2sgc3dlZXAgdGhlcmUgYXJlIG5v IHBlci1zdHJhdGVneSBJTyBjb250ZXh0cywgc28gdGhlCistLSByZWFkcyBhcmUgY291bnRl ZCBpbiB0aGUgJ25vcm1hbCcgY29udGV4dC4gIENSRUFURSBEQVRBQkFTRSAuLi4gbGlrZXdp c2UKKy0tIHJlYWRzIHRocm91Z2ggdGhlIG5vcm1hbCBjb250ZXh0LCBidXQgd2UgaGF2ZSBj aG9zZW4gdG8gdXNlIGEgdGFibGVzcGFjZQorLS0gYW5kIHZlcmlmeV9oZWFwYW0gdG8gcHJv dmlkZSBjb3ZlcmFnZSBpbnN0ZWFkIG9mIGFkZGluZyBhbm90aGVyIGV4cGVuc2l2ZQogLS0g b3BlcmF0aW9uIHRvIHRoZSBtYWluIHJlZ3Jlc3Npb24gdGVzdCBzdWl0ZS4KIC0tCiAtLSBD cmVhdGUgYW4gYWx0ZXJuYXRpdmUgdGFibGVzcGFjZSBhbmQgbW92ZSB0aGUgaGVhcHRlc3Qg dGFibGUgdG8gaXQsIGNhdXNpbmcKQEAgLTQzLDcgKzQzLDcgQEAgSU5TRVJUIElOVE8gaGVh cHRlc3QgKGEsIGIpCiBTRVQgYWxsb3dfaW5fcGxhY2VfdGFibGVzcGFjZXMgPSB0cnVlOwog Q1JFQVRFIFRBQkxFU1BBQ0UgcmVncmVzc190ZXN0X3N0YXRzX3RibHNwYyBMT0NBVElPTiAn JzsKIFNFTEVDVCBzdW0ocmVhZHMpIEFTIHN0YXRzX2J1bGtyZWFkc19iZWZvcmUKLSAgRlJP TSBwZ19zdGF0X2lvIFdIRVJFIGNvbnRleHQgPSAnYnVsa3JlYWQnIFxnc2V0CisgIEZST00g cGdfc3RhdF9pbyBXSEVSRSBjb250ZXh0ID0gJ25vcm1hbCcgQU5EIG9iamVjdCA9ICdyZWxh dGlvbicgXGdzZXQKIEJFR0lOOwogQUxURVIgVEFCTEUgaGVhcHRlc3QgU0VUIFRBQkxFU1BB Q0UgcmVncmVzc190ZXN0X3N0YXRzX3RibHNwYzsKIC0tIENoZWNrIHRoYXQgdmFsaWQgb3B0 aW9ucyBhcmUgbm90IHJlamVjdGVkIG5vciBjb3JydXB0aW9uIHJlcG9ydGVkCkBAIC01Niwx MCArNTYsMTAgQEAgQ09NTUlUOwogCiAtLSB2ZXJpZnlfaGVhcGFtIHNob3VsZCBoYXZlIHJl YWQgaW4gdGhlIHBhZ2Ugd3JpdHRlbiBvdXQgYnkKIC0tICAgQUxURVIgVEFCTEUgLi4uIFNF VCBUQUJMRVNQQUNFIC4uLgotLS0gY2F1c2luZyBhbiBhZGRpdGlvbmFsIGJ1bGtyZWFkLCB3 aGljaCBzaG91bGQgYmUgcmVmbGVjdGVkIGluIHBnX3N0YXRfaW8uCistLSBjYXVzaW5nIGFk ZGl0aW9uYWwgcmVhZHMsIHdoaWNoIHNob3VsZCBiZSByZWZsZWN0ZWQgaW4gcGdfc3RhdF9p by4KIFNFTEVDVCBwZ19zdGF0X2ZvcmNlX25leHRfZmx1c2goKTsKIFNFTEVDVCBzdW0ocmVh ZHMpIEFTIHN0YXRzX2J1bGtyZWFkc19hZnRlcgotICBGUk9NIHBnX3N0YXRfaW8gV0hFUkUg Y29udGV4dCA9ICdidWxrcmVhZCcgXGdzZXQKKyAgRlJPTSBwZ19zdGF0X2lvIFdIRVJFIGNv bnRleHQgPSAnbm9ybWFsJyBBTkQgb2JqZWN0ID0gJ3JlbGF0aW9uJyBcZ3NldAogU0VMRUNU IDpzdGF0c19idWxrcmVhZHNfYWZ0ZXIgPiA6c3RhdHNfYnVsa3JlYWRzX2JlZm9yZTsKIAog Q1JFQVRFIFJPTEUgcmVncmVzc19oZWFwdGVzdF9yb2xlOwpkaWZmIC0tZ2l0IGEvY29udHJp Yi9hbWNoZWNrL3ZlcmlmeV9naW4uYyBiL2NvbnRyaWIvYW1jaGVjay92ZXJpZnlfZ2luLmMK aW5kZXggZmEwNjY4OWVkNWIuLmVmMmU2NDQ3NWM2IDEwMDY0NAotLS0gYS9jb250cmliL2Ft Y2hlY2svdmVyaWZ5X2dpbi5jCisrKyBiL2NvbnRyaWIvYW1jaGVjay92ZXJpZnlfZ2luLmMK QEAgLTYzLDggKzYzLDcgQEAgc3RhdGljIHZvaWQgZ2luX2NoZWNrX3BhcmVudF9rZXlzX2Nv bnNpc3RlbmN5KFJlbGF0aW9uIHJlbCwKIHN0YXRpYyB2b2lkIGNoZWNrX2luZGV4X3BhZ2Uo UmVsYXRpb24gcmVsLCBCdWZmZXIgYnVmZmVyLCBCbG9ja051bWJlciBibG9ja05vKTsKIHN0 YXRpYyBJbmRleFR1cGxlIGdpbl9yZWZpbmRfcGFyZW50KFJlbGF0aW9uIHJlbCwKIAkJCQkJ CQkJCUJsb2NrTnVtYmVyIHBhcmVudGJsa25vLAotCQkJCQkJCQkJQmxvY2tOdW1iZXIgY2hp bGRibGtubywKLQkJCQkJCQkJCUJ1ZmZlckFjY2Vzc1N0cmF0ZWd5IHN0cmF0ZWd5KTsKKwkJ CQkJCQkJCUJsb2NrTnVtYmVyIGNoaWxkYmxrbm8pOwogc3RhdGljIEl0ZW1JZCBQYWdlR2V0 SXRlbUlkQ2FyZWZ1bChSZWxhdGlvbiByZWwsIEJsb2NrTnVtYmVyIGJsb2NrLCBQYWdlIHBh Z2UsCiAJCQkJCQkJCSAgIE9mZnNldE51bWJlciBvZmZzZXQpOwogCkBAIC0xMzMsNyArMTMy LDYgQEAgZ2luUmVhZFR1cGxlV2l0aG91dFN0YXRlKEluZGV4VHVwbGUgaXR1cCwgaW50ICpu aXRlbXMpCiBzdGF0aWMgdm9pZAogZ2luX2NoZWNrX3Bvc3RpbmdfdHJlZV9wYXJlbnRfa2V5 c19jb25zaXN0ZW5jeShSZWxhdGlvbiByZWwsIEJsb2NrTnVtYmVyIHBvc3RpbmdfdHJlZV9y b290KQogewotCUJ1ZmZlckFjY2Vzc1N0cmF0ZWd5IHN0cmF0ZWd5ID0gR2V0QWNjZXNzU3Ry YXRlZ3koQkFTX0JVTEtSRUFEKTsKIAlHaW5Qb3N0aW5nVHJlZVNjYW5JdGVtICpzdGFjazsK IAlNZW1vcnlDb250ZXh0IG1jdHg7CiAJTWVtb3J5Q29udGV4dCBvbGRjb250ZXh0OwpAQCAt MTcxLDggKzE2OSw3IEBAIGdpbl9jaGVja19wb3N0aW5nX3RyZWVfcGFyZW50X2tleXNfY29u c2lzdGVuY3koUmVsYXRpb24gcmVsLCBCbG9ja051bWJlciBwb3N0aW5nCiAKIAkJQ0hFQ0tf Rk9SX0lOVEVSUlVQVFMoKTsKIAotCQlidWZmZXIgPSBSZWFkQnVmZmVyRXh0ZW5kZWQocmVs LCBNQUlOX0ZPUktOVU0sIHN0YWNrLT5ibGtubywKLQkJCQkJCQkJCVJCTV9OT1JNQUwsIHN0 cmF0ZWd5KTsKKwkJYnVmZmVyID0gUmVhZEJ1ZmZlckV4dGVuZGVkKHJlbCwgTUFJTl9GT1JL TlVNLCBzdGFjay0+Ymxrbm8sIFJCTV9OT1JNQUwpOwogCQlMb2NrQnVmZmVyKGJ1ZmZlciwg R0lOX1NIQVJFKTsKIAkJcGFnZSA9IEJ1ZmZlckdldFBhZ2UoYnVmZmVyKTsKIApAQCAtMzkx LDcgKzM4OCw2IEBAIGdpbl9jaGVja19wYXJlbnRfa2V5c19jb25zaXN0ZW5jeShSZWxhdGlv biByZWwsCiAJCQkJCQkJCSAgdm9pZCAqY2FsbGJhY2tfc3RhdGUsCiAJCQkJCQkJCSAgYm9v bCByZWFkb25seSkKIHsKLQlCdWZmZXJBY2Nlc3NTdHJhdGVneSBzdHJhdGVneSA9IEdldEFj Y2Vzc1N0cmF0ZWd5KEJBU19CVUxLUkVBRCk7CiAJR2luU2Nhbkl0ZW0gKnN0YWNrOwogCU1l bW9yeUNvbnRleHQgbWN0eDsKIAlNZW1vcnlDb250ZXh0IG9sZGNvbnRleHQ7CkBAIC00MzAs OCArNDI2LDcgQEAgZ2luX2NoZWNrX3BhcmVudF9rZXlzX2NvbnNpc3RlbmN5KFJlbGF0aW9u IHJlbCwKIAogCQlDSEVDS19GT1JfSU5URVJSVVBUUygpOwogCi0JCWJ1ZmZlciA9IFJlYWRC dWZmZXJFeHRlbmRlZChyZWwsIE1BSU5fRk9SS05VTSwgc3RhY2stPmJsa25vLAotCQkJCQkJ CQkJUkJNX05PUk1BTCwgc3RyYXRlZ3kpOworCQlidWZmZXIgPSBSZWFkQnVmZmVyRXh0ZW5k ZWQocmVsLCBNQUlOX0ZPUktOVU0sIHN0YWNrLT5ibGtubywgUkJNX05PUk1BTCk7CiAJCUxv Y2tCdWZmZXIoYnVmZmVyLCBHSU5fU0hBUkUpOwogCQlwYWdlID0gQnVmZmVyR2V0UGFnZShi dWZmZXIpOwogCQltYXhvZmYgPSBQYWdlR2V0TWF4T2Zmc2V0TnVtYmVyKHBhZ2UpOwpAQCAt NTY3LDcgKzU2Miw3IEBAIGdpbl9jaGVja19wYXJlbnRfa2V5c19jb25zaXN0ZW5jeShSZWxh dGlvbiByZWwsCiAJCQkJCSAqLwogCQkJCQlwZnJlZShzdGFjay0+cGFyZW50dHVwKTsKIAkJ CQkJc3RhY2stPnBhcmVudHR1cCA9IGdpbl9yZWZpbmRfcGFyZW50KHJlbCwgc3RhY2stPnBh cmVudGJsaywKLQkJCQkJCQkJCQkJCQkJIHN0YWNrLT5ibGtubywgc3RyYXRlZ3kpOworCQkJ CQkJCQkJCQkJCQkgc3RhY2stPmJsa25vKTsKIAogCQkJCQkvKiBXZSBmb3VuZCBpdCAtIG1h a2UgYSBmaW5hbCBjaGVjayBiZWZvcmUgZmFpbGluZyAqLwogCQkJCQlpZiAoIXN0YWNrLT5w YXJlbnR0dXApCkBAIC03MTksNyArNzE0LDcgQEAgY2hlY2tfaW5kZXhfcGFnZShSZWxhdGlv biByZWwsIEJ1ZmZlciBidWZmZXIsIEJsb2NrTnVtYmVyIGJsb2NrTm8pCiAgKi8KIHN0YXRp YyBJbmRleFR1cGxlCiBnaW5fcmVmaW5kX3BhcmVudChSZWxhdGlvbiByZWwsIEJsb2NrTnVt YmVyIHBhcmVudGJsa25vLAotCQkJCSAgQmxvY2tOdW1iZXIgY2hpbGRibGtubywgQnVmZmVy QWNjZXNzU3RyYXRlZ3kgc3RyYXRlZ3kpCisJCQkJICBCbG9ja051bWJlciBjaGlsZGJsa25v KQogewogCUJ1ZmZlcgkJcGFyZW50YnVmOwogCVBhZ2UJCXBhcmVudHBhZ2U7CkBAIC03Mjcs OCArNzIyLDcgQEAgZ2luX3JlZmluZF9wYXJlbnQoUmVsYXRpb24gcmVsLCBCbG9ja051bWJl ciBwYXJlbnRibGtubywKIAkJCQlwYXJlbnRfbWF4b2ZmOwogCUluZGV4VHVwbGUJcmVzdWx0 ID0gTlVMTDsKIAotCXBhcmVudGJ1ZiA9IFJlYWRCdWZmZXJFeHRlbmRlZChyZWwsIE1BSU5f Rk9SS05VTSwgcGFyZW50Ymxrbm8sIFJCTV9OT1JNQUwsCi0JCQkJCQkJCSAgIHN0cmF0ZWd5 KTsKKwlwYXJlbnRidWYgPSBSZWFkQnVmZmVyRXh0ZW5kZWQocmVsLCBNQUlOX0ZPUktOVU0s IHBhcmVudGJsa25vLCBSQk1fTk9STUFMKTsKIAogCUxvY2tCdWZmZXIocGFyZW50YnVmLCBH SU5fU0hBUkUpOwogCXBhcmVudHBhZ2UgPSBCdWZmZXJHZXRQYWdlKHBhcmVudGJ1Zik7CmRp ZmYgLS1naXQgYS9jb250cmliL2FtY2hlY2svdmVyaWZ5X2hlYXBhbS5jIGIvY29udHJpYi9h bWNoZWNrL3ZlcmlmeV9oZWFwYW0uYwppbmRleCAyMGZmNThhYTc4Mi4uZTQzMzZlYjVmYzIg MTAwNjQ0Ci0tLSBhL2NvbnRyaWIvYW1jaGVjay92ZXJpZnlfaGVhcGFtLmMKKysrIGIvY29u dHJpYi9hbWNoZWNrL3ZlcmlmeV9oZWFwYW0uYwpAQCAtMTI2LDcgKzEyNiw2IEBAIHR5cGVk ZWYgc3RydWN0IEhlYXBDaGVja0NvbnRleHQKIAkgKiByZWNlbnQgYmxvY2sgaW4gdGhlIGJ1 ZmZlciB5aWVsZGVkIGJ5IHRoZSByZWFkIHN0cmVhbSBBUEkuCiAJICovCiAJQmxvY2tOdW1i ZXIgYmxrbm87Ci0JQnVmZmVyQWNjZXNzU3RyYXRlZ3kgYnN0cmF0ZWd5OwogCUJ1ZmZlcgkJ YnVmZmVyOwogCVBhZ2UJCXBhZ2U7CiAKQEAgLTM3NCw3ICszNzMsNiBAQCB2ZXJpZnlfaGVh cGFtKFBHX0ZVTkNUSU9OX0FSR1MpCiAJCVBHX1JFVFVSTl9OVUxMKCk7CiAJfQogCi0JY3R4 LmJzdHJhdGVneSA9IEdldEFjY2Vzc1N0cmF0ZWd5KEJBU19CVUxLUkVBRCk7CiAJY3R4LmJ1 ZmZlciA9IEludmFsaWRCdWZmZXI7CiAJY3R4LnBhZ2UgPSBOVUxMOwogCkBAIC00NzIsNyAr NDcwLDYgQEAgdmVyaWZ5X2hlYXBhbShQR19GVU5DVElPTl9BUkdTKQogCX0KIAogCXN0cmVh bSA9IHJlYWRfc3RyZWFtX2JlZ2luX3JlbGF0aW9uKHN0cmVhbV9mbGFncywKLQkJCQkJCQkJ CQljdHguYnN0cmF0ZWd5LAogCQkJCQkJCQkJCWN0eC5yZWwsCiAJCQkJCQkJCQkJTUFJTl9G T1JLTlVNLAogCQkJCQkJCQkJCXN0cmVhbV9jYiwKZGlmZiAtLWdpdCBhL2NvbnRyaWIvYW1j aGVjay92ZXJpZnlfbmJ0cmVlLmMgYi9jb250cmliL2FtY2hlY2svdmVyaWZ5X25idHJlZS5j CmluZGV4IDNlZjJkNjZmODI2Li4xOGNkODkyOGZkZCAxMDA2NDQKLS0tIGEvY29udHJpYi9h bWNoZWNrL3ZlcmlmeV9uYnRyZWUuYworKysgYi9jb250cmliL2FtY2hlY2svdmVyaWZ5X25i dHJlZS5jCkBAIC04OCw4ICs4OCw2IEBAIHR5cGVkZWYgc3RydWN0IEJ0cmVlQ2hlY2tTdGF0 ZQogCWJvb2wJCWNoZWNrdW5pcXVlOwogCS8qIFBlci1wYWdlIGNvbnRleHQgKi8KIAlNZW1v cnlDb250ZXh0IHRhcmdldGNvbnRleHQ7Ci0JLyogQnVmZmVyIGFjY2VzcyBzdHJhdGVneSAq LwotCUJ1ZmZlckFjY2Vzc1N0cmF0ZWd5IGNoZWNrc3RyYXRlZ3k7CiAKIAkvKgogCSAqIElu Zm8gZm9yIHVuaXF1ZW5lc3MgY2hlY2tpbmcuIEZpbGwgdGhpcyBmaWVsZCBhbmQgdGhlIG9u ZSBiZWxvdyBvbmNlCkBAIC00OTAsNyArNDg4LDYgQEAgYnRfY2hlY2tfZXZlcnlfbGV2ZWwo UmVsYXRpb24gcmVsLCBSZWxhdGlvbiBoZWFwcmVsLCBib29sIGhlYXBrZXlzcGFjZSwKIAlz dGF0ZS0+dGFyZ2V0Y29udGV4dCA9IEFsbG9jU2V0Q29udGV4dENyZWF0ZShDdXJyZW50TWVt b3J5Q29udGV4dCwKIAkJCQkJCQkJCQkJCSAiYW1jaGVjayBjb250ZXh0IiwKIAkJCQkJCQkJ CQkJCSBBTExPQ1NFVF9ERUZBVUxUX1NJWkVTKTsKLQlzdGF0ZS0+Y2hlY2tzdHJhdGVneSA9 IEdldEFjY2Vzc1N0cmF0ZWd5KEJBU19CVUxLUkVBRCk7CiAKIAkvKiBHZXQgdHJ1ZSByb290 IGJsb2NrIGZyb20gbWV0YS1wYWdlICovCiAJbWV0YXBhZ2UgPSBwYWxsb2NfYnRyZWVfcGFn ZShzdGF0ZSwgQlRSRUVfTUVUQVBBR0UpOwpAQCAtMTExNSw3ICsxMTEyLDcgQEAgYnRfcmVj aGVja19zaWJsaW5nX2xpbmtzKEJ0cmVlQ2hlY2tTdGF0ZSAqc3RhdGUsCiAKIAkJLyogQ291 cGxlIGxvY2tzIGluIHRoZSB1c3VhbCBvcmRlciBmb3IgbmJ0cmVlOiAgTGVmdCB0byByaWdo dCAqLwogCQlsYnVmID0gUmVhZEJ1ZmZlckV4dGVuZGVkKHN0YXRlLT5yZWwsIE1BSU5fRk9S S05VTSwgbGVmdGN1cnJlbnQsCi0JCQkJCQkJCSAgUkJNX05PUk1BTCwgc3RhdGUtPmNoZWNr c3RyYXRlZ3kpOworCQkJCQkJCQkgIFJCTV9OT1JNQUwpOwogCQlMb2NrQnVmZmVyKGxidWYs IEJUX1JFQUQpOwogCQlfYnRfY2hlY2twYWdlKHN0YXRlLT5yZWwsIGxidWYpOwogCQlwYWdl ID0gQnVmZmVyR2V0UGFnZShsYnVmKTsKQEAgLTExMzgsOCArMTEzNSw3IEBAIGJ0X3JlY2hl Y2tfc2libGluZ19saW5rcyhCdHJlZUNoZWNrU3RhdGUgKnN0YXRlLAogCQlpZiAobmV3dGFy Z2V0YmxvY2sgIT0gbGVmdGN1cnJlbnQpCiAJCXsKIAkJCW5ld3RhcmdldGJ1ZiA9IFJlYWRC dWZmZXJFeHRlbmRlZChzdGF0ZS0+cmVsLCBNQUlOX0ZPUktOVU0sCi0JCQkJCQkJCQkJCSAg bmV3dGFyZ2V0YmxvY2ssIFJCTV9OT1JNQUwsCi0JCQkJCQkJCQkJCSAgc3RhdGUtPmNoZWNr c3RyYXRlZ3kpOworCQkJCQkJCQkJCQkgIG5ld3RhcmdldGJsb2NrLCBSQk1fTk9STUFMKTsK IAkJCUxvY2tCdWZmZXIobmV3dGFyZ2V0YnVmLCBCVF9SRUFEKTsKIAkJCV9idF9jaGVja3Bh Z2Uoc3RhdGUtPnJlbCwgbmV3dGFyZ2V0YnVmKTsKIAkJCXBhZ2UgPSBCdWZmZXJHZXRQYWdl KG5ld3RhcmdldGJ1Zik7CkBAIC0zMzAwLDggKzMyOTYsNyBAQCBwYWxsb2NfYnRyZWVfcGFn ZShCdHJlZUNoZWNrU3RhdGUgKnN0YXRlLCBCbG9ja051bWJlciBibG9ja251bSkKIAkgKiBX ZSBjb3B5IHRoZSBwYWdlIGludG8gbG9jYWwgc3RvcmFnZSB0byBhdm9pZCBob2xkaW5nIHBp biBvbiB0aGUgYnVmZmVyCiAJICogbG9uZ2VyIHRoYW4gd2UgbXVzdC4KIAkgKi8KLQlidWZm ZXIgPSBSZWFkQnVmZmVyRXh0ZW5kZWQoc3RhdGUtPnJlbCwgTUFJTl9GT1JLTlVNLCBibG9j a251bSwgUkJNX05PUk1BTCwKLQkJCQkJCQkJc3RhdGUtPmNoZWNrc3RyYXRlZ3kpOworCWJ1 ZmZlciA9IFJlYWRCdWZmZXJFeHRlbmRlZChzdGF0ZS0+cmVsLCBNQUlOX0ZPUktOVU0sIGJs b2NrbnVtLCBSQk1fTk9STUFMKTsKIAlMb2NrQnVmZmVyKGJ1ZmZlciwgQlRfUkVBRCk7CiAK IAkvKgpkaWZmIC0tZ2l0IGEvY29udHJpYi9ibG9vbS9ibHNjYW4uYyBiL2NvbnRyaWIvYmxv b20vYmxzY2FuLmMKaW5kZXggMWEwZTQyMDIxZWMuLmVkNjJkNWMwNGU2IDEwMDY0NAotLS0g YS9jb250cmliL2Jsb29tL2Jsc2Nhbi5jCisrKyBiL2NvbnRyaWIvYmxvb20vYmxzY2FuLmMK QEAgLTgwLDcgKzgwLDYgQEAgYmxnZXRiaXRtYXAoSW5kZXhTY2FuRGVzYyBzY2FuLCBUSURC aXRtYXAgKnRibSkKIAlCbG9ja051bWJlciBibGtubywKIAkJCQlucGFnZXM7CiAJaW50CQkJ aTsKLQlCdWZmZXJBY2Nlc3NTdHJhdGVneSBiYXM7CiAJQmxvb21TY2FuT3BhcXVlIHNvID0g KEJsb29tU2Nhbk9wYXF1ZSkgc2Nhbi0+b3BhcXVlOwogCUJsb2NrUmFuZ2VSZWFkU3RyZWFt UHJpdmF0ZSBwOwogCVJlYWRTdHJlYW0gKnN0cmVhbTsKQEAgLTExMywxMSArMTEyLDYgQEAg YmxnZXRiaXRtYXAoSW5kZXhTY2FuRGVzYyBzY2FuLCBUSURCaXRtYXAgKnRibSkKIAkJfQog CX0KIAotCS8qCi0JICogV2UncmUgZ29pbmcgdG8gcmVhZCB0aGUgd2hvbGUgaW5kZXguIFRo aXMgaXMgd2h5IHdlIHVzZSBhcHByb3ByaWF0ZQotCSAqIGJ1ZmZlciBhY2Nlc3Mgc3RyYXRl Z3kuCi0JICovCi0JYmFzID0gR2V0QWNjZXNzU3RyYXRlZ3koQkFTX0JVTEtSRUFEKTsKIAlu cGFnZXMgPSBSZWxhdGlvbkdldE51bWJlck9mQmxvY2tzKHNjYW4tPmluZGV4UmVsYXRpb24p OwogCXBnc3RhdF9jb3VudF9pbmRleF9zY2FuKHNjYW4tPmluZGV4UmVsYXRpb24pOwogCWlm IChzY2FuLT5pbnN0cnVtZW50KQpAQCAtMTMzLDcgKzEyNyw2IEBAIGJsZ2V0Yml0bWFwKElu ZGV4U2NhbkRlc2Mgc2NhbiwgVElEQml0bWFwICp0Ym0pCiAJICovCiAJc3RyZWFtID0gcmVh ZF9zdHJlYW1fYmVnaW5fcmVsYXRpb24oUkVBRF9TVFJFQU1fRlVMTCB8CiAJCQkJCQkJCQkJ UkVBRF9TVFJFQU1fVVNFX0JBVENISU5HLAotCQkJCQkJCQkJCWJhcywKIAkJCQkJCQkJCQlz Y2FuLT5pbmRleFJlbGF0aW9uLAogCQkJCQkJCQkJCU1BSU5fRk9SS05VTSwKIAkJCQkJCQkJ CQlibG9ja19yYW5nZV9yZWFkX3N0cmVhbV9jYiwKQEAgLTE4NCw3ICsxNzcsNiBAQCBibGdl dGJpdG1hcChJbmRleFNjYW5EZXNjIHNjYW4sIFRJREJpdG1hcCAqdGJtKQogCiAJQXNzZXJ0 KHJlYWRfc3RyZWFtX25leHRfYnVmZmVyKHN0cmVhbSwgTlVMTCkgPT0gSW52YWxpZEJ1ZmZl cik7CiAJcmVhZF9zdHJlYW1fZW5kKHN0cmVhbSk7Ci0JRnJlZUFjY2Vzc1N0cmF0ZWd5KGJh cyk7CiAKIAlyZXR1cm4gbnRpZHM7CiB9CmRpZmYgLS1naXQgYS9jb250cmliL2Jsb29tL2Js dXRpbHMuYyBiL2NvbnRyaWIvYmxvb20vYmx1dGlscy5jCmluZGV4IDUxMTFjZGM2ZGQ2Li42 YzFlYzE1YzU5YyAxMDA2NDQKLS0tIGEvY29udHJpYi9ibG9vbS9ibHV0aWxzLmMKKysrIGIv Y29udHJpYi9ibG9vbS9ibHV0aWxzLmMKQEAgLTM5Miw3ICszOTIsNyBAQCBCbG9vbU5ld0J1 ZmZlcihSZWxhdGlvbiBpbmRleCkKIAl9CiAKIAkvKiBNdXN0IGV4dGVuZCB0aGUgZmlsZSAq LwotCWJ1ZmZlciA9IEV4dGVuZEJ1ZmZlcmVkUmVsKEJNUl9SRUwoaW5kZXgpLCBNQUlOX0ZP UktOVU0sIE5VTEwsCisJYnVmZmVyID0gRXh0ZW5kQnVmZmVyZWRSZWwoQk1SX1JFTChpbmRl eCksIE1BSU5fRk9SS05VTSwKIAkJCQkJCQkgICBFQl9MT0NLX0ZJUlNUKTsKIAogCXJldHVy biBidWZmZXI7CkBAIC00NjAsNyArNDYwLDcgQEAgQmxvb21Jbml0TWV0YXBhZ2UoUmVsYXRp b24gaW5kZXgsIEZvcmtOdW1iZXIgZm9ya251bSkKIAkgKiBibG9jayBudW1iZXIgMCAoQkxP T01fTUVUQVBBR0VfQkxLTk8pLiAgTm8gbmVlZCB0byBob2xkIHRoZSBleHRlbnNpb24KIAkg KiBsb2NrIGJlY2F1c2UgdGhlcmUgY2Fubm90IGJlIGNvbmN1cnJlbnQgaW5zZXJ0ZXJzIHll dC4KIAkgKi8KLQltZXRhQnVmZmVyID0gUmVhZEJ1ZmZlckV4dGVuZGVkKGluZGV4LCBmb3Jr bnVtLCBQX05FVywgUkJNX05PUk1BTCwgTlVMTCk7CisJbWV0YUJ1ZmZlciA9IFJlYWRCdWZm ZXJFeHRlbmRlZChpbmRleCwgZm9ya251bSwgUF9ORVcsIFJCTV9OT1JNQUwpOwogCUxvY2tC dWZmZXIobWV0YUJ1ZmZlciwgQlVGRkVSX0xPQ0tfRVhDTFVTSVZFKTsKIAlBc3NlcnQoQnVm ZmVyR2V0QmxvY2tOdW1iZXIobWV0YUJ1ZmZlcikgPT0gQkxPT01fTUVUQVBBR0VfQkxLTk8p OwogCmRpZmYgLS1naXQgYS9jb250cmliL2Jsb29tL2JsdmFjdXVtLmMgYi9jb250cmliL2Js b29tL2JsdmFjdXVtLmMKaW5kZXggNmJlYjFjMjBlYmIuLjA4ZDc3MDVlMzY1IDEwMDY0NAot LS0gYS9jb250cmliL2Jsb29tL2JsdmFjdXVtLmMKKysrIGIvY29udHJpYi9ibG9vbS9ibHZh Y3V1bS5jCkBAIC02Niw3ICs2Niw2IEBAIGJsYnVsa2RlbGV0ZShJbmRleFZhY3V1bUluZm8g KmluZm8sIEluZGV4QnVsa0RlbGV0ZVJlc3VsdCAqc3RhdHMsCiAJc3RyZWFtID0gcmVhZF9z dHJlYW1fYmVnaW5fcmVsYXRpb24oUkVBRF9TVFJFQU1fTUFJTlRFTkFOQ0UgfAogCQkJCQkJ CQkJCVJFQURfU1RSRUFNX0ZVTEwgfAogCQkJCQkJCQkJCVJFQURfU1RSRUFNX1VTRV9CQVRD SElORywKLQkJCQkJCQkJCQlpbmZvLT5zdHJhdGVneSwKIAkJCQkJCQkJCQlpbmRleCwKIAkJ CQkJCQkJCQlNQUlOX0ZPUktOVU0sCiAJCQkJCQkJCQkJYmxvY2tfcmFuZ2VfcmVhZF9zdHJl YW1fY2IsCkBAIC0yMTksNyArMjE4LDYgQEAgYmx2YWN1dW1jbGVhbnVwKEluZGV4VmFjdXVt SW5mbyAqaW5mbywgSW5kZXhCdWxrRGVsZXRlUmVzdWx0ICpzdGF0cykKIAlzdHJlYW0gPSBy ZWFkX3N0cmVhbV9iZWdpbl9yZWxhdGlvbihSRUFEX1NUUkVBTV9NQUlOVEVOQU5DRSB8CiAJ CQkJCQkJCQkJUkVBRF9TVFJFQU1fRlVMTCB8CiAJCQkJCQkJCQkJUkVBRF9TVFJFQU1fVVNF X0JBVENISU5HLAotCQkJCQkJCQkJCWluZm8tPnN0cmF0ZWd5LAogCQkJCQkJCQkJCWluZGV4 LAogCQkJCQkJCQkJCU1BSU5fRk9SS05VTSwKIAkJCQkJCQkJCQlibG9ja19yYW5nZV9yZWFk X3N0cmVhbV9jYiwKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGFnZWluc3BlY3QvcmF3cGFnZS5j IGIvY29udHJpYi9wYWdlaW5zcGVjdC9yYXdwYWdlLmMKaW5kZXggZDEzNjU5M2VkYjIuLmJi ZThlZGY5MTYxIDEwMDY0NAotLS0gYS9jb250cmliL3BhZ2VpbnNwZWN0L3Jhd3BhZ2UuYwor KysgYi9jb250cmliL3BhZ2VpbnNwZWN0L3Jhd3BhZ2UuYwpAQCAtMTg4LDcgKzE4OCw3IEBA IGdldF9yYXdfcGFnZV9pbnRlcm5hbCh0ZXh0ICpyZWxuYW1lLCBGb3JrTnVtYmVyIGZvcmtu dW0sIEJsb2NrTnVtYmVyIGJsa25vKQogCiAJLyogVGFrZSBhIHZlcmJhdGltIGNvcHkgb2Yg dGhlIHBhZ2UgKi8KIAotCWJ1ZiA9IFJlYWRCdWZmZXJFeHRlbmRlZChyZWwsIGZvcmtudW0s IGJsa25vLCBSQk1fTk9STUFMLCBOVUxMKTsKKwlidWYgPSBSZWFkQnVmZmVyRXh0ZW5kZWQo cmVsLCBmb3JrbnVtLCBibGtubywgUkJNX05PUk1BTCk7CiAJTG9ja0J1ZmZlcihidWYsIEJV RkZFUl9MT0NLX1NIQVJFKTsKIAogCW1lbWNweShyYXdfcGFnZV9kYXRhLCBCdWZmZXJHZXRQ YWdlKGJ1ZiksIEJMQ0tTWik7CmRpZmYgLS1naXQgYS9jb250cmliL3BnX3ByZXdhcm0vYXV0 b3ByZXdhcm0uYyBiL2NvbnRyaWIvcGdfcHJld2FybS9hdXRvcHJld2FybS5jCmluZGV4IGRl YjRjMjY3MWI1Li4zM2FkODhlYThiMSAxMDA2NDQKLS0tIGEvY29udHJpYi9wZ19wcmV3YXJt L2F1dG9wcmV3YXJtLmMKKysrIGIvY29udHJpYi9wZ19wcmV3YXJtL2F1dG9wcmV3YXJtLmMK QEAgLTYzMCw3ICs2MzAsNiBAQCBhdXRvcHJld2FybV9kYXRhYmFzZV9tYWluKERhdHVtIG1h aW5fYXJnKQogCQkJc3RyZWFtID0gcmVhZF9zdHJlYW1fYmVnaW5fcmVsYXRpb24oUkVBRF9T VFJFQU1fTUFJTlRFTkFOQ0UgfAogCQkJCQkJCQkJCQkJUkVBRF9TVFJFQU1fREVGQVVMVCB8 CiAJCQkJCQkJCQkJCQlSRUFEX1NUUkVBTV9VU0VfQkFUQ0hJTkcsCi0JCQkJCQkJCQkJCQlO VUxMLAogCQkJCQkJCQkJCQkJcmVsLAogCQkJCQkJCQkJCQkJcC5mb3JrbnVtLAogCQkJCQkJ CQkJCQkJYXB3X3JlYWRfc3RyZWFtX25leHRfYmxvY2ssCmRpZmYgLS1naXQgYS9jb250cmli L3BnX3ByZXdhcm0vcGdfcHJld2FybS5jIGIvY29udHJpYi9wZ19wcmV3YXJtL3BnX3ByZXdh cm0uYwppbmRleCBjMjcxNjA4NjY5My4uNzE2YTY3NTRhN2UgMTAwNjQ0Ci0tLSBhL2NvbnRy aWIvcGdfcHJld2FybS9wZ19wcmV3YXJtLmMKKysrIGIvY29udHJpYi9wZ19wcmV3YXJtL3Bn X3ByZXdhcm0uYwpAQCAtMjUxLDcgKzI1MSw2IEBAIHBnX3ByZXdhcm0oUEdfRlVOQ1RJT05f QVJHUykKIAkJc3RyZWFtID0gcmVhZF9zdHJlYW1fYmVnaW5fcmVsYXRpb24oUkVBRF9TVFJF QU1fTUFJTlRFTkFOQ0UgfAogCQkJCQkJCQkJCQlSRUFEX1NUUkVBTV9GVUxMIHwKIAkJCQkJ CQkJCQkJUkVBRF9TVFJFQU1fVVNFX0JBVENISU5HLAotCQkJCQkJCQkJCQlOVUxMLAogCQkJ CQkJCQkJCQlyZWwsCiAJCQkJCQkJCQkJCWZvcmtOdW1iZXIsCiAJCQkJCQkJCQkJCWJsb2Nr X3JhbmdlX3JlYWRfc3RyZWFtX2NiLApkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ192aXNpYmls aXR5L3BnX3Zpc2liaWxpdHkuYyBiL2NvbnRyaWIvcGdfdmlzaWJpbGl0eS9wZ192aXNpYmls aXR5LmMKaW5kZXggZGZhYjBiNjRjZjUuLmNjYjgyOWEwOWViIDEwMDY0NAotLS0gYS9jb250 cmliL3BnX3Zpc2liaWxpdHkvcGdfdmlzaWJpbGl0eS5jCisrKyBiL2NvbnRyaWIvcGdfdmlz aWJpbGl0eS9wZ192aXNpYmlsaXR5LmMKQEAgLTQ4OCw3ICs0ODgsNiBAQCBjb2xsZWN0X3Zp c2liaWxpdHlfZGF0YShPaWQgcmVsaWQsIGJvb2wgaW5jbHVkZV9wZCkKIAl2Yml0cwkgICAq aW5mbzsKIAlCbG9ja051bWJlciBibGtubzsKIAlCdWZmZXIJCXZtYnVmZmVyID0gSW52YWxp ZEJ1ZmZlcjsKLQlCdWZmZXJBY2Nlc3NTdHJhdGVneSBic3RyYXRlZ3kgPSBHZXRBY2Nlc3NT dHJhdGVneShCQVNfQlVMS1JFQUQpOwogCUJsb2NrUmFuZ2VSZWFkU3RyZWFtUHJpdmF0ZSBw OwogCVJlYWRTdHJlYW0gKnN0cmVhbSA9IE5VTEw7CiAKQEAgLTUxNCw3ICs1MTMsNiBAQCBj b2xsZWN0X3Zpc2liaWxpdHlfZGF0YShPaWQgcmVsaWQsIGJvb2wgaW5jbHVkZV9wZCkKIAkJ ICovCiAJCXN0cmVhbSA9IHJlYWRfc3RyZWFtX2JlZ2luX3JlbGF0aW9uKFJFQURfU1RSRUFN X0ZVTEwgfAogCQkJCQkJCQkJCQlSRUFEX1NUUkVBTV9VU0VfQkFUQ0hJTkcsCi0JCQkJCQkJ CQkJCWJzdHJhdGVneSwKIAkJCQkJCQkJCQkJcmVsLAogCQkJCQkJCQkJCQlNQUlOX0ZPUktO VU0sCiAJCQkJCQkJCQkJCWJsb2NrX3JhbmdlX3JlYWRfc3RyZWFtX2NiLApAQCAtNTM4LDgg KzUzNiw3IEBAIGNvbGxlY3RfdmlzaWJpbGl0eV9kYXRhKE9pZCByZWxpZCwgYm9vbCBpbmNs dWRlX3BkKQogCiAJCS8qCiAJCSAqIFBhZ2UtbGV2ZWwgZGF0YSByZXF1aXJlcyByZWFkaW5n IGV2ZXJ5IGJsb2NrLCBzbyBvbmx5IGdldCBpdCBpZiB0aGUKLQkJICogY2FsbGVyIG5lZWRz IGl0LiAgVXNlIGEgYnVmZmVyIGFjY2VzcyBzdHJhdGVneSwgdG9vLCB0byBwcmV2ZW50Ci0J CSAqIGNhY2hlLXRyYXNoaW5nLgorCQkgKiBjYWxsZXIgbmVlZHMgaXQuCiAJCSAqLwogCQlp ZiAoaW5jbHVkZV9wZCkKIAkJewpAQCAtNzAwLDcgKzY5Nyw2IEBAIGNvbGxlY3RfY29ycnVw dF9pdGVtcyhPaWQgcmVsaWQsIGJvb2wgYWxsX3Zpc2libGUsIGJvb2wgYWxsX2Zyb3plbikK IAlSZWxhdGlvbglyZWw7CiAJY29ycnVwdF9pdGVtcyAqaXRlbXM7CiAJQnVmZmVyCQl2bWJ1 ZmZlciA9IEludmFsaWRCdWZmZXI7Ci0JQnVmZmVyQWNjZXNzU3RyYXRlZ3kgYnN0cmF0ZWd5 ID0gR2V0QWNjZXNzU3RyYXRlZ3koQkFTX0JVTEtSRUFEKTsKIAlUcmFuc2FjdGlvbklkIE9s ZGVzdFhtaW4gPSBJbnZhbGlkVHJhbnNhY3Rpb25JZDsKIAlzdHJ1Y3QgY29sbGVjdF9jb3Jy dXB0X2l0ZW1zX3JlYWRfc3RyZWFtX3ByaXZhdGUgcDsKIAlSZWFkU3RyZWFtICpzdHJlYW07 CkBAIC03MzQsNyArNzMwLDYgQEAgY29sbGVjdF9jb3JydXB0X2l0ZW1zKE9pZCByZWxpZCwg Ym9vbCBhbGxfdmlzaWJsZSwgYm9vbCBhbGxfZnJvemVuKQogCXAuYWxsX2Zyb3plbiA9IGFs bF9mcm96ZW47CiAJcC5hbGxfdmlzaWJsZSA9IGFsbF92aXNpYmxlOwogCXN0cmVhbSA9IHJl YWRfc3RyZWFtX2JlZ2luX3JlbGF0aW9uKFJFQURfU1RSRUFNX0ZVTEwsCi0JCQkJCQkJCQkJ YnN0cmF0ZWd5LAogCQkJCQkJCQkJCXJlbCwKIAkJCQkJCQkJCQlNQUlOX0ZPUktOVU0sCiAJ CQkJCQkJCQkJY29sbGVjdF9jb3JydXB0X2l0ZW1zX3JlYWRfc3RyZWFtX25leHRfYmxvY2ss CmRpZmYgLS1naXQgYS9jb250cmliL3Bnc3RhdHR1cGxlL3Bnc3RhdGFwcHJveC5jIGIvY29u dHJpYi9wZ3N0YXR0dXBsZS9wZ3N0YXRhcHByb3guYwppbmRleCAyMWUwYjUwZmI0Yi4uOGUx N2Q0ODk5MWUgMTAwNjQ0Ci0tLSBhL2NvbnRyaWIvcGdzdGF0dHVwbGUvcGdzdGF0YXBwcm94 LmMKKysrIGIvY29udHJpYi9wZ3N0YXR0dXBsZS9wZ3N0YXRhcHByb3guYwpAQCAtMTE2LDEz ICsxMTYsMTEgQEAgc3RhdGljIHZvaWQKIHN0YXRhcHByb3hfaGVhcChSZWxhdGlvbiByZWws IG91dHB1dF90eXBlICpzdGF0KQogewogCUJsb2NrTnVtYmVyIG5ibG9ja3M7Ci0JQnVmZmVy QWNjZXNzU3RyYXRlZ3kgYnN0cmF0ZWd5OwogCVRyYW5zYWN0aW9uSWQgT2xkZXN0WG1pbjsK IAlTdGF0QXBwcm94UmVhZFN0cmVhbVByaXZhdGUgcDsKIAlSZWFkU3RyZWFtICpzdHJlYW07 CiAKIAlPbGRlc3RYbWluID0gR2V0T2xkZXN0Tm9uUmVtb3ZhYmxlVHJhbnNhY3Rpb25JZChy ZWwpOwotCWJzdHJhdGVneSA9IEdldEFjY2Vzc1N0cmF0ZWd5KEJBU19CVUxLUkVBRCk7CiAK IAluYmxvY2tzID0gUmVsYXRpb25HZXROdW1iZXJPZkJsb2NrcyhyZWwpOwogCkBAIC0xNDEs NyArMTM5LDYgQEAgc3RhdGFwcHJveF9oZWFwKFJlbGF0aW9uIHJlbCwgb3V0cHV0X3R5cGUg KnN0YXQpCiAJICogY2F1dGlvbi4KIAkgKi8KIAlzdHJlYW0gPSByZWFkX3N0cmVhbV9iZWdp bl9yZWxhdGlvbihSRUFEX1NUUkVBTV9GVUxMLAotCQkJCQkJCQkJCWJzdHJhdGVneSwKIAkJ CQkJCQkJCQlyZWwsCiAJCQkJCQkJCQkJTUFJTl9GT1JLTlVNLAogCQkJCQkJCQkJCXN0YXRh cHByb3hfaGVhcF9yZWFkX3N0cmVhbV9uZXh0LApkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ3N0 YXR0dXBsZS9wZ3N0YXRpbmRleC5jIGIvY29udHJpYi9wZ3N0YXR0dXBsZS9wZ3N0YXRpbmRl eC5jCmluZGV4IDg5NTFhZDBhYWM0Li5hMDkyMmIzODZhMCAxMDA2NDQKLS0tIGEvY29udHJp Yi9wZ3N0YXR0dXBsZS9wZ3N0YXRpbmRleC5jCisrKyBiL2NvbnRyaWIvcGdzdGF0dHVwbGUv cGdzdGF0aW5kZXguYwpAQCAtMjE3LDcgKzIxNyw2IEBAIHBnc3RhdGluZGV4X2ltcGwoUmVs YXRpb24gcmVsLCBGdW5jdGlvbkNhbGxJbmZvIGZjaW5mbykKIAlCbG9ja051bWJlciBuYmxv Y2tzOwogCUJsb2NrTnVtYmVyIGJsa25vOwogCUJUSW5kZXhTdGF0IGluZGV4U3RhdDsKLQlC dWZmZXJBY2Nlc3NTdHJhdGVneSBic3RyYXRlZ3kgPSBHZXRBY2Nlc3NTdHJhdGVneShCQVNf QlVMS1JFQUQpOwogCUJsb2NrUmFuZ2VSZWFkU3RyZWFtUHJpdmF0ZSBwOwogCVJlYWRTdHJl YW0gKnN0cmVhbTsKIAlCbG9ja051bWJlciBzdGFydGJsazsKQEAgLTI1NCw3ICsyNTMsNyBA QCBwZ3N0YXRpbmRleF9pbXBsKFJlbGF0aW9uIHJlbCwgRnVuY3Rpb25DYWxsSW5mbyBmY2lu Zm8pCiAJICogUmVhZCBtZXRhcGFnZQogCSAqLwogCXsKLQkJQnVmZmVyCQlidWZmZXIgPSBS ZWFkQnVmZmVyRXh0ZW5kZWQocmVsLCBNQUlOX0ZPUktOVU0sIDAsIFJCTV9OT1JNQUwsIGJz dHJhdGVneSk7CisJCUJ1ZmZlcgkJYnVmZmVyID0gUmVhZEJ1ZmZlckV4dGVuZGVkKHJlbCwg TUFJTl9GT1JLTlVNLCAwLCBSQk1fTk9STUFMKTsKIAkJUGFnZQkJcGFnZSA9IEJ1ZmZlckdl dFBhZ2UoYnVmZmVyKTsKIAkJQlRNZXRhUGFnZURhdGEgKm1ldGFkID0gQlRQYWdlR2V0TWV0 YShwYWdlKTsKIApAQCAtMjkxLDcgKzI5MCw2IEBAIHBnc3RhdGluZGV4X2ltcGwoUmVsYXRp b24gcmVsLCBGdW5jdGlvbkNhbGxJbmZvIGZjaW5mbykKIAkgKi8KIAlzdHJlYW0gPSByZWFk X3N0cmVhbV9iZWdpbl9yZWxhdGlvbihSRUFEX1NUUkVBTV9GVUxMIHwKIAkJCQkJCQkJCQlS RUFEX1NUUkVBTV9VU0VfQkFUQ0hJTkcsCi0JCQkJCQkJCQkJYnN0cmF0ZWd5LAogCQkJCQkJ CQkJCXJlbCwKIAkJCQkJCQkJCQlNQUlOX0ZPUktOVU0sCiAJCQkJCQkJCQkJYmxvY2tfcmFu Z2VfcmVhZF9zdHJlYW1fY2IsCkBAIC02MTIsNyArNjEwLDYgQEAgcGdzdGF0aGFzaGluZGV4 KFBHX0ZVTkNUSU9OX0FSR1MpCiAJQmxvY2tOdW1iZXIgYmxrbm87CiAJUmVsYXRpb24JcmVs OwogCUhhc2hJbmRleFN0YXQgc3RhdHM7Ci0JQnVmZmVyQWNjZXNzU3RyYXRlZ3kgYnN0cmF0 ZWd5OwogCUhlYXBUdXBsZQl0dXBsZTsKIAlUdXBsZURlc2MJdHVwbGVEZXNjOwogCURhdHVt CQl2YWx1ZXNbOF07CkBAIC02NjUsOSArNjYyLDYgQEAgcGdzdGF0aGFzaGluZGV4KFBHX0ZV TkNUSU9OX0FSR1MpCiAJLyogR2V0IHRoZSBjdXJyZW50IHJlbGF0aW9uIGxlbmd0aCAqLwog CW5ibG9ja3MgPSBSZWxhdGlvbkdldE51bWJlck9mQmxvY2tzKHJlbCk7CiAKLQkvKiBwcmVw YXJlIGFjY2VzcyBzdHJhdGVneSBmb3IgdGhpcyBpbmRleCAqLwotCWJzdHJhdGVneSA9IEdl dEFjY2Vzc1N0cmF0ZWd5KEJBU19CVUxLUkVBRCk7Ci0KIAkvKiBTY2FuIGFsbCBibG9ja3Mg ZXhjZXB0IHRoZSBtZXRhcGFnZSAoMHRoIHBhZ2UpIHVzaW5nIHN0cmVhbWluZyByZWFkcyAq LwogCXN0YXJ0YmxrID0gSEFTSF9NRVRBUEFHRSArIDE7CiAKQEAgLTY4MCw3ICs2NzQsNiBA QCBwZ3N0YXRoYXNoaW5kZXgoUEdfRlVOQ1RJT05fQVJHUykKIAkgKi8KIAlzdHJlYW0gPSBy ZWFkX3N0cmVhbV9iZWdpbl9yZWxhdGlvbihSRUFEX1NUUkVBTV9GVUxMIHwKIAkJCQkJCQkJ CQlSRUFEX1NUUkVBTV9VU0VfQkFUQ0hJTkcsCi0JCQkJCQkJCQkJYnN0cmF0ZWd5LAogCQkJ CQkJCQkJCXJlbCwKIAkJCQkJCQkJCQlNQUlOX0ZPUktOVU0sCiAJCQkJCQkJCQkJYmxvY2tf cmFuZ2VfcmVhZF9zdHJlYW1fY2IsCmRpZmYgLS1naXQgYS9jb250cmliL3Bnc3RhdHR1cGxl L3Bnc3RhdHR1cGxlLmMgYi9jb250cmliL3Bnc3RhdHR1cGxlL3Bnc3RhdHR1cGxlLmMKaW5k ZXggNmE3ZjhjYjRhN2MuLjkwZjc5MzhlOTUzIDEwMDY0NAotLS0gYS9jb250cmliL3Bnc3Rh dHR1cGxlL3Bnc3RhdHR1cGxlLmMKKysrIGIvY29udHJpYi9wZ3N0YXR0dXBsZS9wZ3N0YXR0 dXBsZS5jCkBAIC02NCwyMiArNjQsMTggQEAgdHlwZWRlZiBzdHJ1Y3QgcGdzdGF0dHVwbGVf dHlwZQogCXVpbnQ2NAkJZnJlZV9zcGFjZTsJCS8qIGZyZWUvcmV1c2FibGUgc3BhY2UgaW4g Ynl0ZXMgKi8KIH0gcGdzdGF0dHVwbGVfdHlwZTsKIAotdHlwZWRlZiB2b2lkICgqcGdzdGF0 X3BhZ2UpIChwZ3N0YXR0dXBsZV90eXBlICosIFJlbGF0aW9uLCBCbG9ja051bWJlciwKLQkJ CQkJCQkgQnVmZmVyQWNjZXNzU3RyYXRlZ3kpOwordHlwZWRlZiB2b2lkICgqcGdzdGF0X3Bh Z2UpIChwZ3N0YXR0dXBsZV90eXBlICosIFJlbGF0aW9uLCBCbG9ja051bWJlcik7CiAKIHN0 YXRpYyBEYXR1bSBidWlsZF9wZ3N0YXR0dXBsZV90eXBlKHBnc3RhdHR1cGxlX3R5cGUgKnN0 YXQsCiAJCQkJCQkJCQlGdW5jdGlvbkNhbGxJbmZvIGZjaW5mbyk7CiBzdGF0aWMgRGF0dW0g cGdzdGF0X3JlbGF0aW9uKFJlbGF0aW9uIHJlbCwgRnVuY3Rpb25DYWxsSW5mbyBmY2luZm8p Owogc3RhdGljIERhdHVtIHBnc3RhdF9oZWFwKFJlbGF0aW9uIHJlbCwgRnVuY3Rpb25DYWxs SW5mbyBmY2luZm8pOwogc3RhdGljIHZvaWQgcGdzdGF0X2J0cmVlX3BhZ2UocGdzdGF0dHVw bGVfdHlwZSAqc3RhdCwKLQkJCQkJCQkgIFJlbGF0aW9uIHJlbCwgQmxvY2tOdW1iZXIgYmxr bm8sCi0JCQkJCQkJICBCdWZmZXJBY2Nlc3NTdHJhdGVneSBic3RyYXRlZ3kpOworCQkJCQkJ CSAgUmVsYXRpb24gcmVsLCBCbG9ja051bWJlciBibGtubyk7CiBzdGF0aWMgdm9pZCBwZ3N0 YXRfaGFzaF9wYWdlKHBnc3RhdHR1cGxlX3R5cGUgKnN0YXQsCi0JCQkJCQkJIFJlbGF0aW9u IHJlbCwgQmxvY2tOdW1iZXIgYmxrbm8sCi0JCQkJCQkJIEJ1ZmZlckFjY2Vzc1N0cmF0ZWd5 IGJzdHJhdGVneSk7CisJCQkJCQkJIFJlbGF0aW9uIHJlbCwgQmxvY2tOdW1iZXIgYmxrbm8p Owogc3RhdGljIHZvaWQgcGdzdGF0X2dpc3RfcGFnZShwZ3N0YXR0dXBsZV90eXBlICpzdGF0 LAotCQkJCQkJCSBSZWxhdGlvbiByZWwsIEJsb2NrTnVtYmVyIGJsa25vLAotCQkJCQkJCSBC dWZmZXJBY2Nlc3NTdHJhdGVneSBic3RyYXRlZ3kpOworCQkJCQkJCSBSZWxhdGlvbiByZWws IEJsb2NrTnVtYmVyIGJsa25vKTsKIHN0YXRpYyBEYXR1bSBwZ3N0YXRfaW5kZXgoUmVsYXRp b24gcmVsLCBCbG9ja051bWJlciBzdGFydCwKIAkJCQkJCSAgcGdzdGF0X3BhZ2UgcGFnZWZu LCBGdW5jdGlvbkNhbGxJbmZvIGZjaW5mbyk7CiBzdGF0aWMgdm9pZCBwZ3N0YXRfaW5kZXhf cGFnZShwZ3N0YXR0dXBsZV90eXBlICpzdGF0LCBQYWdlIHBhZ2UsCkBAIC0zNzYsNyArMzcy LDcgQEAgcGdzdGF0X2hlYXAoUmVsYXRpb24gcmVsLCBGdW5jdGlvbkNhbGxJbmZvIGZjaW5m bykKIAkJCUNIRUNLX0ZPUl9JTlRFUlJVUFRTKCk7CiAKIAkJCWJ1ZmZlciA9IFJlYWRCdWZm ZXJFeHRlbmRlZChyZWwsIE1BSU5fRk9SS05VTSwgYmxvY2ssCi0JCQkJCQkJCQkJUkJNX05P Uk1BTCwgaHNjYW4tPnJzX3N0cmF0ZWd5KTsKKwkJCQkJCQkJCQlSQk1fTk9STUFMKTsKIAkJ CUxvY2tCdWZmZXIoYnVmZmVyLCBCVUZGRVJfTE9DS19TSEFSRSk7CiAJCQlzdGF0LmZyZWVf c3BhY2UgKz0gUGFnZUdldEV4YWN0RnJlZVNwYWNlKEJ1ZmZlckdldFBhZ2UoYnVmZmVyKSk7 CiAJCQlVbmxvY2tSZWxlYXNlQnVmZmVyKGJ1ZmZlcik7CkBAIC0zODksNyArMzg1LDcgQEAg cGdzdGF0X2hlYXAoUmVsYXRpb24gcmVsLCBGdW5jdGlvbkNhbGxJbmZvIGZjaW5mbykKIAkJ Q0hFQ0tfRk9SX0lOVEVSUlVQVFMoKTsKIAogCQlidWZmZXIgPSBSZWFkQnVmZmVyRXh0ZW5k ZWQocmVsLCBNQUlOX0ZPUktOVU0sIGJsb2NrLAotCQkJCQkJCQkJUkJNX05PUk1BTCwgaHNj YW4tPnJzX3N0cmF0ZWd5KTsKKwkJCQkJCQkJCVJCTV9OT1JNQUwpOwogCQlMb2NrQnVmZmVy KGJ1ZmZlciwgQlVGRkVSX0xPQ0tfU0hBUkUpOwogCQlzdGF0LmZyZWVfc3BhY2UgKz0gUGFn ZUdldEV4YWN0RnJlZVNwYWNlKEJ1ZmZlckdldFBhZ2UoYnVmZmVyKSk7CiAJCVVubG9ja1Jl bGVhc2VCdWZmZXIoYnVmZmVyKTsKQEAgLTQwOCwxMyArNDA0LDEyIEBAIHBnc3RhdF9oZWFw KFJlbGF0aW9uIHJlbCwgRnVuY3Rpb25DYWxsSW5mbyBmY2luZm8pCiAgKiBwZ3N0YXRfYnRy ZWVfcGFnZSAtLSBjaGVjayB0dXBsZXMgaW4gYSBidHJlZSBwYWdlCiAgKi8KIHN0YXRpYyB2 b2lkCi1wZ3N0YXRfYnRyZWVfcGFnZShwZ3N0YXR0dXBsZV90eXBlICpzdGF0LCBSZWxhdGlv biByZWwsIEJsb2NrTnVtYmVyIGJsa25vLAotCQkJCSAgQnVmZmVyQWNjZXNzU3RyYXRlZ3kg YnN0cmF0ZWd5KQorcGdzdGF0X2J0cmVlX3BhZ2UocGdzdGF0dHVwbGVfdHlwZSAqc3RhdCwg UmVsYXRpb24gcmVsLCBCbG9ja051bWJlciBibGtubykKIHsKIAlCdWZmZXIJCWJ1ZjsKIAlQ YWdlCQlwYWdlOwogCi0JYnVmID0gUmVhZEJ1ZmZlckV4dGVuZGVkKHJlbCwgTUFJTl9GT1JL TlVNLCBibGtubywgUkJNX05PUk1BTCwgYnN0cmF0ZWd5KTsKKwlidWYgPSBSZWFkQnVmZmVy RXh0ZW5kZWQocmVsLCBNQUlOX0ZPUktOVU0sIGJsa25vLCBSQk1fTk9STUFMKTsKIAlMb2Nr QnVmZmVyKGJ1ZiwgQlRfUkVBRCk7CiAJcGFnZSA9IEJ1ZmZlckdldFBhZ2UoYnVmKTsKIApA QCAtNDUyLDEzICs0NDcsMTIgQEAgcGdzdGF0X2J0cmVlX3BhZ2UocGdzdGF0dHVwbGVfdHlw ZSAqc3RhdCwgUmVsYXRpb24gcmVsLCBCbG9ja051bWJlciBibGtubywKICAqIHBnc3RhdF9o YXNoX3BhZ2UgLS0gY2hlY2sgdHVwbGVzIGluIGEgaGFzaCBwYWdlCiAgKi8KIHN0YXRpYyB2 b2lkCi1wZ3N0YXRfaGFzaF9wYWdlKHBnc3RhdHR1cGxlX3R5cGUgKnN0YXQsIFJlbGF0aW9u IHJlbCwgQmxvY2tOdW1iZXIgYmxrbm8sCi0JCQkJIEJ1ZmZlckFjY2Vzc1N0cmF0ZWd5IGJz dHJhdGVneSkKK3Bnc3RhdF9oYXNoX3BhZ2UocGdzdGF0dHVwbGVfdHlwZSAqc3RhdCwgUmVs YXRpb24gcmVsLCBCbG9ja051bWJlciBibGtubykKIHsKIAlCdWZmZXIJCWJ1ZjsKIAlQYWdl CQlwYWdlOwogCi0JYnVmID0gUmVhZEJ1ZmZlckV4dGVuZGVkKHJlbCwgTUFJTl9GT1JLTlVN LCBibGtubywgUkJNX05PUk1BTCwgYnN0cmF0ZWd5KTsKKwlidWYgPSBSZWFkQnVmZmVyRXh0 ZW5kZWQocmVsLCBNQUlOX0ZPUktOVU0sIGJsa25vLCBSQk1fTk9STUFMKTsKIAlMb2NrQnVm ZmVyKGJ1ZiwgSEFTSF9SRUFEKTsKIAlwYWdlID0gQnVmZmVyR2V0UGFnZShidWYpOwogCkBA IC01MDAsMTMgKzQ5NCwxMiBAQCBwZ3N0YXRfaGFzaF9wYWdlKHBnc3RhdHR1cGxlX3R5cGUg KnN0YXQsIFJlbGF0aW9uIHJlbCwgQmxvY2tOdW1iZXIgYmxrbm8sCiAgKiBwZ3N0YXRfZ2lz dF9wYWdlIC0tIGNoZWNrIHR1cGxlcyBpbiBhIGdpc3QgcGFnZQogICovCiBzdGF0aWMgdm9p ZAotcGdzdGF0X2dpc3RfcGFnZShwZ3N0YXR0dXBsZV90eXBlICpzdGF0LCBSZWxhdGlvbiBy ZWwsIEJsb2NrTnVtYmVyIGJsa25vLAotCQkJCSBCdWZmZXJBY2Nlc3NTdHJhdGVneSBic3Ry YXRlZ3kpCitwZ3N0YXRfZ2lzdF9wYWdlKHBnc3RhdHR1cGxlX3R5cGUgKnN0YXQsIFJlbGF0 aW9uIHJlbCwgQmxvY2tOdW1iZXIgYmxrbm8pCiB7CiAJQnVmZmVyCQlidWY7CiAJUGFnZQkJ cGFnZTsKIAotCWJ1ZiA9IFJlYWRCdWZmZXJFeHRlbmRlZChyZWwsIE1BSU5fRk9SS05VTSwg Ymxrbm8sIFJCTV9OT1JNQUwsIGJzdHJhdGVneSk7CisJYnVmID0gUmVhZEJ1ZmZlckV4dGVu ZGVkKHJlbCwgTUFJTl9GT1JLTlVNLCBibGtubywgUkJNX05PUk1BTCk7CiAJTG9ja0J1ZmZl cihidWYsIEdJU1RfU0hBUkUpOwogCXBhZ2UgPSBCdWZmZXJHZXRQYWdlKGJ1Zik7CiAJaWYg KFBhZ2VJc05ldyhwYWdlKSkKQEAgLTUzOSwxMiArNTMyLDggQEAgcGdzdGF0X2luZGV4KFJl bGF0aW9uIHJlbCwgQmxvY2tOdW1iZXIgc3RhcnQsIHBnc3RhdF9wYWdlIHBhZ2VmbiwKIHsK IAlCbG9ja051bWJlciBuYmxvY2tzOwogCUJsb2NrTnVtYmVyIGJsa25vOwotCUJ1ZmZlckFj Y2Vzc1N0cmF0ZWd5IGJzdHJhdGVneTsKIAlwZ3N0YXR0dXBsZV90eXBlIHN0YXQgPSB7MH07 CiAKLQkvKiBwcmVwYXJlIGFjY2VzcyBzdHJhdGVneSBmb3IgdGhpcyBpbmRleCAqLwotCWJz dHJhdGVneSA9IEdldEFjY2Vzc1N0cmF0ZWd5KEJBU19CVUxLUkVBRCk7Ci0KIAlibGtubyA9 IHN0YXJ0OwogCWZvciAoOzspCiAJewpAQCAtNTY1LDcgKzU1NCw3IEBAIHBnc3RhdF9pbmRl eChSZWxhdGlvbiByZWwsIEJsb2NrTnVtYmVyIHN0YXJ0LCBwZ3N0YXRfcGFnZSBwYWdlZm4s CiAJCXsKIAkJCUNIRUNLX0ZPUl9JTlRFUlJVUFRTKCk7CiAKLQkJCXBhZ2Vmbigmc3RhdCwg cmVsLCBibGtubywgYnN0cmF0ZWd5KTsKKwkJCXBhZ2Vmbigmc3RhdCwgcmVsLCBibGtubyk7 CiAJCX0KIAl9CiAKZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9jb25maWcuc2dtbCBiL2Rv Yy9zcmMvc2dtbC9jb25maWcuc2dtbAppbmRleCAwODQ4YzE4ZDMyOS4uN2NiODgzOTI0NWMg MTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC9jb25maWcuc2dtbAorKysgYi9kb2Mvc3JjL3Nn bWwvY29uZmlnLnNnbWwKQEAgLTIxMDcsMzYgKzIxMDcsNiBAQCBpbmNsdWRlX2RpciAnY29u Zi5kJwogICAgICAgPC9saXN0aXRlbT4KICAgICAgPC92YXJsaXN0ZW50cnk+CiAKLSAgICAg PHZhcmxpc3RlbnRyeSBpZD0iZ3VjLXZhY3V1bS1idWZmZXItdXNhZ2UtbGltaXQiIHhyZWZs YWJlbD0idmFjdXVtX2J1ZmZlcl91c2FnZV9saW1pdCI+Ci0gICAgICA8dGVybT4KLSAgICAg ICA8dmFybmFtZT52YWN1dW1fYnVmZmVyX3VzYWdlX2xpbWl0PC92YXJuYW1lPiAoPHR5cGU+ aW50ZWdlcjwvdHlwZT4pCi0gICAgICAgPGluZGV4dGVybT4KLSAgICAgICAgPHByaW1hcnk+ PHZhcm5hbWU+dmFjdXVtX2J1ZmZlcl91c2FnZV9saW1pdDwvdmFybmFtZT4gY29uZmlndXJh dGlvbiBwYXJhbWV0ZXI8L3ByaW1hcnk+Ci0gICAgICAgPC9pbmRleHRlcm0+Ci0gICAgICA8 L3Rlcm0+Ci0gICAgICA8bGlzdGl0ZW0+Ci0gICAgICAgPHBhcmE+Ci0gICAgICAgIFNwZWNp ZmllcyB0aGUgc2l6ZSBvZiB0aGUKLSAgICAgICAgPGdsb3NzdGVybSBsaW5rZW5kPSJnbG9z c2FyeS1idWZmZXItYWNjZXNzLXN0cmF0ZWd5Ij5CdWZmZXIgQWNjZXNzIFN0cmF0ZWd5PC9n bG9zc3Rlcm0+Ci0gICAgICAgIHVzZWQgYnkgdGhlIDxjb21tYW5kPlZBQ1VVTTwvY29tbWFu ZD4gYW5kIDxjb21tYW5kPkFOQUxZWkU8L2NvbW1hbmQ+Ci0gICAgICAgIGNvbW1hbmRzLiAg QSBzZXR0aW5nIG9mIDxsaXRlcmFsPjA8L2xpdGVyYWw+IHdpbGwgYWxsb3cgdGhlIG9wZXJh dGlvbgotICAgICAgICB0byB1c2UgYW55IG51bWJlciBvZiA8dmFybmFtZT5zaGFyZWRfYnVm ZmVyczwvdmFybmFtZT4uICBPdGhlcndpc2UKLSAgICAgICAgdmFsaWQgc2l6ZXMgcmFuZ2Ug ZnJvbSA8bGl0ZXJhbD4xMjgga0I8L2xpdGVyYWw+IHRvCi0gICAgICAgIDxsaXRlcmFsPjE2 IEdCPC9saXRlcmFsPi4gIElmIHRoZSBzcGVjaWZpZWQgc2l6ZSB3b3VsZCBleGNlZWQgMS84 IHRoZQotICAgICAgICBzaXplIG9mIDx2YXJuYW1lPnNoYXJlZF9idWZmZXJzPC92YXJuYW1l PiwgdGhlIHNpemUgaXMgc2lsZW50bHkgY2FwcGVkCi0gICAgICAgIHRvIHRoYXQgdmFsdWUu ICBUaGUgZGVmYXVsdCB2YWx1ZSBpcyA8bGl0ZXJhbD4yTUI8L2xpdGVyYWw+LiAgSWYKLSAg ICAgICAgdGhpcyB2YWx1ZSBpcyBzcGVjaWZpZWQgd2l0aG91dCB1bml0cywgaXQgaXMgdGFr ZW4gYXMga2lsb2J5dGVzLiAgVGhpcwotICAgICAgICBwYXJhbWV0ZXIgY2FuIGJlIHNldCBh dCBhbnkgdGltZS4gIEl0IGNhbiBiZSBvdmVycmlkZGVuIGZvcgotICAgICAgICA8eHJlZiBs aW5rZW5kPSJzcWwtdmFjdXVtIi8+IGFuZCA8eHJlZiBsaW5rZW5kPSJzcWwtYW5hbHl6ZSIv PgotICAgICAgICB3aGVuIHBhc3NpbmcgdGhlIDxvcHRpb24+QlVGRkVSX1VTQUdFX0xJTUlU PC9vcHRpb24+IG9wdGlvbi4gIEhpZ2hlcgotICAgICAgICBzZXR0aW5ncyBjYW4gYWxsb3cg PGNvbW1hbmQ+VkFDVVVNPC9jb21tYW5kPiBhbmQKLSAgICAgICAgPGNvbW1hbmQ+QU5BTFla RTwvY29tbWFuZD4gdG8gcnVuIG1vcmUgcXVpY2tseSwgYnV0IGhhdmluZyB0b28gbGFyZ2Ug YQotICAgICAgICBzZXR0aW5nIG1heSBjYXVzZSB0b28gbWFueSBvdGhlciB1c2VmdWwgcGFn ZXMgdG8gYmUgZXZpY3RlZCBmcm9tCi0gICAgICAgIHNoYXJlZCBidWZmZXJzLgotICAgICAg IDwvcGFyYT4KLSAgICAgIDwvbGlzdGl0ZW0+Ci0gICAgIDwvdmFybGlzdGVudHJ5PgotCiAg ICAgIDx2YXJsaXN0ZW50cnkgaWQ9Imd1Yy1sb2dpY2FsLWRlY29kaW5nLXdvcmstbWVtIiB4 cmVmbGFiZWw9ImxvZ2ljYWxfZGVjb2Rpbmdfd29ya19tZW0iPgogICAgICAgPHRlcm0+PHZh cm5hbWU+bG9naWNhbF9kZWNvZGluZ193b3JrX21lbTwvdmFybmFtZT4gKDx0eXBlPmludGVn ZXI8L3R5cGU+KQogICAgICAgPGluZGV4dGVybT4KZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dt bC9tb25pdG9yaW5nLnNnbWwgYi9kb2Mvc3JjL3NnbWwvbW9uaXRvcmluZy5zZ21sCmluZGV4 IGQxYTIwZDAwMWU5Li4xOGQxNzU0MDQzMCAxMDA2NDQKLS0tIGEvZG9jL3NyYy9zZ21sL21v bml0b3Jpbmcuc2dtbAorKysgYi9kb2Mvc3JjL3NnbWwvbW9uaXRvcmluZy5zZ21sCkBAIC0y OTkzLDI4ICsyOTkzLDYgQEAgZGVzY3JpcHRpb24gfCBXYWl0aW5nIGZvciBhIG5ld2x5IGlu aXRpYWxpemVkIFdBTCBmaWxlIHRvIHJlYWNoIGR1cmFibGUgc3RvcmFnZQogICAgICAgICAg IDxsaXRlcmFsPmluaXQ8L2xpdGVyYWw+LgogICAgICAgICAgPC9wYXJhPgogICAgICAgICA8 L2xpc3RpdGVtPgotICAgICAgICA8bGlzdGl0ZW0+Ci0gICAgICAgICA8cGFyYT4KLSAgICAg ICAgICA8bGl0ZXJhbD52YWN1dW08L2xpdGVyYWw+OiBJL08gb3BlcmF0aW9ucyBwZXJmb3Jt ZWQgb3V0c2lkZSBvZiBzaGFyZWQKLSAgICAgICAgICBidWZmZXJzIHdoaWxlIHZhY3V1bWlu ZyBhbmQgYW5hbHl6aW5nIHBlcm1hbmVudCByZWxhdGlvbnMuIFRlbXBvcmFyeQotICAgICAg ICAgIHRhYmxlIHZhY3V1bXMgdXNlIHRoZSBzYW1lIGxvY2FsIGJ1ZmZlciBwb29sIGFzIG90 aGVyIHRlbXBvcmFyeSB0YWJsZQotICAgICAgICAgIEkvTyBvcGVyYXRpb25zIGFuZCBhcmUg dHJhY2tlZCBpbiA8dmFybmFtZT5jb250ZXh0PC92YXJuYW1lPgotICAgICAgICAgIDxsaXRl cmFsPm5vcm1hbDwvbGl0ZXJhbD4uCi0gICAgICAgICA8L3BhcmE+Ci0gICAgICAgIDwvbGlz dGl0ZW0+Ci0gICAgICAgIDxsaXN0aXRlbT4KLSAgICAgICAgIDxwYXJhPgotICAgICAgICAg IDxsaXRlcmFsPmJ1bGtyZWFkPC9saXRlcmFsPjogQ2VydGFpbiBsYXJnZSByZWFkIEkvTyBv cGVyYXRpb25zCi0gICAgICAgICAgZG9uZSBvdXRzaWRlIG9mIHNoYXJlZCBidWZmZXJzLCBm b3IgZXhhbXBsZSwgYSBzZXF1ZW50aWFsIHNjYW4gb2YgYQotICAgICAgICAgIGxhcmdlIHRh YmxlLgotICAgICAgICAgPC9wYXJhPgotICAgICAgICA8L2xpc3RpdGVtPgotICAgICAgICA8 bGlzdGl0ZW0+Ci0gICAgICAgICA8cGFyYT4KLSAgICAgICAgICA8bGl0ZXJhbD5idWxrd3Jp dGU8L2xpdGVyYWw+OiBDZXJ0YWluIGxhcmdlIHdyaXRlIEkvTyBvcGVyYXRpb25zCi0gICAg ICAgICAgZG9uZSBvdXRzaWRlIG9mIHNoYXJlZCBidWZmZXJzLCBzdWNoIGFzIDxjb21tYW5k PkNPUFk8L2NvbW1hbmQ+LgotICAgICAgICAgPC9wYXJhPgotICAgICAgICA8L2xpc3RpdGVt PgogICAgICAgIDwvaXRlbWl6ZWRsaXN0PgogICAgICAgPC9lbnRyeT4KICAgICAgPC9yb3c+ CkBAIC0zMTgwLDEzICszMTU4LDggQEAgZGVzY3JpcHRpb24gfCBXYWl0aW5nIGZvciBhIG5l d2x5IGluaXRpYWxpemVkIFdBTCBmaWxlIHRvIHJlYWNoIGR1cmFibGUgc3RvcmFnZQogICAg ICAgICBidWZmZXIgaW4gb3JkZXIgdG8gbWFrZSBpdCBhdmFpbGFibGUgZm9yIGFub3RoZXIg dXNlLgogICAgICAgIDwvcGFyYT4KICAgICAgICA8cGFyYT4KLSAgICAgICAgSW4gPHZhcm5h bWU+Y29udGV4dDwvdmFybmFtZT4gPGxpdGVyYWw+bm9ybWFsPC9saXRlcmFsPiwgdGhpcyBj b3VudHMKLSAgICAgICAgdGhlIG51bWJlciBvZiB0aW1lcyBhIGJsb2NrIHdhcyBldmljdGVk IGZyb20gYSBidWZmZXIgYW5kIHJlcGxhY2VkIHdpdGgKLSAgICAgICAgYW5vdGhlciBibG9j ay4gSW4gPHZhcm5hbWU+Y29udGV4dDwvdmFybmFtZT5zCi0gICAgICAgIDxsaXRlcmFsPmJ1 bGt3cml0ZTwvbGl0ZXJhbD4sIDxsaXRlcmFsPmJ1bGtyZWFkPC9saXRlcmFsPiwgYW5kCi0g ICAgICAgIDxsaXRlcmFsPnZhY3V1bTwvbGl0ZXJhbD4sIHRoaXMgY291bnRzIHRoZSBudW1i ZXIgb2YgdGltZXMgYSBibG9jayB3YXMKLSAgICAgICAgZXZpY3RlZCBmcm9tIHNoYXJlZCBi dWZmZXJzIGluIG9yZGVyIHRvIGFkZCB0aGUgc2hhcmVkIGJ1ZmZlciB0byBhCi0gICAgICAg IHNlcGFyYXRlLCBzaXplLWxpbWl0ZWQgcmluZyBidWZmZXIgZm9yIHVzZSBpbiBhIGJ1bGsg SS9PIG9wZXJhdGlvbi4KKyAgICAgICAgVGhpcyBjb3VudHMgdGhlIG51bWJlciBvZiB0aW1l cyBhIGJsb2NrIHdhcyBldmljdGVkIGZyb20gYSBidWZmZXIgYW5kCisgICAgICAgIHJlcGxh Y2VkIHdpdGggYW5vdGhlciBibG9jay4KICAgICAgICAgPC9wYXJhPgogICAgICAgPC9lbnRy eT4KICAgICAgPC9yb3c+CkBAIC0zMTk3LDEwICszMTcwLDkgQEAgZGVzY3JpcHRpb24gfCBX YWl0aW5nIGZvciBhIG5ld2x5IGluaXRpYWxpemVkIFdBTCBmaWxlIHRvIHJlYWNoIGR1cmFi bGUgc3RvcmFnZQogICAgICAgICA8c3RydWN0ZmllbGQ+cmV1c2VzPC9zdHJ1Y3RmaWVsZD4g PHR5cGU+YmlnaW50PC90eXBlPgogICAgICAgIDwvcGFyYT4KICAgICAgICA8cGFyYT4KLSAg ICAgICAgVGhlIG51bWJlciBvZiB0aW1lcyBhbiBleGlzdGluZyBidWZmZXIgaW4gYSBzaXpl LWxpbWl0ZWQgcmluZyBidWZmZXIKLSAgICAgICAgb3V0c2lkZSBvZiBzaGFyZWQgYnVmZmVy cyB3YXMgcmV1c2VkIGFzIHBhcnQgb2YgYW4gSS9PIG9wZXJhdGlvbiBpbiB0aGUKLSAgICAg ICAgPGxpdGVyYWw+YnVsa3JlYWQ8L2xpdGVyYWw+LCA8bGl0ZXJhbD5idWxrd3JpdGU8L2xp dGVyYWw+LCBvcgotICAgICAgICA8bGl0ZXJhbD52YWN1dW08L2xpdGVyYWw+IDx2YXJuYW1l PmNvbnRleHQ8L3Zhcm5hbWU+cy4KKyAgICAgICAgQWx3YXlzIHplcm8uICBUaGlzIGNvbHVt biBwcmV2aW91c2x5IGNvdW50ZWQgcmV1c2VzIG9mIGJ1ZmZlcnMgaW4gYQorICAgICAgICBz aXplLWxpbWl0ZWQgcmluZyBidWZmZXIgKGJ1ZmZlciBhY2Nlc3Mgc3RyYXRlZ3kpOyByaW5n IGJ1ZmZlcnMgaGF2ZQorICAgICAgICBiZWVuIHJlbW92ZWQsIHNvIG5vIHJldXNlcyBhcmUg dHJhY2tlZC4KICAgICAgICA8L3BhcmE+CiAgICAgICA8L2VudHJ5PgogICAgICA8L3Jvdz4K ZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9yZWYvYW5hbHl6ZS5zZ21sIGIvZG9jL3NyYy9z Z21sL3JlZi9hbmFseXplLnNnbWwKaW5kZXggZWM4MWYwMGZlY2YuLjdmNTE1OTExMWQ4IDEw MDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwvcmVmL2FuYWx5emUuc2dtbAorKysgYi9kb2Mvc3Jj L3NnbWwvcmVmL2FuYWx5emUuc2dtbApAQCAtMjcsNyArMjcsNiBAQCBBTkFMWVpFIFsgKCA8 cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+b3B0aW9uPC9yZXBsYWNlYWJsZT4gWywg Li4uXSApIF0gWyA8cgogCiAgICAgVkVSQk9TRSBbIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFy YW1ldGVyIj5ib29sZWFuPC9yZXBsYWNlYWJsZT4gXQogICAgIFNLSVBfTE9DS0VEIFsgPHJl cGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPmJvb2xlYW48L3JlcGxhY2VhYmxlPiBdCi0g ICAgQlVGRkVSX1VTQUdFX0xJTUlUIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5z aXplPC9yZXBsYWNlYWJsZT4KIAogPHBocmFzZT5hbmQgPHJlcGxhY2VhYmxlIGNsYXNzPSJw YXJhbWV0ZXIiPnRhYmxlX2FuZF9jb2x1bW5zPC9yZXBsYWNlYWJsZT4gaXM6PC9waHJhc2U+ CiAKQEAgLTg4LDI2ICs4Nyw2IEBAIEFOQUxZWkUgWyAoIDxyZXBsYWNlYWJsZSBjbGFzcz0i cGFyYW1ldGVyIj5vcHRpb248L3JlcGxhY2VhYmxlPiBbLCAuLi5dICkgXSBbIDxyCiAgICAg PC9saXN0aXRlbT4KICAgIDwvdmFybGlzdGVudHJ5PgogCi0gICA8dmFybGlzdGVudHJ5Pgot ICAgIDx0ZXJtPjxsaXRlcmFsPkJVRkZFUl9VU0FHRV9MSU1JVDwvbGl0ZXJhbD48L3Rlcm0+ Ci0gICAgPGxpc3RpdGVtPgotICAgICA8cGFyYT4KLSAgICAgIFNwZWNpZmllcyB0aGUKLSAg ICAgIDxnbG9zc3Rlcm0gbGlua2VuZD0iZ2xvc3NhcnktYnVmZmVyLWFjY2Vzcy1zdHJhdGVn eSI+QnVmZmVyIEFjY2VzcyBTdHJhdGVneTwvZ2xvc3N0ZXJtPgotICAgICAgcmluZyBidWZm ZXIgc2l6ZSBmb3IgPGNvbW1hbmQ+QU5BTFlaRTwvY29tbWFuZD4uICBUaGlzIHNpemUgaXMg dXNlZCB0bwotICAgICAgY2FsY3VsYXRlIHRoZSBudW1iZXIgb2Ygc2hhcmVkIGJ1ZmZlcnMg d2hpY2ggd2lsbCBiZSByZXVzZWQgYXMgcGFydCBvZgotICAgICAgdGhpcyBzdHJhdGVneS4g IDxsaXRlcmFsPjA8L2xpdGVyYWw+IGRpc2FibGVzIHVzZSBvZiBhCi0gICAgICA8bGl0ZXJh bD5CdWZmZXIgQWNjZXNzIFN0cmF0ZWd5PC9saXRlcmFsPi4gICBXaGVuIHRoaXMgb3B0aW9u IGlzIG5vdAotICAgICAgc3BlY2lmaWVkLCA8Y29tbWFuZD5BTkFMWVpFPC9jb21tYW5kPiB1 c2VzIHRoZSB2YWx1ZSBmcm9tCi0gICAgICA8eHJlZiBsaW5rZW5kPSJndWMtdmFjdXVtLWJ1 ZmZlci11c2FnZS1saW1pdCIvPi4gIEhpZ2hlciBzZXR0aW5ncyBjYW4KLSAgICAgIGFsbG93 IDxjb21tYW5kPkFOQUxZWkU8L2NvbW1hbmQ+IHRvIHJ1biBtb3JlIHF1aWNrbHksIGJ1dCBo YXZpbmcgdG9vCi0gICAgICBsYXJnZSBhIHNldHRpbmcgbWF5IGNhdXNlIHRvbyBtYW55IG90 aGVyIHVzZWZ1bCBwYWdlcyB0byBiZSBldmljdGVkIGZyb20KLSAgICAgIHNoYXJlZCBidWZm ZXJzLiAgVGhlIG1pbmltdW0gdmFsdWUgaXMgPGxpdGVyYWw+MTI4IGtCPC9saXRlcmFsPiBh bmQgdGhlCi0gICAgICBtYXhpbXVtIHZhbHVlIGlzIDxsaXRlcmFsPjE2IEdCPC9saXRlcmFs Pi4KLSAgICAgPC9wYXJhPgotICAgIDwvbGlzdGl0ZW0+Ci0gICA8L3Zhcmxpc3RlbnRyeT4K LQogICAgPHZhcmxpc3RlbnRyeT4KICAgICA8dGVybT48cmVwbGFjZWFibGUgY2xhc3M9InBh cmFtZXRlciI+Ym9vbGVhbjwvcmVwbGFjZWFibGU+PC90ZXJtPgogICAgIDxsaXN0aXRlbT4K ZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9yZWYvdmFjdXVtLnNnbWwgYi9kb2Mvc3JjL3Nn bWwvcmVmL3ZhY3V1bS5zZ21sCmluZGV4IDM4ZWU5NzNlYTA1Li5kNDRhNDlmOGVmZSAxMDA2 NDQKLS0tIGEvZG9jL3NyYy9zZ21sL3JlZi92YWN1dW0uc2dtbAorKysgYi9kb2Mvc3JjL3Nn bWwvcmVmL3ZhY3V1bS5zZ21sCkBAIC0zNyw3ICszNyw2IEBAIFZBQ1VVTSBbICggPHJlcGxh Y2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPm9wdGlvbjwvcmVwbGFjZWFibGU+IFssIC4uLl0g KSBdIFsgPHJlCiAgICAgUEFSQUxMRUwgPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIi PmludGVnZXI8L3JlcGxhY2VhYmxlPgogICAgIFNLSVBfREFUQUJBU0VfU1RBVFMgWyA8cmVw bGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+Ym9vbGVhbjwvcmVwbGFjZWFibGU+IF0KICAg ICBPTkxZX0RBVEFCQVNFX1NUQVRTIFsgPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIi PmJvb2xlYW48L3JlcGxhY2VhYmxlPiBdCi0gICAgQlVGRkVSX1VTQUdFX0xJTUlUIDxyZXBs YWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5zaXplPC9yZXBsYWNlYWJsZT4KICAgICBGVUxM IFsgPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPmJvb2xlYW48L3JlcGxhY2VhYmxl PiBdCiAKIDxwaHJhc2U+YW5kIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj50YWJs ZV9hbmRfY29sdW1uczwvcmVwbGFjZWFibGU+IGlzOjwvcGhyYXNlPgpAQCAtMzA5LDMwICsz MDgsNiBAQCBWQUNVVU0gWyAoIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5vcHRp b248L3JlcGxhY2VhYmxlPiBbLCAuLi5dICkgXSBbIDxyZQogICAgIDwvbGlzdGl0ZW0+CiAg ICA8L3Zhcmxpc3RlbnRyeT4KIAotICAgPHZhcmxpc3RlbnRyeT4KLSAgICA8dGVybT48bGl0 ZXJhbD5CVUZGRVJfVVNBR0VfTElNSVQ8L2xpdGVyYWw+PC90ZXJtPgotICAgIDxsaXN0aXRl bT4KLSAgICAgPHBhcmE+Ci0gICAgICBTcGVjaWZpZXMgdGhlCi0gICAgICA8Z2xvc3N0ZXJt IGxpbmtlbmQ9Imdsb3NzYXJ5LWJ1ZmZlci1hY2Nlc3Mtc3RyYXRlZ3kiPkJ1ZmZlciBBY2Nl c3MgU3RyYXRlZ3k8L2dsb3NzdGVybT4KLSAgICAgIHJpbmcgYnVmZmVyIHNpemUgZm9yIDxj b21tYW5kPlZBQ1VVTTwvY29tbWFuZD4uICBUaGlzIHNpemUgaXMgdXNlZCB0bwotICAgICAg Y2FsY3VsYXRlIHRoZSBudW1iZXIgb2Ygc2hhcmVkIGJ1ZmZlcnMgd2hpY2ggd2lsbCBiZSBy ZXVzZWQgYXMgcGFydCBvZgotICAgICAgdGhpcyBzdHJhdGVneS4gIDxsaXRlcmFsPjA8L2xp dGVyYWw+IGRpc2FibGVzIHVzZSBvZiBhCi0gICAgICA8bGl0ZXJhbD5CdWZmZXIgQWNjZXNz IFN0cmF0ZWd5PC9saXRlcmFsPi4gIElmIDxvcHRpb24+QU5BTFlaRTwvb3B0aW9uPgotICAg ICAgaXMgYWxzbyBzcGVjaWZpZWQsIHRoZSA8b3B0aW9uPkJVRkZFUl9VU0FHRV9MSU1JVDwv b3B0aW9uPiB2YWx1ZSBpcyB1c2VkCi0gICAgICBmb3IgYm90aCB0aGUgdmFjdXVtIGFuZCBh bmFseXplIHN0YWdlcy4gIFRoaXMgb3B0aW9uIGNhbid0IGJlIHVzZWQgd2l0aAotICAgICAg dGhlIDxvcHRpb24+RlVMTDwvb3B0aW9uPiBvcHRpb24gZXhjZXB0IGlmIDxvcHRpb24+QU5B TFlaRTwvb3B0aW9uPiBpcwotICAgICAgYWxzbyBzcGVjaWZpZWQuICBXaGVuIHRoaXMgb3B0 aW9uIGlzIG5vdCBzcGVjaWZpZWQsCi0gICAgICA8Y29tbWFuZD5WQUNVVU08L2NvbW1hbmQ+ IHVzZXMgdGhlIHZhbHVlIGZyb20KLSAgICAgIDx4cmVmIGxpbmtlbmQ9Imd1Yy12YWN1dW0t YnVmZmVyLXVzYWdlLWxpbWl0Ii8+LiAgSGlnaGVyIHNldHRpbmdzIGNhbgotICAgICAgYWxs b3cgPGNvbW1hbmQ+VkFDVVVNPC9jb21tYW5kPiB0byBydW4gbW9yZSBxdWlja2x5LCBidXQg aGF2aW5nIHRvbwotICAgICAgbGFyZ2UgYSBzZXR0aW5nIG1heSBjYXVzZSB0b28gbWFueSBv dGhlciB1c2VmdWwgcGFnZXMgdG8gYmUgZXZpY3RlZCBmcm9tCi0gICAgICBzaGFyZWQgYnVm ZmVycy4gIFRoZSBtaW5pbXVtIHZhbHVlIGlzIDxsaXRlcmFsPjEyOCBrQjwvbGl0ZXJhbD4g YW5kIHRoZQotICAgICAgbWF4aW11bSB2YWx1ZSBpcyA8bGl0ZXJhbD4xNiBHQjwvbGl0ZXJh bD4uCi0gICAgIDwvcGFyYT4KLSAgICA8L2xpc3RpdGVtPgotICAgPC92YXJsaXN0ZW50cnk+ Ci0KICAgIDx2YXJsaXN0ZW50cnk+CiAgICAgPHRlcm0+PGxpdGVyYWw+RlVMTDwvbGl0ZXJh bD48L3Rlcm0+CiAgICAgPGxpc3RpdGVtPgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNj ZXNzL2JyaW4vYnJpbi5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2JyaW4vYnJpbi5jCmluZGV4 IGJkYjMwNzUyZTA5Li41ZDY1MzlmNTQ4MyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNj ZXNzL2JyaW4vYnJpbi5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9icmluL2JyaW4uYwpA QCAtMjI0LDcgKzIyNCw3IEBAIHN0YXRpYyB2b2lkIGZvcm1fYW5kX2luc2VydF90dXBsZShC cmluQnVpbGRTdGF0ZSAqc3RhdGUpOwogc3RhdGljIHZvaWQgZm9ybV9hbmRfc3BpbGxfdHVw bGUoQnJpbkJ1aWxkU3RhdGUgKnN0YXRlKTsKIHN0YXRpYyB2b2lkIHVuaW9uX3R1cGxlcyhC cmluRGVzYyAqYmRlc2MsIEJyaW5NZW1UdXBsZSAqYSwKIAkJCQkJCSBCcmluVHVwbGUgKmIp Owotc3RhdGljIHZvaWQgYnJpbl92YWN1dW1fc2NhbihSZWxhdGlvbiBpZHhyZWwsIEJ1ZmZl ckFjY2Vzc1N0cmF0ZWd5IHN0cmF0ZWd5KTsKK3N0YXRpYyB2b2lkIGJyaW5fdmFjdXVtX3Nj YW4oUmVsYXRpb24gaWR4cmVsKTsKIHN0YXRpYyBib29sIGFkZF92YWx1ZXNfdG9fcmFuZ2Uo UmVsYXRpb24gaWR4UmVsLCBCcmluRGVzYyAqYmRlc2MsCiAJCQkJCQkJCUJyaW5NZW1UdXBs ZSAqZHR1cCwgY29uc3QgRGF0dW0gKnZhbHVlcywgY29uc3QgYm9vbCAqbnVsbHMpOwogc3Rh dGljIGJvb2wgY2hlY2tfbnVsbF9rZXlzKEJyaW5WYWx1ZXMgKmJ2YWwsIFNjYW5LZXkgKm51 bGxrZXlzLCBpbnQgbm51bGxrZXlzKTsKQEAgLTExMjksNyArMTEyOSw3IEBAIGJyaW5idWls ZChSZWxhdGlvbiBoZWFwLCBSZWxhdGlvbiBpbmRleCwgSW5kZXhJbmZvICppbmRleEluZm8p CiAJICogd2hvbGUgcmVsYXRpb24gd2lsbCBiZSByb2xsZWQgYmFjay4KIAkgKi8KIAotCW1l dGEgPSBFeHRlbmRCdWZmZXJlZFJlbChCTVJfUkVMKGluZGV4KSwgTUFJTl9GT1JLTlVNLCBO VUxMLAorCW1ldGEgPSBFeHRlbmRCdWZmZXJlZFJlbChCTVJfUkVMKGluZGV4KSwgTUFJTl9G T1JLTlVNLAogCQkJCQkJCSBFQl9MT0NLX0ZJUlNUIHwgRUJfU0tJUF9FWFRFTlNJT05fTE9D Syk7CiAJQXNzZXJ0KEJ1ZmZlckdldEJsb2NrTnVtYmVyKG1ldGEpID09IEJSSU5fTUVUQVBB R0VfQkxLTk8pOwogCkBAIC0xMjgxLDcgKzEyODEsNyBAQCBicmluYnVpbGRlbXB0eShSZWxh dGlvbiBpbmRleCkKIAlCdWZmZXIJCW1ldGFidWY7CiAKIAkvKiBBbiBlbXB0eSBCUklOIGlu ZGV4IGhhcyBhIG1ldGFwYWdlIG9ubHkuICovCi0JbWV0YWJ1ZiA9IEV4dGVuZEJ1ZmZlcmVk UmVsKEJNUl9SRUwoaW5kZXgpLCBJTklUX0ZPUktOVU0sIE5VTEwsCisJbWV0YWJ1ZiA9IEV4 dGVuZEJ1ZmZlcmVkUmVsKEJNUl9SRUwoaW5kZXgpLCBJTklUX0ZPUktOVU0sCiAJCQkJCQkJ CUVCX0xPQ0tfRklSU1QgfCBFQl9TS0lQX0VYVEVOU0lPTl9MT0NLKTsKIAogCS8qIEluaXRp YWxpemUgYW5kIHhsb2cgbWV0YWJ1ZmZlci4gKi8KQEAgLTEzMzYsNyArMTMzNiw3IEBAIGJy aW52YWN1dW1jbGVhbnVwKEluZGV4VmFjdXVtSW5mbyAqaW5mbywgSW5kZXhCdWxrRGVsZXRl UmVzdWx0ICpzdGF0cykKIAloZWFwUmVsID0gdGFibGVfb3BlbihJbmRleEdldFJlbGF0aW9u KFJlbGF0aW9uR2V0UmVsaWQoaW5mby0+aW5kZXgpLCBmYWxzZSksCiAJCQkJCQkgQWNjZXNz U2hhcmVMb2NrKTsKIAotCWJyaW5fdmFjdXVtX3NjYW4oaW5mby0+aW5kZXgsIGluZm8tPnN0 cmF0ZWd5KTsKKwlicmluX3ZhY3V1bV9zY2FuKGluZm8tPmluZGV4KTsKIAogCWJyaW5zdW1t YXJpemUoaW5mby0+aW5kZXgsIGhlYXBSZWwsIEJSSU5fQUxMX0JMT0NLUkFOR0VTLCBmYWxz ZSwKIAkJCQkgICZzdGF0cy0+bnVtX2luZGV4X3R1cGxlcywgJnN0YXRzLT5udW1faW5kZXhf dHVwbGVzKTsKQEAgLTIxNzEsNyArMjE3MSw3IEBAIHVuaW9uX3R1cGxlcyhCcmluRGVzYyAq YmRlc2MsIEJyaW5NZW1UdXBsZSAqYSwgQnJpblR1cGxlICpiKQogICogYW5kIHN1Y2guCiAg Ki8KIHN0YXRpYyB2b2lkCi1icmluX3ZhY3V1bV9zY2FuKFJlbGF0aW9uIGlkeHJlbCwgQnVm ZmVyQWNjZXNzU3RyYXRlZ3kgc3RyYXRlZ3kpCiticmluX3ZhY3V1bV9zY2FuKFJlbGF0aW9u IGlkeHJlbCkKIHsKIAlCbG9ja1JhbmdlUmVhZFN0cmVhbVByaXZhdGUgcDsKIAlSZWFkU3Ry ZWFtICpzdHJlYW07CkBAIC0yMTg3LDcgKzIxODcsNiBAQCBicmluX3ZhY3V1bV9zY2FuKFJl bGF0aW9uIGlkeHJlbCwgQnVmZmVyQWNjZXNzU3RyYXRlZ3kgc3RyYXRlZ3kpCiAJc3RyZWFt ID0gcmVhZF9zdHJlYW1fYmVnaW5fcmVsYXRpb24oUkVBRF9TVFJFQU1fTUFJTlRFTkFOQ0Ug fAogCQkJCQkJCQkJCVJFQURfU1RSRUFNX0ZVTEwgfAogCQkJCQkJCQkJCVJFQURfU1RSRUFN X1VTRV9CQVRDSElORywKLQkJCQkJCQkJCQlzdHJhdGVneSwKIAkJCQkJCQkJCQlpZHhyZWws CiAJCQkJCQkJCQkJTUFJTl9GT1JLTlVNLAogCQkJCQkJCQkJCWJsb2NrX3JhbmdlX3JlYWRf c3RyZWFtX2NiLApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2JyaW4vYnJpbl9y ZXZtYXAuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9icmluL2JyaW5fcmV2bWFwLmMKaW5kZXgg MjMzMzU1Y2IyZDUuLjAxYzQxMDRhYzg4IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nl c3MvYnJpbi9icmluX3Jldm1hcC5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9icmluL2Jy aW5fcmV2bWFwLmMKQEAgLTU1OSw3ICs1NTksNyBAQCByZXZtYXBfcGh5c2ljYWxfZXh0ZW5k KEJyaW5SZXZtYXAgKnJldm1hcCkKIAl9CiAJZWxzZQogCXsKLQkJYnVmID0gRXh0ZW5kQnVm ZmVyZWRSZWwoQk1SX1JFTChpcmVsKSwgTUFJTl9GT1JLTlVNLCBOVUxMLAorCQlidWYgPSBF eHRlbmRCdWZmZXJlZFJlbChCTVJfUkVMKGlyZWwpLCBNQUlOX0ZPUktOVU0sCiAJCQkJCQkJ CUVCX0xPQ0tfRklSU1QpOwogCQlpZiAoQnVmZmVyR2V0QmxvY2tOdW1iZXIoYnVmKSAhPSBt YXBCbGspCiAJCXsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9naW4vZ2luaW5z ZXJ0LmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvZ2luL2dpbmluc2VydC5jCmluZGV4IGNiOWVk M2I1NjNjLi4zMmFkNjVjYzk1ZiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL2dp bi9naW5pbnNlcnQuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvZ2luL2dpbmluc2VydC5j CkBAIC04MTUsOSArODE1LDkgQEAgZ2luYnVpbGRlbXB0eShSZWxhdGlvbiBpbmRleCkKIAkJ CQlNZXRhQnVmZmVyOwogCiAJLyogQW4gZW1wdHkgR0lOIGluZGV4IGhhcyB0d28gcGFnZXMu ICovCi0JTWV0YUJ1ZmZlciA9IEV4dGVuZEJ1ZmZlcmVkUmVsKEJNUl9SRUwoaW5kZXgpLCBJ TklUX0ZPUktOVU0sIE5VTEwsCisJTWV0YUJ1ZmZlciA9IEV4dGVuZEJ1ZmZlcmVkUmVsKEJN Ul9SRUwoaW5kZXgpLCBJTklUX0ZPUktOVU0sCiAJCQkJCQkJCSAgIEVCX0xPQ0tfRklSU1Qg fCBFQl9TS0lQX0VYVEVOU0lPTl9MT0NLKTsKLQlSb290QnVmZmVyID0gRXh0ZW5kQnVmZmVy ZWRSZWwoQk1SX1JFTChpbmRleCksIElOSVRfRk9SS05VTSwgTlVMTCwKKwlSb290QnVmZmVy ID0gRXh0ZW5kQnVmZmVyZWRSZWwoQk1SX1JFTChpbmRleCksIElOSVRfRk9SS05VTSwKIAkJ CQkJCQkJICAgRUJfTE9DS19GSVJTVCB8IEVCX1NLSVBfRVhURU5TSU9OX0xPQ0spOwogCiAJ LyogSW5pdGlhbGl6ZSBhbmQgeGxvZyBtZXRhYnVmZmVyIGFuZCByb290IGJ1ZmZlci4gKi8K ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9naW4vZ2ludXRpbC5jIGIvc3JjL2Jh Y2tlbmQvYWNjZXNzL2dpbi9naW51dGlsLmMKaW5kZXggZTdjYmE4MWQ0NzcuLjJkNzM5NGFl ZGQ1IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvZ2luL2dpbnV0aWwuYworKysg Yi9zcmMvYmFja2VuZC9hY2Nlc3MvZ2luL2dpbnV0aWwuYwpAQCAtMzM2LDcgKzMzNiw3IEBA IEdpbk5ld0J1ZmZlcihSZWxhdGlvbiBpbmRleCkKIAl9CiAKIAkvKiBNdXN0IGV4dGVuZCB0 aGUgZmlsZSAqLwotCWJ1ZmZlciA9IEV4dGVuZEJ1ZmZlcmVkUmVsKEJNUl9SRUwoaW5kZXgp LCBNQUlOX0ZPUktOVU0sIE5VTEwsCisJYnVmZmVyID0gRXh0ZW5kQnVmZmVyZWRSZWwoQk1S X1JFTChpbmRleCksIE1BSU5fRk9SS05VTSwKIAkJCQkJCQkgICBFQl9MT0NLX0ZJUlNUKTsK IAogCXJldHVybiBidWZmZXI7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvZ2lu L2dpbnZhY3V1bS5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2dpbi9naW52YWN1dW0uYwppbmRl eCA4NDA1NDNlYjY2NC4uODY1MzhkZTM5ZDYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2Fj Y2Vzcy9naW4vZ2ludmFjdXVtLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2dpbi9naW52 YWN1dW0uYwpAQCAtMzIsNyArMzIsNiBAQCBzdHJ1Y3QgR2luVmFjdXVtU3RhdGUKIAlJbmRl eEJ1bGtEZWxldGVDYWxsYmFjayBjYWxsYmFjazsKIAl2b2lkCSAgICpjYWxsYmFja19zdGF0 ZTsKIAlHaW5TdGF0ZQlnaW5zdGF0ZTsKLQlCdWZmZXJBY2Nlc3NTdHJhdGVneSBzdHJhdGVn eTsKIAlNZW1vcnlDb250ZXh0IHRtcEN4dDsKIH07CiAKQEAgLTI4OSw3ICsyODgsNyBAQCBn aW5TY2FuUG9zdGluZ1RyZWVUb0RlbGV0ZShHaW5WYWN1dW1TdGF0ZSAqZ3ZzLCBEYXRhUGFn ZURlbGV0ZVN0YWNrICpteVN0YWNrSXRlbQogCQkJY2hpbGRCdWZmZXIgPSBSZWFkQnVmZmVy RXh0ZW5kZWQoZ3ZzLT5pbmRleCwKIAkJCQkJCQkJCQkJIE1BSU5fRk9SS05VTSwKIAkJCQkJ CQkJCQkJIFBvc3RpbmdJdGVtR2V0QmxvY2tOdW1iZXIocGl0ZW0pLAotCQkJCQkJCQkJCQkg UkJNX05PUk1BTCwgZ3ZzLT5zdHJhdGVneSk7CisJCQkJCQkJCQkJCSBSQk1fTk9STUFMKTsK IAkJCUxvY2tCdWZmZXIoY2hpbGRCdWZmZXIsIEdJTl9FWENMVVNJVkUpOwogCiAJCQkvKiBB bGxvY2F0ZSBhIGNoaWxkIHN0YWNrIGVudHJ5IG9uIGZpcnN0IHVzZTsgcmV1c2UgdGhlcmVh ZnRlciAqLwpAQCAtMzg5LDcgKzM4OCw3IEBAIGdpblZhY3V1bVBvc3RpbmdUcmVlTGVhdmVz KEdpblZhY3V1bVN0YXRlICpndnMsIEJsb2NrTnVtYmVyIGJsa25vKQogCQlQb3N0aW5nSXRl bSAqcGl0ZW07CiAKIAkJYnVmZmVyID0gUmVhZEJ1ZmZlckV4dGVuZGVkKGd2cy0+aW5kZXgs IE1BSU5fRk9SS05VTSwgYmxrbm8sCi0JCQkJCQkJCQlSQk1fTk9STUFMLCBndnMtPnN0cmF0 ZWd5KTsKKwkJCQkJCQkJCVJCTV9OT1JNQUwpOwogCQlMb2NrQnVmZmVyKGJ1ZmZlciwgR0lO X1NIQVJFKTsKIAkJcGFnZSA9IEJ1ZmZlckdldFBhZ2UoYnVmZmVyKTsKIApAQCAtNDMwLDcg KzQyOSw3IEBAIGdpblZhY3V1bVBvc3RpbmdUcmVlTGVhdmVzKEdpblZhY3V1bVN0YXRlICpn dnMsIEJsb2NrTnVtYmVyIGJsa25vKQogCQkJYnJlYWs7CiAKIAkJYnVmZmVyID0gUmVhZEJ1 ZmZlckV4dGVuZGVkKGd2cy0+aW5kZXgsIE1BSU5fRk9SS05VTSwgYmxrbm8sCi0JCQkJCQkJ CQlSQk1fTk9STUFMLCBndnMtPnN0cmF0ZWd5KTsKKwkJCQkJCQkJCVJCTV9OT1JNQUwpOwog CQlMb2NrQnVmZmVyKGJ1ZmZlciwgR0lOX0VYQ0xVU0lWRSk7CiAJCXBhZ2UgPSBCdWZmZXJH ZXRQYWdlKGJ1ZmZlcik7CiAJfQpAQCAtNDU0LDcgKzQ1Myw3IEBAIGdpblZhY3V1bVBvc3Rp bmdUcmVlKEdpblZhY3V1bVN0YXRlICpndnMsIEJsb2NrTnVtYmVyIHJvb3RCbGtubykKIAkJ Ym9vbAkJZGVsZXRlZCBQR19VU0VEX0ZPUl9BU1NFUlRTX09OTFk7CiAKIAkJYnVmZmVyID0g UmVhZEJ1ZmZlckV4dGVuZGVkKGd2cy0+aW5kZXgsIE1BSU5fRk9SS05VTSwgcm9vdEJsa25v LAotCQkJCQkJCQkJUkJNX05PUk1BTCwgZ3ZzLT5zdHJhdGVneSk7CisJCQkJCQkJCQlSQk1f Tk9STUFMKTsKIAogCQkvKgogCQkgKiBMb2NrIHBvc3RpbmcgdHJlZSByb290IGZvciBjbGVh bnVwIHRvIGVuc3VyZSB0aGVyZSBhcmUgbm8KQEAgLTYxNSw3ICs2MTQsNiBAQCBnaW5idWxr ZGVsZXRlKEluZGV4VmFjdXVtSW5mbyAqaW5mbywgSW5kZXhCdWxrRGVsZXRlUmVzdWx0ICpz dGF0cywKIAlndnMuaW5kZXggPSBpbmRleDsKIAlndnMuY2FsbGJhY2sgPSBjYWxsYmFjazsK IAlndnMuY2FsbGJhY2tfc3RhdGUgPSBjYWxsYmFja19zdGF0ZTsKLQlndnMuc3RyYXRlZ3kg PSBpbmZvLT5zdHJhdGVneTsKIAlpbml0R2luU3RhdGUoJmd2cy5naW5zdGF0ZSwgaW5kZXgp OwogCiAJLyogZmlyc3QgdGltZSB0aHJvdWdoPyAqLwpAQCAtNjM2LDcgKzYzNCw3IEBAIGdp bmJ1bGtkZWxldGUoSW5kZXhWYWN1dW1JbmZvICppbmZvLCBJbmRleEJ1bGtEZWxldGVSZXN1 bHQgKnN0YXRzLAogCWd2cy5yZXN1bHQgPSBzdGF0czsKIAogCWJ1ZmZlciA9IFJlYWRCdWZm ZXJFeHRlbmRlZChpbmRleCwgTUFJTl9GT1JLTlVNLCBibGtubywKLQkJCQkJCQkJUkJNX05P Uk1BTCwgaW5mby0+c3RyYXRlZ3kpOworCQkJCQkJCQlSQk1fTk9STUFMKTsKIAogCS8qIGZp bmQgbGVhZiBwYWdlICovCiAJZm9yICg7OykKQEAgLTY2OSw3ICs2NjcsNyBAQCBnaW5idWxr ZGVsZXRlKEluZGV4VmFjdXVtSW5mbyAqaW5mbywgSW5kZXhCdWxrRGVsZXRlUmVzdWx0ICpz dGF0cywKIAogCQlVbmxvY2tSZWxlYXNlQnVmZmVyKGJ1ZmZlcik7CiAJCWJ1ZmZlciA9IFJl YWRCdWZmZXJFeHRlbmRlZChpbmRleCwgTUFJTl9GT1JLTlVNLCBibGtubywKLQkJCQkJCQkJ CVJCTV9OT1JNQUwsIGluZm8tPnN0cmF0ZWd5KTsKKwkJCQkJCQkJCVJCTV9OT1JNQUwpOwog CX0KIAogCS8qIHJpZ2h0IG5vdyB3ZSBmb3VuZCBsZWZ0bW9zdCBwYWdlIGluIGVudHJ5J3Mg QlRyZWUgKi8KQEAgLTcxMiw3ICs3MTAsNyBAQCBnaW5idWxrZGVsZXRlKEluZGV4VmFjdXVt SW5mbyAqaW5mbywgSW5kZXhCdWxrRGVsZXRlUmVzdWx0ICpzdGF0cywKIAkJCWJyZWFrOwog CiAJCWJ1ZmZlciA9IFJlYWRCdWZmZXJFeHRlbmRlZChpbmRleCwgTUFJTl9GT1JLTlVNLCBi bGtubywKLQkJCQkJCQkJCVJCTV9OT1JNQUwsIGluZm8tPnN0cmF0ZWd5KTsKKwkJCQkJCQkJ CVJCTV9OT1JNQUwpOwogCQlMb2NrQnVmZmVyKGJ1ZmZlciwgR0lOX0VYQ0xVU0lWRSk7CiAJ fQogCkBAIC03OTQsNyArNzkyLDYgQEAgZ2ludmFjdXVtY2xlYW51cChJbmRleFZhY3V1bUlu Zm8gKmluZm8sIEluZGV4QnVsa0RlbGV0ZVJlc3VsdCAqc3RhdHMpCiAJc3RyZWFtID0gcmVh ZF9zdHJlYW1fYmVnaW5fcmVsYXRpb24oUkVBRF9TVFJFQU1fTUFJTlRFTkFOQ0UgfAogCQkJ CQkJCQkJCVJFQURfU1RSRUFNX0ZVTEwgfAogCQkJCQkJCQkJCVJFQURfU1RSRUFNX1VTRV9C QVRDSElORywKLQkJCQkJCQkJCQlpbmZvLT5zdHJhdGVneSwKIAkJCQkJCQkJCQlpbmRleCwK IAkJCQkJCQkJCQlNQUlOX0ZPUktOVU0sCiAJCQkJCQkJCQkJYmxvY2tfcmFuZ2VfcmVhZF9z dHJlYW1fY2IsCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvZ2lzdC9naXN0LmMg Yi9zcmMvYmFja2VuZC9hY2Nlc3MvZ2lzdC9naXN0LmMKaW5kZXggODU2NWUyMjViZTcuLmFl NDk0NzQyYTRiIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvZ2lzdC9naXN0LmMK KysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2dpc3QvZ2lzdC5jCkBAIC0xNDIsNyArMTQyLDcg QEAgZ2lzdGJ1aWxkZW1wdHkoUmVsYXRpb24gaW5kZXgpCiAJQnVmZmVyCQlidWZmZXI7CiAK IAkvKiBJbml0aWFsaXplIHRoZSByb290IHBhZ2UgKi8KLQlidWZmZXIgPSBFeHRlbmRCdWZm ZXJlZFJlbChCTVJfUkVMKGluZGV4KSwgSU5JVF9GT1JLTlVNLCBOVUxMLAorCWJ1ZmZlciA9 IEV4dGVuZEJ1ZmZlcmVkUmVsKEJNUl9SRUwoaW5kZXgpLCBJTklUX0ZPUktOVU0sCiAJCQkJ CQkJICAgRUJfU0tJUF9FWFRFTlNJT05fTE9DSyB8IEVCX0xPQ0tfRklSU1QpOwogCiAJLyog SW5pdGlhbGl6ZSBhbmQgeGxvZyBidWZmZXIgKi8KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5k L2FjY2Vzcy9naXN0L2dpc3R1dGlsLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvZ2lzdC9naXN0 dXRpbC5jCmluZGV4IDBmNThmNjE4NzlmLi4xNzAxNzRmNjJmZCAxMDA2NDQKLS0tIGEvc3Jj L2JhY2tlbmQvYWNjZXNzL2dpc3QvZ2lzdHV0aWwuYworKysgYi9zcmMvYmFja2VuZC9hY2Nl c3MvZ2lzdC9naXN0dXRpbC5jCkBAIC04NzcsNyArODc3LDcgQEAgZ2lzdE5ld0J1ZmZlcihS ZWxhdGlvbiByLCBSZWxhdGlvbiBoZWFwcmVsKQogCX0KIAogCS8qIE11c3QgZXh0ZW5kIHRo ZSBmaWxlICovCi0JYnVmZmVyID0gRXh0ZW5kQnVmZmVyZWRSZWwoQk1SX1JFTChyKSwgTUFJ Tl9GT1JLTlVNLCBOVUxMLAorCWJ1ZmZlciA9IEV4dGVuZEJ1ZmZlcmVkUmVsKEJNUl9SRUwo ciksIE1BSU5fRk9SS05VTSwKIAkJCQkJCQkgICBFQl9MT0NLX0ZJUlNUKTsKIAogCXJldHVy biBidWZmZXI7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvZ2lzdC9naXN0dmFj dXVtLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvZ2lzdC9naXN0dmFjdXVtLmMKaW5kZXggNjg2 YTA0MTgwNTQuLmMzNjZlZDM1ZWE4IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3Mv Z2lzdC9naXN0dmFjdXVtLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2dpc3QvZ2lzdHZh Y3V1bS5jCkBAIC0yMTgsNyArMjE4LDYgQEAgZ2lzdHZhY3V1bXNjYW4oSW5kZXhWYWN1dW1J bmZvICppbmZvLCBJbmRleEJ1bGtEZWxldGVSZXN1bHQgKnN0YXRzLAogCXN0cmVhbSA9IHJl YWRfc3RyZWFtX2JlZ2luX3JlbGF0aW9uKFJFQURfU1RSRUFNX01BSU5URU5BTkNFIHwKIAkJ CQkJCQkJCQlSRUFEX1NUUkVBTV9GVUxMIHwKIAkJCQkJCQkJCQlSRUFEX1NUUkVBTV9VU0Vf QkFUQ0hJTkcsCi0JCQkJCQkJCQkJaW5mby0+c3RyYXRlZ3ksCiAJCQkJCQkJCQkJcmVsLAog CQkJCQkJCQkJCU1BSU5fRk9SS05VTSwKIAkJCQkJCQkJCQlibG9ja19yYW5nZV9yZWFkX3N0 cmVhbV9jYiwKQEAgLTQ5MSw4ICs0OTAsNyBAQCByZXN0YXJ0OgogCQkvKiBjaGVjayBmb3Ig dmFjdXVtIGRlbGF5IHdoaWxlIG5vdCBob2xkaW5nIGFueSBidWZmZXIgbG9jayAqLwogCQl2 YWN1dW1fZGVsYXlfcG9pbnQoZmFsc2UpOwogCi0JCWJ1ZmZlciA9IFJlYWRCdWZmZXJFeHRl bmRlZChyZWwsIE1BSU5fRk9SS05VTSwgYmxrbm8sIFJCTV9OT1JNQUwsCi0JCQkJCQkJCQlp bmZvLT5zdHJhdGVneSk7CisJCWJ1ZmZlciA9IFJlYWRCdWZmZXJFeHRlbmRlZChyZWwsIE1B SU5fRk9SS05VTSwgYmxrbm8sIFJCTV9OT1JNQUwpOwogCQlnb3RvIHJlc3RhcnQ7CiAJfQog fQpAQCAtNTI0LDggKzUyMiw3IEBAIGdpc3R2YWN1dW1fZGVsZXRlX2VtcHR5X3BhZ2VzKElu ZGV4VmFjdXVtSW5mbyAqaW5mbywgR2lzdFZhY1N0YXRlICp2c3RhdGUpCiAJCWludAkJCW50 b2RlbGV0ZTsKIAkJaW50CQkJZGVsZXRlZDsKIAotCQlidWZmZXIgPSBSZWFkQnVmZmVyRXh0 ZW5kZWQocmVsLCBNQUlOX0ZPUktOVU0sIChCbG9ja051bWJlcikgYmxrbm8sCi0JCQkJCQkJ CQlSQk1fTk9STUFMLCBpbmZvLT5zdHJhdGVneSk7CisJCWJ1ZmZlciA9IFJlYWRCdWZmZXJF eHRlbmRlZChyZWwsIE1BSU5fRk9SS05VTSwgKEJsb2NrTnVtYmVyKSBibGtubywgUkJNX05P Uk1BTCk7CiAKIAkJTG9ja0J1ZmZlcihidWZmZXIsIEdJU1RfU0hBUkUpOwogCQlwYWdlID0g QnVmZmVyR2V0UGFnZShidWZmZXIpOwpAQCAtNTkwLDggKzU4Nyw3IEBAIGdpc3R2YWN1dW1f ZGVsZXRlX2VtcHR5X3BhZ2VzKEluZGV4VmFjdXVtSW5mbyAqaW5mbywgR2lzdFZhY1N0YXRl ICp2c3RhdGUpCiAJCQlpZiAoUGFnZUdldE1heE9mZnNldE51bWJlcihwYWdlKSA9PSBGaXJz dE9mZnNldE51bWJlcikKIAkJCQlicmVhazsKIAotCQkJbGVhZmJ1ZiA9IFJlYWRCdWZmZXJF eHRlbmRlZChyZWwsIE1BSU5fRk9SS05VTSwgbGVhZnNfdG9fZGVsZXRlW2ldLAotCQkJCQkJ CQkJCSBSQk1fTk9STUFMLCBpbmZvLT5zdHJhdGVneSk7CisJCQlsZWFmYnVmID0gUmVhZEJ1 ZmZlckV4dGVuZGVkKHJlbCwgTUFJTl9GT1JLTlVNLCBsZWFmc190b19kZWxldGVbaV0sIFJC TV9OT1JNQUwpOwogCQkJTG9ja0J1ZmZlcihsZWFmYnVmLCBHSVNUX0VYQ0xVU0lWRSk7CiAJ CQlnaXN0Y2hlY2twYWdlKHJlbCwgbGVhZmJ1Zik7CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNr ZW5kL2FjY2Vzcy9oYXNoL2hhc2guYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2gu YwppbmRleCA4ZDhjZDMwZGMzOC4uMWJiYjcyMjRiZmMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNr ZW5kL2FjY2Vzcy9oYXNoL2hhc2guYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9o YXNoLmMKQEAgLTU0Miw3ICs1NDIsNiBAQCBoYXNoYnVsa2RlbGV0ZShJbmRleFZhY3V1bUlu Zm8gKmluZm8sIEluZGV4QnVsa0RlbGV0ZVJlc3VsdCAqc3RhdHMsCiAJICovCiAJc3RyZWFt ID0gcmVhZF9zdHJlYW1fYmVnaW5fcmVsYXRpb24oUkVBRF9TVFJFQU1fTUFJTlRFTkFOQ0Ug fAogCQkJCQkJCQkJCVJFQURfU1RSRUFNX1VTRV9CQVRDSElORywKLQkJCQkJCQkJCQlpbmZv LT5zdHJhdGVneSwKIAkJCQkJCQkJCQlyZWwsCiAJCQkJCQkJCQkJTUFJTl9GT1JLTlVNLAog CQkJCQkJCQkJCWhhc2hfYnVsa2RlbGV0ZV9yZWFkX3N0cmVhbV9jYiwKQEAgLTYxNiw3ICs2 MTUsNyBAQCBidWNrZXRfbG9vcDoKIAogCQlidWNrZXRfYnVmID0gYnVmOwogCi0JCWhhc2hi dWNrZXRjbGVhbnVwKHJlbCwgY3VyX2J1Y2tldCwgYnVja2V0X2J1ZiwgYmxrbm8sIGluZm8t PnN0cmF0ZWd5LAorCQloYXNoYnVja2V0Y2xlYW51cChyZWwsIGN1cl9idWNrZXQsIGJ1Y2tl dF9idWYsIGJsa25vLAogCQkJCQkJICBjYWNoZWRtZXRhcC0+aGFzaG1fbWF4YnVja2V0LAog CQkJCQkJICBjYWNoZWRtZXRhcC0+aGFzaG1faGlnaG1hc2ssCiAJCQkJCQkgIGNhY2hlZG1l dGFwLT5oYXNobV9sb3dtYXNrLCAmdHVwbGVzX3JlbW92ZWQsCkBAIC03NjUsNyArNzY0LDcg QEAgaGFzaHZhY3V1bWNsZWFudXAoSW5kZXhWYWN1dW1JbmZvICppbmZvLCBJbmRleEJ1bGtE ZWxldGVSZXN1bHQgKnN0YXRzKQogICovCiB2b2lkCiBoYXNoYnVja2V0Y2xlYW51cChSZWxh dGlvbiByZWwsIEJ1Y2tldCBjdXJfYnVja2V0LCBCdWZmZXIgYnVja2V0X2J1ZiwKLQkJCQkg IEJsb2NrTnVtYmVyIGJ1Y2tldF9ibGtubywgQnVmZmVyQWNjZXNzU3RyYXRlZ3kgYnN0cmF0 ZWd5LAorCQkJCSAgQmxvY2tOdW1iZXIgYnVja2V0X2Jsa25vLAogCQkJCSAgdWludDMyIG1h eGJ1Y2tldCwgdWludDMyIGhpZ2htYXNrLCB1aW50MzIgbG93bWFzaywKIAkJCQkgIGRvdWJs ZSAqdHVwbGVzX3JlbW92ZWQsIGRvdWJsZSAqbnVtX2luZGV4X3R1cGxlcywKIAkJCQkgIGJv b2wgc3BsaXRfY2xlYW51cCwKQEAgLTkzNSw5ICs5MzQsOCBAQCBoYXNoYnVja2V0Y2xlYW51 cChSZWxhdGlvbiByZWwsIEJ1Y2tldCBjdXJfYnVja2V0LCBCdWZmZXIgYnVja2V0X2J1ZiwK IAkJaWYgKCFCbG9ja051bWJlcklzVmFsaWQoYmxrbm8pKQogCQkJYnJlYWs7CiAKLQkJbmV4 dF9idWYgPSBfaGFzaF9nZXRidWZfd2l0aF9zdHJhdGVneShyZWwsIGJsa25vLCBIQVNIX1dS SVRFLAotCQkJCQkJCQkJCQkgIExIX09WRVJGTE9XX1BBR0UsCi0JCQkJCQkJCQkJCSAgYnN0 cmF0ZWd5KTsKKwkJbmV4dF9idWYgPSBfaGFzaF9nZXRidWYocmVsLCBibGtubywgSEFTSF9X UklURSwKKwkJCQkJCQkJTEhfT1ZFUkZMT1dfUEFHRSk7CiAKIAkJLyoKIAkJICogcmVsZWFz ZSB0aGUgbG9jayBvbiBwcmV2aW91cyBwYWdlIGFmdGVyIGFjcXVpcmluZyB0aGUgbG9jayBv biBuZXh0CkBAIC0xMDA0LDggKzEwMDIsNyBAQCBoYXNoYnVja2V0Y2xlYW51cChSZWxhdGlv biByZWwsIEJ1Y2tldCBjdXJfYnVja2V0LCBCdWZmZXIgYnVja2V0X2J1ZiwKIAkgKiBvcmRl cmluZyBvZiB0dXBsZXMgZm9yIGEgc2NhbiB0aGF0IGhhcyBzdGFydGVkIGJlZm9yZSBpdC4K IAkgKi8KIAlpZiAoYnVja2V0X2RpcnR5ICYmIElzQnVmZmVyQ2xlYW51cE9LKGJ1Y2tldF9i dWYpKQotCQlfaGFzaF9zcXVlZXplYnVja2V0KHJlbCwgY3VyX2J1Y2tldCwgYnVja2V0X2Js a25vLCBidWNrZXRfYnVmLAotCQkJCQkJCWJzdHJhdGVneSk7CisJCV9oYXNoX3NxdWVlemVi dWNrZXQocmVsLCBjdXJfYnVja2V0LCBidWNrZXRfYmxrbm8sIGJ1Y2tldF9idWYpOwogCWVs c2UKIAkJTG9ja0J1ZmZlcihidWNrZXRfYnVmLCBCVUZGRVJfTE9DS19VTkxPQ0spOwogfQpk aWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFzaG92ZmwuYyBiL3NyYy9i YWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2hvdmZsLmMKaW5kZXggZGJjNTdlZjk1OGMuLjViMzVm ZWQzM2Y5IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNob3ZmbC5j CisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2hvdmZsLmMKQEAgLTQ5MSw4ICs0 OTEsNyBAQCBfaGFzaF9maXJzdGZyZWViaXQodWludDMyIG1hcCkKIEJsb2NrTnVtYmVyCiBf aGFzaF9mcmVlb3ZmbHBhZ2UoUmVsYXRpb24gcmVsLCBCdWZmZXIgYnVja2V0YnVmLCBCdWZm ZXIgb3ZmbGJ1ZiwKIAkJCQkgICBCdWZmZXIgd2J1ZiwgSW5kZXhUdXBsZSAqaXR1cHMsIE9m ZnNldE51bWJlciAqaXR1cF9vZmZzZXRzLAotCQkJCSAgIFNpemUgKnR1cHNfc2l6ZSwgdWlu dDE2IG5pdHVwcywKLQkJCQkgICBCdWZmZXJBY2Nlc3NTdHJhdGVneSBic3RyYXRlZ3kpCisJ CQkJICAgU2l6ZSAqdHVwc19zaXplLCB1aW50MTYgbml0dXBzKQogewogCUhhc2hNZXRhUGFn ZSBtZXRhcDsKIAlCdWZmZXIJCW1ldGFidWY7CkBAIC01MzksMjAgKzUzOCwxNiBAQCBfaGFz aF9mcmVlb3ZmbHBhZ2UoUmVsYXRpb24gcmVsLCBCdWZmZXIgYnVja2V0YnVmLCBCdWZmZXIg b3ZmbGJ1ZiwKIAkJaWYgKHByZXZibGtubyA9PSB3cml0ZWJsa25vKQogCQkJcHJldmJ1ZiA9 IHdidWY7CiAJCWVsc2UKLQkJCXByZXZidWYgPSBfaGFzaF9nZXRidWZfd2l0aF9zdHJhdGVn eShyZWwsCi0JCQkJCQkJCQkJCQkgcHJldmJsa25vLAotCQkJCQkJCQkJCQkJIEhBU0hfV1JJ VEUsCi0JCQkJCQkJCQkJCQkgTEhfQlVDS0VUX1BBR0UgfCBMSF9PVkVSRkxPV19QQUdFLAot CQkJCQkJCQkJCQkJIGJzdHJhdGVneSk7CisJCQlwcmV2YnVmID0gX2hhc2hfZ2V0YnVmKHJl bCwKKwkJCQkJCQkJICAgcHJldmJsa25vLAorCQkJCQkJCQkgICBIQVNIX1dSSVRFLAorCQkJ CQkJCQkgICBMSF9CVUNLRVRfUEFHRSB8IExIX09WRVJGTE9XX1BBR0UpOwogCX0KIAlpZiAo QmxvY2tOdW1iZXJJc1ZhbGlkKG5leHRibGtubykpCi0JCW5leHRidWYgPSBfaGFzaF9nZXRi dWZfd2l0aF9zdHJhdGVneShyZWwsCi0JCQkJCQkJCQkJCSBuZXh0Ymxrbm8sCi0JCQkJCQkJ CQkJCSBIQVNIX1dSSVRFLAotCQkJCQkJCQkJCQkgTEhfT1ZFUkZMT1dfUEFHRSwKLQkJCQkJ CQkJCQkJIGJzdHJhdGVneSk7Ci0KLQkvKiBOb3RlOiBic3RyYXRlZ3kgaXMgaW50ZW50aW9u YWxseSBub3QgdXNlZCBmb3IgbWV0YXBhZ2UgYW5kIGJpdG1hcCAqLworCQluZXh0YnVmID0g X2hhc2hfZ2V0YnVmKHJlbCwKKwkJCQkJCQkgICBuZXh0Ymxrbm8sCisJCQkJCQkJICAgSEFT SF9XUklURSwKKwkJCQkJCQkgICBMSF9PVkVSRkxPV19QQUdFKTsKIAogCS8qIFJlYWQgdGhl IG1ldGFwYWdlIHNvIHdlIGNhbiBkZXRlcm1pbmUgd2hpY2ggYml0bWFwIHBhZ2UgdG8gdXNl ICovCiAJbWV0YWJ1ZiA9IF9oYXNoX2dldGJ1ZihyZWwsIEhBU0hfTUVUQVBBR0UsIEhBU0hf UkVBRCwgTEhfTUVUQV9QQUdFKTsKQEAgLTg0Myw4ICs4MzgsNyBAQCB2b2lkCiBfaGFzaF9z cXVlZXplYnVja2V0KFJlbGF0aW9uIHJlbCwKIAkJCQkJQnVja2V0IGJ1Y2tldCwKIAkJCQkJ QmxvY2tOdW1iZXIgYnVja2V0X2Jsa25vLAotCQkJCQlCdWZmZXIgYnVja2V0X2J1ZiwKLQkJ CQkJQnVmZmVyQWNjZXNzU3RyYXRlZ3kgYnN0cmF0ZWd5KQorCQkJCQlCdWZmZXIgYnVja2V0 X2J1ZikKIHsKIAlCbG9ja051bWJlciB3Ymxrbm87CiAJQmxvY2tOdW1iZXIgcmJsa25vOwpA QCAtODg2LDExICs4ODAsMTAgQEAgX2hhc2hfc3F1ZWV6ZWJ1Y2tldChSZWxhdGlvbiByZWws CiAJCXJibGtubyA9IHJvcGFxdWUtPmhhc2hvX25leHRibGtubzsKIAkJaWYgKHJidWYgIT0g SW52YWxpZEJ1ZmZlcikKIAkJCV9oYXNoX3JlbGJ1ZihyZWwsIHJidWYpOwotCQlyYnVmID0g X2hhc2hfZ2V0YnVmX3dpdGhfc3RyYXRlZ3kocmVsLAotCQkJCQkJCQkJCSAgcmJsa25vLAot CQkJCQkJCQkJCSAgSEFTSF9XUklURSwKLQkJCQkJCQkJCQkgIExIX09WRVJGTE9XX1BBR0Us Ci0JCQkJCQkJCQkJICBic3RyYXRlZ3kpOworCQlyYnVmID0gX2hhc2hfZ2V0YnVmKHJlbCwK KwkJCQkJCQlyYmxrbm8sCisJCQkJCQkJSEFTSF9XUklURSwKKwkJCQkJCQlMSF9PVkVSRkxP V19QQUdFKTsKIAkJcnBhZ2UgPSBCdWZmZXJHZXRQYWdlKHJidWYpOwogCQlyb3BhcXVlID0g SGFzaFBhZ2VHZXRPcGFxdWUocnBhZ2UpOwogCQlBc3NlcnQocm9wYXF1ZS0+aGFzaG9fYnVj a2V0ID09IGJ1Y2tldCk7CkBAIC05NTIsMTEgKzk0NSwxMCBAQCByZWFkcGFnZToKIAogCQkJ CS8qIGRvbid0IG5lZWQgdG8gbW92ZSB0byBuZXh0IHBhZ2UgaWYgd2UgcmVhY2hlZCB0aGUg cmVhZCBwYWdlICovCiAJCQkJaWYgKHdibGtubyAhPSByYmxrbm8pCi0JCQkJCW5leHRfd2J1 ZiA9IF9oYXNoX2dldGJ1Zl93aXRoX3N0cmF0ZWd5KHJlbCwKLQkJCQkJCQkJCQkJCQkJICAg d2Jsa25vLAotCQkJCQkJCQkJCQkJCQkgICBIQVNIX1dSSVRFLAotCQkJCQkJCQkJCQkJCQkg ICBMSF9PVkVSRkxPV19QQUdFLAotCQkJCQkJCQkJCQkJCQkgICBic3RyYXRlZ3kpOworCQkJ CQluZXh0X3didWYgPSBfaGFzaF9nZXRidWYocmVsLAorCQkJCQkJCQkJCQkgd2Jsa25vLAor CQkJCQkJCQkJCQkgSEFTSF9XUklURSwKKwkJCQkJCQkJCQkJIExIX09WRVJGTE9XX1BBR0Up OwogCiAJCQkJaWYgKG5pdHVwcyA+IDApCiAJCQkJewpAQCAtMTA5OCw3ICsxMDkwLDcgQEAg cmVhZHBhZ2U6CiAKIAkJLyogZnJlZSB0aGlzIG92ZXJmbG93IHBhZ2UgKHJlbGVhc2VzIHJi dWYpICovCiAJCV9oYXNoX2ZyZWVvdmZscGFnZShyZWwsIGJ1Y2tldF9idWYsIHJidWYsIHdi dWYsIGl0dXBzLCBpdHVwX29mZnNldHMsCi0JCQkJCQkgICB0dXBzX3NpemUsIG5pdHVwcywg YnN0cmF0ZWd5KTsKKwkJCQkJCSAgIHR1cHNfc2l6ZSwgbml0dXBzKTsKIAogCQkvKiBiZSB0 aWR5ICovCiAJCWZvciAoaSA9IDA7IGkgPCBuaXR1cHM7IGkrKykKQEAgLTExMTUsMTEgKzEx MDcsMTAgQEAgcmVhZHBhZ2U6CiAJCQlyZXR1cm47CiAJCX0KIAotCQlyYnVmID0gX2hhc2hf Z2V0YnVmX3dpdGhfc3RyYXRlZ3kocmVsLAotCQkJCQkJCQkJCSAgcmJsa25vLAotCQkJCQkJ CQkJCSAgSEFTSF9XUklURSwKLQkJCQkJCQkJCQkgIExIX09WRVJGTE9XX1BBR0UsCi0JCQkJ CQkJCQkJICBic3RyYXRlZ3kpOworCQlyYnVmID0gX2hhc2hfZ2V0YnVmKHJlbCwKKwkJCQkJ CQlyYmxrbm8sCisJCQkJCQkJSEFTSF9XUklURSwKKwkJCQkJCQlMSF9PVkVSRkxPV19QQUdF KTsKIAkJcnBhZ2UgPSBCdWZmZXJHZXRQYWdlKHJidWYpOwogCQlyb3BhcXVlID0gSGFzaFBh Z2VHZXRPcGFxdWUocnBhZ2UpOwogCQlBc3NlcnQocm9wYXF1ZS0+aGFzaG9fYnVja2V0ID09 IGJ1Y2tldCk7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNocGFn ZS5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFzaHBhZ2UuYwppbmRleCA4MDk5YjBk MDIxZi4uYmRmMWEyNTVmMWYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oYXNo L2hhc2hwYWdlLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFzaHBhZ2UuYwpA QCAtMTM5LDggKzEzOSw3IEBAIF9oYXNoX2dldGluaXRidWYoUmVsYXRpb24gcmVsLCBCbG9j a051bWJlciBibGtubykKIAlpZiAoYmxrbm8gPT0gUF9ORVcpCiAJCWVsb2coRVJST1IsICJo YXNoIEFNIGRvZXMgbm90IHVzZSBQX05FVyIpOwogCi0JYnVmID0gUmVhZEJ1ZmZlckV4dGVu ZGVkKHJlbCwgTUFJTl9GT1JLTlVNLCBibGtubywgUkJNX1pFUk9fQU5EX0xPQ0ssCi0JCQkJ CQkJIE5VTEwpOworCWJ1ZiA9IFJlYWRCdWZmZXJFeHRlbmRlZChyZWwsIE1BSU5fRk9SS05V TSwgYmxrbm8sIFJCTV9aRVJPX0FORF9MT0NLKTsKIAogCS8qIHJlZiBjb3VudCBhbmQgbG9j ayB0eXBlIGFyZSBjb3JyZWN0ICovCiAKQEAgLTIwOSw3ICsyMDgsNyBAQCBfaGFzaF9nZXRu ZXdidWYoUmVsYXRpb24gcmVsLCBCbG9ja051bWJlciBibGtubywgRm9ya051bWJlciBmb3Jr TnVtKQogCS8qIHNtZ3IgaW5zaXN0cyB3ZSBleHBsaWNpdGx5IGV4dGVuZCB0aGUgcmVsYXRp b24gKi8KIAlpZiAoYmxrbm8gPT0gbmJsb2NrcykKIAl7Ci0JCWJ1ZiA9IEV4dGVuZEJ1ZmZl cmVkUmVsKEJNUl9SRUwocmVsKSwgZm9ya051bSwgTlVMTCwKKwkJYnVmID0gRXh0ZW5kQnVm ZmVyZWRSZWwoQk1SX1JFTChyZWwpLCBmb3JrTnVtLAogCQkJCQkJCQlFQl9MT0NLX0ZJUlNU IHwgRUJfU0tJUF9FWFRFTlNJT05fTE9DSyk7CiAJCWlmIChCdWZmZXJHZXRCbG9ja051bWJl cihidWYpICE9IGJsa25vKQogCQkJZWxvZyhFUlJPUiwgInVuZXhwZWN0ZWQgaGFzaCByZWxh dGlvbiBzaXplOiAldSwgc2hvdWxkIGJlICV1IiwKQEAgLTIxNyw4ICsyMTYsNyBAQCBfaGFz aF9nZXRuZXdidWYoUmVsYXRpb24gcmVsLCBCbG9ja051bWJlciBibGtubywgRm9ya051bWJl ciBmb3JrTnVtKQogCX0KIAllbHNlCiAJewotCQlidWYgPSBSZWFkQnVmZmVyRXh0ZW5kZWQo cmVsLCBmb3JrTnVtLCBibGtubywgUkJNX1pFUk9fQU5EX0xPQ0ssCi0JCQkJCQkJCSBOVUxM KTsKKwkJYnVmID0gUmVhZEJ1ZmZlckV4dGVuZGVkKHJlbCwgZm9ya051bSwgYmxrbm8sIFJC TV9aRVJPX0FORF9MT0NLKTsKIAl9CiAKIAkvKiByZWYgY291bnQgYW5kIGxvY2sgdHlwZSBh cmUgY29ycmVjdCAqLwpAQCAtMjI5LDM0ICsyMjcsNiBAQCBfaGFzaF9nZXRuZXdidWYoUmVs YXRpb24gcmVsLCBCbG9ja051bWJlciBibGtubywgRm9ya051bWJlciBmb3JrTnVtKQogCXJl dHVybiBidWY7CiB9CiAKLS8qCi0gKglfaGFzaF9nZXRidWZfd2l0aF9zdHJhdGVneSgpIC0t IEdldCBhIGJ1ZmZlciB3aXRoIG5vbmRlZmF1bHQgc3RyYXRlZ3kuCi0gKgotICoJCVRoaXMg aXMgaWRlbnRpY2FsIHRvIF9oYXNoX2dldGJ1ZigpIGJ1dCBhbHNvIGFsbG93cyBhIGJ1ZmZl ciBhY2Nlc3MKLSAqCQlzdHJhdGVneSB0byBiZSBzcGVjaWZpZWQuICBXZSB1c2UgdGhpcyBm b3IgVkFDVVVNIG9wZXJhdGlvbnMuCi0gKi8KLUJ1ZmZlcgotX2hhc2hfZ2V0YnVmX3dpdGhf c3RyYXRlZ3koUmVsYXRpb24gcmVsLCBCbG9ja051bWJlciBibGtubywKLQkJCQkJCSAgIGlu dCBhY2Nlc3MsIGludCBmbGFncywKLQkJCQkJCSAgIEJ1ZmZlckFjY2Vzc1N0cmF0ZWd5IGJz dHJhdGVneSkKLXsKLQlCdWZmZXIJCWJ1ZjsKLQotCWlmIChibGtubyA9PSBQX05FVykKLQkJ ZWxvZyhFUlJPUiwgImhhc2ggQU0gZG9lcyBub3QgdXNlIFBfTkVXIik7Ci0KLQlidWYgPSBS ZWFkQnVmZmVyRXh0ZW5kZWQocmVsLCBNQUlOX0ZPUktOVU0sIGJsa25vLCBSQk1fTk9STUFM LCBic3RyYXRlZ3kpOwotCi0JaWYgKGFjY2VzcyAhPSBIQVNIX05PTE9DSykKLQkJTG9ja0J1 ZmZlcihidWYsIGFjY2Vzcyk7Ci0KLQkvKiByZWYgY291bnQgYW5kIGxvY2sgdHlwZSBhcmUg Y29ycmVjdCAqLwotCi0JX2hhc2hfY2hlY2twYWdlKHJlbCwgYnVmLCBmbGFncyk7Ci0KLQly ZXR1cm4gYnVmOwotfQotCiAvKgogICoJX2hhc2hfcmVsYnVmKCkgLS0gcmVsZWFzZSBhIGxv Y2tlZCBidWZmZXIuCiAgKgpAQCAtNzU4LDcgKzcyOCw3IEBAIHJlc3RhcnRfZXhwYW5kOgog CQkvKiBSZWxlYXNlIHRoZSBtZXRhcGFnZSBsb2NrLiAqLwogCQlMb2NrQnVmZmVyKG1ldGFi dWYsIEJVRkZFUl9MT0NLX1VOTE9DSyk7CiAKLQkJaGFzaGJ1Y2tldGNsZWFudXAocmVsLCBv bGRfYnVja2V0LCBidWZfb2Jsa25vLCBzdGFydF9vYmxrbm8sIE5VTEwsCisJCWhhc2hidWNr ZXRjbGVhbnVwKHJlbCwgb2xkX2J1Y2tldCwgYnVmX29ibGtubywgc3RhcnRfb2Jsa25vLAog CQkJCQkJICBtYXhidWNrZXQsIGhpZ2htYXNrLCBsb3dtYXNrLCBOVUxMLCBOVUxMLCB0cnVl LAogCQkJCQkJICBOVUxMLCBOVUxMKTsKIApAQCAtMTMzMyw3ICsxMzAzLDcgQEAgX2hhc2hf c3BsaXRidWNrZXQoUmVsYXRpb24gcmVsLAogCXsKIAkJTG9ja0J1ZmZlcihidWNrZXRfbmJ1 ZiwgQlVGRkVSX0xPQ0tfVU5MT0NLKTsKIAkJaGFzaGJ1Y2tldGNsZWFudXAocmVsLCBvYnVj a2V0LCBidWNrZXRfb2J1ZiwKLQkJCQkJCSAgQnVmZmVyR2V0QmxvY2tOdW1iZXIoYnVja2V0 X29idWYpLCBOVUxMLAorCQkJCQkJICBCdWZmZXJHZXRCbG9ja051bWJlcihidWNrZXRfb2J1 ZiksCiAJCQkJCQkgIG1heGJ1Y2tldCwgaGlnaG1hc2ssIGxvd21hc2ssIE5VTEwsIE5VTEws IHRydWUsCiAJCQkJCQkgIE5VTEwsIE5VTEwpOwogCX0KZGlmZiAtLWdpdCBhL3NyYy9iYWNr ZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbS5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVh cGFtLmMKaW5kZXggZGUzMWEyMDRjOWYuLjQ3OWU0NWJmMzNjIDEwMDY0NAotLS0gYS9zcmMv YmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW0uYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3Mv aGVhcC9oZWFwYW0uYwpAQCAtMzU5LDcgKzM1OSw2IEBAIHN0YXRpYyB2b2lkCiBpbml0c2Nh bihIZWFwU2NhbkRlc2Mgc2NhbiwgU2NhbktleSBrZXksIGJvb2wga2VlcF9zdGFydGJsb2Nr KQogewogCVBhcmFsbGVsQmxvY2tUYWJsZVNjYW5EZXNjIGJwc2NhbiA9IE5VTEw7Ci0JYm9v bAkJYWxsb3dfc3RyYXQ7CiAJYm9vbAkJYWxsb3dfc3luYzsKIAogCS8qCkBAIC0zOTYsMjQg KzM5NSwxMCBAQCBpbml0c2NhbihIZWFwU2NhbkRlc2Mgc2NhbiwgU2NhbktleSBrZXksIGJv b2wga2VlcF9zdGFydGJsb2NrKQogCWlmICghUmVsYXRpb25Vc2VzTG9jYWxCdWZmZXJzKHNj YW4tPnJzX2Jhc2UucnNfcmQpICYmCiAJCXNjYW4tPnJzX25ibG9ja3MgPiBOQnVmZmVycyAv IDQpCiAJewotCQlhbGxvd19zdHJhdCA9IChzY2FuLT5yc19iYXNlLnJzX2ZsYWdzICYgU09f QUxMT1dfU1RSQVQpICE9IDA7CiAJCWFsbG93X3N5bmMgPSAoc2Nhbi0+cnNfYmFzZS5yc19m bGFncyAmIFNPX0FMTE9XX1NZTkMpICE9IDA7CiAJfQogCWVsc2UKLQkJYWxsb3dfc3RyYXQg PSBhbGxvd19zeW5jID0gZmFsc2U7Ci0KLQlpZiAoYWxsb3dfc3RyYXQpCi0JewotCQkvKiBE dXJpbmcgYSByZXNjYW4sIGtlZXAgdGhlIHByZXZpb3VzIHN0cmF0ZWd5IG9iamVjdC4gKi8K LQkJaWYgKHNjYW4tPnJzX3N0cmF0ZWd5ID09IE5VTEwpCi0JCQlzY2FuLT5yc19zdHJhdGVn eSA9IEdldEFjY2Vzc1N0cmF0ZWd5KEJBU19CVUxLUkVBRCk7Ci0JfQotCWVsc2UKLQl7Ci0J CWlmIChzY2FuLT5yc19zdHJhdGVneSAhPSBOVUxMKQotCQkJRnJlZUFjY2Vzc1N0cmF0ZWd5 KHNjYW4tPnJzX3N0cmF0ZWd5KTsKLQkJc2Nhbi0+cnNfc3RyYXRlZ3kgPSBOVUxMOwotCX0K KwkJYWxsb3dfc3luYyA9IGZhbHNlOwogCiAJaWYgKHNjYW4tPnJzX2Jhc2UucnNfcGFyYWxs ZWwgIT0gTlVMTCkKIAl7CkBAIC0xMjAyLDcgKzExODcsNiBAQCBoZWFwX2JlZ2luc2NhbihS ZWxhdGlvbiByZWxhdGlvbiwgU25hcHNob3Qgc25hcHNob3QsCiAJc2Nhbi0+cnNfYmFzZS5y c19mbGFncyA9IGZsYWdzOwogCXNjYW4tPnJzX2Jhc2UucnNfcGFyYWxsZWwgPSBwYXJhbGxl bF9zY2FuOwogCXNjYW4tPnJzX2Jhc2UucnNfaW5zdHJ1bWVudCA9IE5VTEw7Ci0Jc2Nhbi0+ cnNfc3RyYXRlZ3kgPSBOVUxMOwkvKiBzZXQgaW4gaW5pdHNjYW4gKi8KIAlzY2FuLT5yc19j YnVmID0gSW52YWxpZEJ1ZmZlcjsKIAogCS8qCkBAIC0xMjczLDggKzEyNTcsNyBAQCBoZWFw X2JlZ2luc2NhbihSZWxhdGlvbiByZWxhdGlvbiwgU25hcHNob3Qgc25hcHNob3QsCiAKIAkv KgogCSAqIFNldCB1cCBhIHJlYWQgc3RyZWFtIGZvciBzZXF1ZW50aWFsIHNjYW5zIGFuZCBU SUQgcmFuZ2Ugc2NhbnMuIFRoaXMKLQkgKiBzaG91bGQgYmUgZG9uZSBhZnRlciBpbml0c2Nh bigpIGJlY2F1c2UgaW5pdHNjYW4oKSBhbGxvY2F0ZXMgdGhlCi0JICogQnVmZmVyQWNjZXNz U3RyYXRlZ3kgb2JqZWN0IHBhc3NlZCB0byB0aGUgcmVhZCBzdHJlYW0gQVBJLgorCSAqIHNo b3VsZCBiZSBkb25lIGFmdGVyIGluaXRzY2FuKCkuCiAJICovCiAJaWYgKHNjYW4tPnJzX2Jh c2UucnNfZmxhZ3MgJiBTT19UWVBFX1NFUVNDQU4gfHwKIAkJc2Nhbi0+cnNfYmFzZS5yc19m bGFncyAmIFNPX1RZUEVfVElEUkFOR0VTQ0FOKQpAQCAtMTI5NSw3ICsxMjc4LDYgQEAgaGVh cF9iZWdpbnNjYW4oUmVsYXRpb24gcmVsYXRpb24sIFNuYXBzaG90IHNuYXBzaG90LAogCQkg Ki8KIAkJc2Nhbi0+cnNfcmVhZF9zdHJlYW0gPSByZWFkX3N0cmVhbV9iZWdpbl9yZWxhdGlv bihSRUFEX1NUUkVBTV9TRVFVRU5USUFMIHwKIAkJCQkJCQkJCQkJCQkJICBSRUFEX1NUUkVB TV9VU0VfQkFUQ0hJTkcsCi0JCQkJCQkJCQkJCQkJCSAgc2Nhbi0+cnNfc3RyYXRlZ3ksCiAJ CQkJCQkJCQkJCQkJCSAgc2Nhbi0+cnNfYmFzZS5yc19yZCwKIAkJCQkJCQkJCQkJCQkJICBN QUlOX0ZPUktOVU0sCiAJCQkJCQkJCQkJCQkJCSAgY2IsCkBAIC0xMzA2LDcgKzEyODgsNiBA QCBoZWFwX2JlZ2luc2NhbihSZWxhdGlvbiByZWxhdGlvbiwgU25hcHNob3Qgc25hcHNob3Qs CiAJewogCQlzY2FuLT5yc19yZWFkX3N0cmVhbSA9IHJlYWRfc3RyZWFtX2JlZ2luX3JlbGF0 aW9uKFJFQURfU1RSRUFNX0RFRkFVTFQgfAogCQkJCQkJCQkJCQkJCQkgIFJFQURfU1RSRUFN X1VTRV9CQVRDSElORywKLQkJCQkJCQkJCQkJCQkJICBzY2FuLT5yc19zdHJhdGVneSwKIAkJ CQkJCQkJCQkJCQkJICBzY2FuLT5yc19iYXNlLnJzX3JkLAogCQkJCQkJCQkJCQkJCQkgIE1B SU5fRk9SS05VTSwKIAkJCQkJCQkJCQkJCQkJICBiaXRtYXBoZWFwX3N0cmVhbV9yZWFkX25l eHQsCkBAIC0xNDAyLDkgKzEzODMsNiBAQCBoZWFwX2VuZHNjYW4oVGFibGVTY2FuRGVzYyBz c2NhbikKIAlpZiAoQnVmZmVySXNWYWxpZChzY2FuLT5yc192bWJ1ZmZlcikpCiAJCVJlbGVh c2VCdWZmZXIoc2Nhbi0+cnNfdm1idWZmZXIpOwogCi0JLyoKLQkgKiBNdXN0IGZyZWUgdGhl IHJlYWQgc3RyZWFtIGJlZm9yZSBmcmVlaW5nIHRoZSBCdWZmZXJBY2Nlc3NTdHJhdGVneS4K LQkgKi8KIAlpZiAoc2Nhbi0+cnNfcmVhZF9zdHJlYW0pCiAJCXJlYWRfc3RyZWFtX2VuZChz Y2FuLT5yc19yZWFkX3N0cmVhbSk7CiAKQEAgLTE0MTYsOSArMTM5NCw2IEBAIGhlYXBfZW5k c2NhbihUYWJsZVNjYW5EZXNjIHNzY2FuKQogCWlmIChzY2FuLT5yc19iYXNlLnJzX2tleSkK IAkJcGZyZWUoc2Nhbi0+cnNfYmFzZS5yc19rZXkpOwogCi0JaWYgKHNjYW4tPnJzX3N0cmF0 ZWd5ICE9IE5VTEwpCi0JCUZyZWVBY2Nlc3NTdHJhdGVneShzY2FuLT5yc19zdHJhdGVneSk7 Ci0KIAlpZiAoc2Nhbi0+cnNfcGFyYWxsZWx3b3JrZXJkYXRhICE9IE5VTEwpCiAJCXBmcmVl KHNjYW4tPnJzX3BhcmFsbGVsd29ya2VyZGF0YSk7CiAKQEAgLTE5MzksNyArMTkxNCw2IEBA IEdldEJ1bGtJbnNlcnRTdGF0ZSh2b2lkKQogCUJ1bGtJbnNlcnRTdGF0ZSBiaXN0YXRlOwog CiAJYmlzdGF0ZSA9IChCdWxrSW5zZXJ0U3RhdGUpIHBhbGxvY19vYmplY3QoQnVsa0luc2Vy dFN0YXRlRGF0YSk7Ci0JYmlzdGF0ZS0+c3RyYXRlZ3kgPSBHZXRBY2Nlc3NTdHJhdGVneShC QVNfQlVMS1dSSVRFKTsKIAliaXN0YXRlLT5jdXJyZW50X2J1ZiA9IEludmFsaWRCdWZmZXI7 CiAJYmlzdGF0ZS0+bmV4dF9mcmVlID0gSW52YWxpZEJsb2NrTnVtYmVyOwogCWJpc3RhdGUt Pmxhc3RfZnJlZSA9IEludmFsaWRCbG9ja051bWJlcjsKQEAgLTE5NTUsNyArMTkyOSw2IEBA IEZyZWVCdWxrSW5zZXJ0U3RhdGUoQnVsa0luc2VydFN0YXRlIGJpc3RhdGUpCiB7CiAJaWYg KGJpc3RhdGUtPmN1cnJlbnRfYnVmICE9IEludmFsaWRCdWZmZXIpCiAJCVJlbGVhc2VCdWZm ZXIoYmlzdGF0ZS0+Y3VycmVudF9idWYpOwotCUZyZWVBY2Nlc3NTdHJhdGVneShiaXN0YXRl LT5zdHJhdGVneSk7CiAJcGZyZWUoYmlzdGF0ZSk7CiB9CiAKZGlmZiAtLWdpdCBhL3NyYy9i YWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9oYW5kbGVyLmMgYi9zcmMvYmFja2VuZC9hY2Nl c3MvaGVhcC9oZWFwYW1faGFuZGxlci5jCmluZGV4IGJmODc0MzBjZjAxLi5kMTQ2NThkNzIx OCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtX2hhbmRsZXIu YworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1faGFuZGxlci5jCkBAIC0y MjEzLDkgKzIyMTMsOSBAQCBoZWFwYW1fc2Nhbl9zYW1wbGVfbmV4dF9ibG9jayhUYWJsZVNj YW5EZXNjIHNjYW4sIFNhbXBsZVNjYW5TdGF0ZSAqc2NhbnN0YXRlKQogCSAqLwogCUNIRUNL X0ZPUl9JTlRFUlJVUFRTKCk7CiAKLQkvKiBSZWFkIHBhZ2UgdXNpbmcgc2VsZWN0ZWQgc3Ry YXRlZ3kgKi8KKwkvKiBSZWFkIHBhZ2UgKi8KIAloc2Nhbi0+cnNfY2J1ZiA9IFJlYWRCdWZm ZXJFeHRlbmRlZChoc2Nhbi0+cnNfYmFzZS5yc19yZCwgTUFJTl9GT1JLTlVNLAotCQkJCQkJ CQkJCWJsb2Nrbm8sIFJCTV9OT1JNQUwsIGhzY2FuLT5yc19zdHJhdGVneSk7CisJCQkJCQkJ CQkJYmxvY2tubywgUkJNX05PUk1BTCk7CiAKIAkvKiBpbiBwYWdlbW9kZSwgcHJ1bmUgdGhl IHBhZ2UgYW5kIGRldGVybWluZSB2aXNpYmxlIHR1cGxlIG9mZnNldHMgKi8KIAlpZiAoaHNj YW4tPnJzX2Jhc2UucnNfZmxhZ3MgJiBTT19BTExPV19QQUdFTU9ERSkKZGlmZiAtLWdpdCBh L3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hpby5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hl YXAvaGlvLmMKaW5kZXggZTk2ZTBmNzdkOTIuLjliZjdhYmMyNDdmIDEwMDY0NAotLS0gYS9z cmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oaW8uYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3Mv aGVhcC9oaW8uYwpAQCAtODAsNyArODAsOCBAQCBSZWxhdGlvblB1dEhlYXBUdXBsZShSZWxh dGlvbiByZWxhdGlvbiwKIH0KIAogLyoKLSAqIFJlYWQgaW4gYSBidWZmZXIgaW4gbW9kZSwg dXNpbmcgYnVsay1pbnNlcnQgc3RyYXRlZ3kgaWYgYmlzdGF0ZSBpc24ndCBOVUxMLgorICog UmVhZCBpbiBhIGJ1ZmZlciBpbiBtb2RlLCB1c2luZyB0aGUgYmlzdGF0ZSdzIHBpbm5lZCB0 YXJnZXQgcGFnZSBpZgorICogYXZhaWxhYmxlLgogICovCiBzdGF0aWMgQnVmZmVyCiBSZWFk QnVmZmVyQkkoUmVsYXRpb24gcmVsYXRpb24sIEJsb2NrTnVtYmVyIHRhcmdldEJsb2NrLApA QCAtOTEsNyArOTIsNyBAQCBSZWFkQnVmZmVyQkkoUmVsYXRpb24gcmVsYXRpb24sIEJsb2Nr TnVtYmVyIHRhcmdldEJsb2NrLAogCS8qIElmIG5vdCBidWxrLWluc2VydCwgZXhhY3RseSBs aWtlIFJlYWRCdWZmZXIgKi8KIAlpZiAoIWJpc3RhdGUpCiAJCXJldHVybiBSZWFkQnVmZmVy RXh0ZW5kZWQocmVsYXRpb24sIE1BSU5fRk9SS05VTSwgdGFyZ2V0QmxvY2ssCi0JCQkJCQkJ CSAgbW9kZSwgTlVMTCk7CisJCQkJCQkJCSAgbW9kZSk7CiAKIAkvKiBJZiB3ZSBoYXZlIHRo ZSBkZXNpcmVkIGJsb2NrIGFscmVhZHkgcGlubmVkLCByZS1waW4gYW5kIHJldHVybiBpdCAq LwogCWlmIChiaXN0YXRlLT5jdXJyZW50X2J1ZiAhPSBJbnZhbGlkQnVmZmVyKQpAQCAtMTEz LDkgKzExNCw5IEBAIFJlYWRCdWZmZXJCSShSZWxhdGlvbiByZWxhdGlvbiwgQmxvY2tOdW1i ZXIgdGFyZ2V0QmxvY2ssCiAJCWJpc3RhdGUtPmN1cnJlbnRfYnVmID0gSW52YWxpZEJ1ZmZl cjsKIAl9CiAKLQkvKiBQZXJmb3JtIGEgcmVhZCB1c2luZyB0aGUgYnVmZmVyIHN0cmF0ZWd5 ICovCisJLyogUGVyZm9ybSB0aGUgcmVhZCAqLwogCWJ1ZmZlciA9IFJlYWRCdWZmZXJFeHRl bmRlZChyZWxhdGlvbiwgTUFJTl9GT1JLTlVNLCB0YXJnZXRCbG9jaywKLQkJCQkJCQkJbW9k ZSwgYmlzdGF0ZS0+c3RyYXRlZ3kpOworCQkJCQkJCQltb2RlKTsKIAogCS8qIFNhdmUgdGhl IHNlbGVjdGVkIGJsb2NrIGFzIHRhcmdldCBmb3IgZnV0dXJlIGluc2VydHMgKi8KIAlJbmNy QnVmZmVyUmVmQ291bnQoYnVmZmVyKTsKQEAgLTMzNyw3ICszMzgsNiBAQCBSZWxhdGlvbkFk ZEJsb2NrcyhSZWxhdGlvbiByZWxhdGlvbiwgQnVsa0luc2VydFN0YXRlIGJpc3RhdGUsCiAJ ICogd2F5IGxhcmdlci4KIAkgKi8KIAlmaXJzdF9ibG9jayA9IEV4dGVuZEJ1ZmZlcmVkUmVs QnkoQk1SX1JFTChyZWxhdGlvbiksIE1BSU5fRk9SS05VTSwKLQkJCQkJCQkJCSAgYmlzdGF0 ZSA/IGJpc3RhdGUtPnN0cmF0ZWd5IDogTlVMTCwKIAkJCQkJCQkJCSAgRUJfTE9DS19GSVJT VCwKIAkJCQkJCQkJCSAgZXh0ZW5kX2J5X3BhZ2VzLAogCQkJCQkJCQkJICB2aWN0aW1fYnVm ZmVycywKQEAgLTQ4NCw4ICs0ODQsNyBAQCBSZWxhdGlvbkFkZEJsb2NrcyhSZWxhdGlvbiBy ZWxhdGlvbiwgQnVsa0luc2VydFN0YXRlIGJpc3RhdGUsCiAgKgogICoJVGhlIGNhbGxlciBj YW4gYWxzbyBwcm92aWRlIGEgQnVsa0luc2VydFN0YXRlIG9iamVjdCB0byBvcHRpbWl6ZSBt YW55CiAgKglpbnNlcnRpb25zIGludG8gdGhlIHNhbWUgcmVsYXRpb24uICBUaGlzIGtlZXBz IGEgcGluIG9uIHRoZSBjdXJyZW50Ci0gKglpbnNlcnRpb24gdGFyZ2V0IHBhZ2UgKHRvIHNh dmUgcGluL3VucGluIGN5Y2xlcykgYW5kIGFsc28gcGFzc2VzIGEKLSAqCUJVTEtXUklURSBi dWZmZXIgc2VsZWN0aW9uIHN0cmF0ZWd5IG9iamVjdCB0byB0aGUgYnVmZmVyIG1hbmFnZXIu CisgKglpbnNlcnRpb24gdGFyZ2V0IHBhZ2UgKHRvIHNhdmUgcGluL3VucGluIGN5Y2xlcyku CiAgKglQYXNzaW5nIE5VTEwgZm9yIGJpc3RhdGUgc2VsZWN0cyB0aGUgZGVmYXVsdCBiZWhh dmlvci4KICAqCiAgKglXZSBkb24ndCBmaWxsIGV4aXN0aW5nIHBhZ2VzIGZ1cnRoZXIgdGhh biB0aGUgZmlsbGZhY3RvciwgZXhjZXB0IGZvciBsYXJnZQpkaWZmIC0tZ2l0IGEvc3JjL2Jh Y2tlbmQvYWNjZXNzL2hlYXAvdmFjdXVtbGF6eS5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hl YXAvdmFjdXVtbGF6eS5jCmluZGV4IDM5Mzk1YWVkMGQ1Li44YmM4ZTQ3MGFmMyAxMDA2NDQK LS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvdmFjdXVtbGF6eS5jCisrKyBiL3NyYy9i YWNrZW5kL2FjY2Vzcy9oZWFwL3ZhY3V1bWxhenkuYwpAQCAtMjU3LDcgKzI1Nyw2IEBAIHR5 cGVkZWYgc3RydWN0IExWUmVsU3RhdGUKIAlpbnQJCQluaW5kZXhlczsKIAogCS8qIEJ1ZmZl ciBhY2Nlc3Mgc3RyYXRlZ3kgYW5kIHBhcmFsbGVsIHZhY3V1bSBzdGF0ZSAqLwotCUJ1ZmZl ckFjY2Vzc1N0cmF0ZWd5IGJzdHJhdGVneTsKIAlQYXJhbGxlbFZhY3V1bVN0YXRlICpwdnM7 CiAKIAkvKiBBZ2dyZXNzaXZlIFZBQ1VVTT8gKG11c3Qgc2V0IHJlbGZyb3plbnhpZCA+PSBG cmVlemVMaW1pdCkgKi8KQEAgLTYyMSw4ICs2MjAsNyBAQCBoZWFwX3ZhY3V1bV9lYWdlcl9z Y2FuX3NldHVwKExWUmVsU3RhdGUgKnZhY3JlbCwgY29uc3QgVmFjdXVtUGFyYW1zICpwYXJh bXMpCiAgKgkJYW5kIGxvY2tlZCB0aGUgcmVsYXRpb24uCiAgKi8KIHZvaWQKLWhlYXBfdmFj dXVtX3JlbChSZWxhdGlvbiByZWwsIGNvbnN0IFZhY3V1bVBhcmFtcyAqcGFyYW1zLAotCQkJ CUJ1ZmZlckFjY2Vzc1N0cmF0ZWd5IGJzdHJhdGVneSkKK2hlYXBfdmFjdXVtX3JlbChSZWxh dGlvbiByZWwsIGNvbnN0IFZhY3V1bVBhcmFtcyAqcGFyYW1zKQogewogCUxWUmVsU3RhdGUg KnZhY3JlbDsKIAlib29sCQl2ZXJib3NlLApAQCAtNjk5LDcgKzY5Nyw2IEBAIGhlYXBfdmFj dXVtX3JlbChSZWxhdGlvbiByZWwsIGNvbnN0IFZhY3V1bVBhcmFtcyAqcGFyYW1zLAogCXZh Y3JlbC0+cmVsID0gcmVsOwogCXZhY19vcGVuX2luZGV4ZXModmFjcmVsLT5yZWwsIFJvd0V4 Y2x1c2l2ZUxvY2ssICZ2YWNyZWwtPm5pbmRleGVzLAogCQkJCQkgJnZhY3JlbC0+aW5kcmVs cyk7Ci0JdmFjcmVsLT5ic3RyYXRlZ3kgPSBic3RyYXRlZ3k7CiAJaWYgKGluc3RydW1lbnQg JiYgdmFjcmVsLT5uaW5kZXhlcyA+IDApCiAJewogCQkvKiBDb3B5IGluZGV4IG5hbWVzIHVz ZWQgYnkgaW5zdHJ1bWVudGF0aW9uIChub3QgZXJyb3IgcmVwb3J0aW5nKSAqLwpAQCAtMTMx MSw3ICsxMzA4LDYgQEAgbGF6eV9zY2FuX2hlYXAoTFZSZWxTdGF0ZSAqdmFjcmVsKQogCSAq IGV4cGxpY2l0IHdvcmsgaW4gaGVhcF92YWNfc2Nhbl9uZXh0X2Jsb2NrLgogCSAqLwogCXN0 cmVhbSA9IHJlYWRfc3RyZWFtX2JlZ2luX3JlbGF0aW9uKFJFQURfU1RSRUFNX01BSU5URU5B TkNFLAotCQkJCQkJCQkJCXZhY3JlbC0+YnN0cmF0ZWd5LAogCQkJCQkJCQkJCXZhY3JlbC0+ cmVsLAogCQkJCQkJCQkJCU1BSU5fRk9SS05VTSwKIAkJCQkJCQkJCQloZWFwX3ZhY19zY2Fu X25leHRfYmxvY2ssCkBAIC0yNjcwLDcgKzI2NjYsNiBAQCBsYXp5X3ZhY3V1bV9oZWFwX3Jl bChMVlJlbFN0YXRlICp2YWNyZWwpCiAJICovCiAJc3RyZWFtID0gcmVhZF9zdHJlYW1fYmVn aW5fcmVsYXRpb24oUkVBRF9TVFJFQU1fTUFJTlRFTkFOQ0UgfAogCQkJCQkJCQkJCVJFQURf U1RSRUFNX1VTRV9CQVRDSElORywKLQkJCQkJCQkJCQl2YWNyZWwtPmJzdHJhdGVneSwKIAkJ CQkJCQkJCQl2YWNyZWwtPnJlbCwKIAkJCQkJCQkJCQlNQUlOX0ZPUktOVU0sCiAJCQkJCQkJ CQkJdmFjdXVtX3JlYXBfbHBfcmVhZF9zdHJlYW1fbmV4dCwKQEAgLTI5MDQsMTMgKzI4OTks NiBAQCBsYXp5X2NoZWNrX3dyYXBhcm91bmRfZmFpbHNhZmUoTFZSZWxTdGF0ZSAqdmFjcmVs KQogCiAJCVZhY3V1bUZhaWxzYWZlQWN0aXZlID0gdHJ1ZTsKIAotCQkvKgotCQkgKiBBYmFu ZG9uIHVzZSBvZiBhIGJ1ZmZlciBhY2Nlc3Mgc3RyYXRlZ3kgdG8gYWxsb3cgdXNlIG9mIGFs bCBvZgotCQkgKiBzaGFyZWQgYnVmZmVycy4gIFdlIGFzc3VtZSB0aGUgY2FsbGVyIHdobyBh bGxvY2F0ZWQgdGhlIG1lbW9yeSBmb3IKLQkJICogdGhlIEJ1ZmZlckFjY2Vzc1N0cmF0ZWd5 IHdpbGwgZnJlZSBpdC4KLQkJICovCi0JCXZhY3JlbC0+YnN0cmF0ZWd5ID0gTlVMTDsKLQog CQkvKiBEaXNhYmxlIGluZGV4IHZhY3V1bWluZywgaW5kZXggY2xlYW51cCwgYW5kIGhlYXAg cmVsIHRydW5jYXRpb24gKi8KIAkJdmFjcmVsLT5kb19pbmRleF92YWN1dW1pbmcgPSBmYWxz ZTsKIAkJdmFjcmVsLT5kb19pbmRleF9jbGVhbnVwID0gZmFsc2U7CkBAIC0zMDIzLDcgKzMw MTEsNiBAQCBsYXp5X3ZhY3V1bV9vbmVfaW5kZXgoUmVsYXRpb24gaW5kcmVsLCBJbmRleEJ1 bGtEZWxldGVSZXN1bHQgKmlzdGF0LAogCWl2aW5mby5lc3RpbWF0ZWRfY291bnQgPSB0cnVl OwogCWl2aW5mby5tZXNzYWdlX2xldmVsID0gREVCVUcyOwogCWl2aW5mby5udW1faGVhcF90 dXBsZXMgPSByZWx0dXBsZXM7Ci0JaXZpbmZvLnN0cmF0ZWd5ID0gdmFjcmVsLT5ic3RyYXRl Z3k7CiAKIAkvKgogCSAqIFVwZGF0ZSBlcnJvciB0cmFjZWJhY2sgaW5mb3JtYXRpb24uCkBA IC0zMDc0LDcgKzMwNjEsNiBAQCBsYXp5X2NsZWFudXBfb25lX2luZGV4KFJlbGF0aW9uIGlu ZHJlbCwgSW5kZXhCdWxrRGVsZXRlUmVzdWx0ICppc3RhdCwKIAlpdmluZm8ubWVzc2FnZV9s ZXZlbCA9IERFQlVHMjsKIAogCWl2aW5mby5udW1faGVhcF90dXBsZXMgPSByZWx0dXBsZXM7 Ci0JaXZpbmZvLnN0cmF0ZWd5ID0gdmFjcmVsLT5ic3RyYXRlZ3k7CiAKIAkvKgogCSAqIFVw ZGF0ZSBlcnJvciB0cmFjZWJhY2sgaW5mb3JtYXRpb24uCkBAIC0zMzU0LDggKzMzNDAsNyBA QCBjb3VudF9ub25kZWxldGFibGVfcGFnZXMoTFZSZWxTdGF0ZSAqdmFjcmVsLCBib29sICps b2NrX3dhaXRlcl9kZXRlY3RlZCkKIAkJCXByZWZldGNoZWRVbnRpbCA9IHByZWZldGNoU3Rh cnQ7CiAJCX0KIAotCQlidWYgPSBSZWFkQnVmZmVyRXh0ZW5kZWQodmFjcmVsLT5yZWwsIE1B SU5fRk9SS05VTSwgYmxrbm8sIFJCTV9OT1JNQUwsCi0JCQkJCQkJCSB2YWNyZWwtPmJzdHJh dGVneSk7CisJCWJ1ZiA9IFJlYWRCdWZmZXJFeHRlbmRlZCh2YWNyZWwtPnJlbCwgTUFJTl9G T1JLTlVNLCBibGtubywgUkJNX05PUk1BTCk7CiAKIAkJLyogSW4gdGhpcyBwaGFzZSB3ZSBv bmx5IG5lZWQgc2hhcmVkIGFjY2VzcyB0byB0aGUgYnVmZmVyICovCiAJCUxvY2tCdWZmZXIo YnVmLCBCVUZGRVJfTE9DS19TSEFSRSk7CkBAIC0zNDQ2LDggKzM0MzEsNyBAQCBkZWFkX2l0 ZW1zX2FsbG9jKExWUmVsU3RhdGUgKnZhY3JlbCwgaW50IG53b3JrZXJzKQogCQkJdmFjcmVs LT5wdnMgPSBwYXJhbGxlbF92YWN1dW1faW5pdCh2YWNyZWwtPnJlbCwgdmFjcmVsLT5pbmRy ZWxzLAogCQkJCQkJCQkJCQkgICB2YWNyZWwtPm5pbmRleGVzLCBud29ya2VycywKIAkJCQkJ CQkJCQkJICAgdmFjX3dvcmtfbWVtLAotCQkJCQkJCQkJCQkgICB2YWNyZWwtPnZlcmJvc2Ug PyBJTkZPIDogREVCVUcyLAotCQkJCQkJCQkJCQkgICB2YWNyZWwtPmJzdHJhdGVneSk7CisJ CQkJCQkJCQkJCSAgIHZhY3JlbC0+dmVyYm9zZSA/IElORk8gOiBERUJVRzIpOwogCiAJCS8q CiAJCSAqIElmIHBhcmFsbGVsIG1vZGUgc3RhcnRlZCwgZGVhZF9pdGVtcyBhbmQgZGVhZF9p dGVtc19pbmZvIHNwYWNlcyBhcmUKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9o ZWFwL3Zpc2liaWxpdHltYXAuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL3Zpc2liaWxp dHltYXAuYwppbmRleCA0ZmQ0NzA3MDJhYS4uYjI2MTJiMWY3MTAgMTAwNjQ0Ci0tLSBhL3Ny Yy9iYWNrZW5kL2FjY2Vzcy9oZWFwL3Zpc2liaWxpdHltYXAuYworKysgYi9zcmMvYmFja2Vu ZC9hY2Nlc3MvaGVhcC92aXNpYmlsaXR5bWFwLmMKQEAgLTU3NSw3ICs1NzUsNyBAQCB2bV9y ZWFkYnVmKFJlbGF0aW9uIHJlbCwgQmxvY2tOdW1iZXIgYmxrbm8sIGJvb2wgZXh0ZW5kKQog CX0KIAllbHNlCiAJCWJ1ZiA9IFJlYWRCdWZmZXJFeHRlbmRlZChyZWwsIFZJU0lCSUxJVFlN QVBfRk9SS05VTSwgYmxrbm8sCi0JCQkJCQkJCSBSQk1fWkVST19PTl9FUlJPUiwgTlVMTCk7 CisJCQkJCQkJCSBSQk1fWkVST19PTl9FUlJPUik7CiAKIAkvKgogCSAqIEluaXRpYWxpemlu ZyB0aGUgcGFnZSB3aGVuIG5lZWRlZCBpcyB0cmlja2llciB0aGFuIGl0IGxvb2tzLCBiZWNh dXNlIG9mCkBAIC02MTEsNyArNjExLDcgQEAgdm1fZXh0ZW5kKFJlbGF0aW9uIHJlbCwgQmxv Y2tOdW1iZXIgdm1fbmJsb2NrcykKIHsKIAlCdWZmZXIJCWJ1ZjsKIAotCWJ1ZiA9IEV4dGVu ZEJ1ZmZlcmVkUmVsVG8oQk1SX1JFTChyZWwpLCBWSVNJQklMSVRZTUFQX0ZPUktOVU0sIE5V TEwsCisJYnVmID0gRXh0ZW5kQnVmZmVyZWRSZWxUbyhCTVJfUkVMKHJlbCksIFZJU0lCSUxJ VFlNQVBfRk9SS05VTSwKIAkJCQkJCQkgIEVCX0NSRUFURV9GT1JLX0lGX05FRURFRCB8CiAJ CQkJCQkJICBFQl9DTEVBUl9TSVpFX0NBQ0hFLAogCQkJCQkJCSAgdm1fbmJsb2NrcywKZGlm ZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0cGFnZS5jIGIvc3JjL2Jh Y2tlbmQvYWNjZXNzL25idHJlZS9uYnRwYWdlLmMKaW5kZXggMTA5MDE3ZDZiNTIuLjdiNWZj MTZkNzVjIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHBhZ2Uu YworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHBhZ2UuYwpAQCAtOTYwLDcg Kzk2MCw3IEBAIF9idF9hbGxvY2J1ZihSZWxhdGlvbiByZWwsIFJlbGF0aW9uIGhlYXByZWwp CiAJICogb3RoZXJ3aXNlIHdvdWxkIG1ha2UsIGFzIHdlIGNhbid0IHVzZSBfYnRfbG9ja2J1 ZigpIHdpdGhvdXQgaW50cm9kdWNpbmcKIAkgKiBhIHJhY2UuCiAJICovCi0JYnVmID0gRXh0 ZW5kQnVmZmVyZWRSZWwoQk1SX1JFTChyZWwpLCBNQUlOX0ZPUktOVU0sIE5VTEwsIEVCX0xP Q0tfRklSU1QpOworCWJ1ZiA9IEV4dGVuZEJ1ZmZlcmVkUmVsKEJNUl9SRUwocmVsKSwgTUFJ Tl9GT1JLTlVNLCBFQl9MT0NLX0ZJUlNUKTsKIAlpZiAoIVJlbGF0aW9uVXNlc0xvY2FsQnVm ZmVycyhyZWwpKQogCQlWQUxHUklORF9NQUtFX01FTV9ERUZJTkVEKEJ1ZmZlckdldFBhZ2Uo YnVmKSwgQkxDS1NaKTsKIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJl ZS9uYnRyZWUuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0cmVlLmMKaW5kZXgg M2RmMmM3NTJlYWQuLjM3OWEyZDM3ZGVmIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nl c3MvbmJ0cmVlL25idHJlZS5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0 cmVlLmMKQEAgLTEzMjQsNyArMTMyNCw2IEBAIGJ0dmFjdXVtc2NhbihJbmRleFZhY3V1bUlu Zm8gKmluZm8sIEluZGV4QnVsa0RlbGV0ZVJlc3VsdCAqc3RhdHMsCiAJc3RyZWFtID0gcmVh ZF9zdHJlYW1fYmVnaW5fcmVsYXRpb24oUkVBRF9TVFJFQU1fTUFJTlRFTkFOQ0UgfAogCQkJ CQkJCQkJCVJFQURfU1RSRUFNX0ZVTEwgfAogCQkJCQkJCQkJCVJFQURfU1RSRUFNX1VTRV9C QVRDSElORywKLQkJCQkJCQkJCQlpbmZvLT5zdHJhdGVneSwKIAkJCQkJCQkJCQlyZWwsCiAJ CQkJCQkJCQkJTUFJTl9GT1JLTlVNLAogCQkJCQkJCQkJCWJsb2NrX3JhbmdlX3JlYWRfc3Ry ZWFtX2NiLApAQCAtMTczMCw4ICsxNzI5LDcgQEAgYmFja3RyYWNrOgogCQkgKiByZWN5Y2xl IGFsbC16ZXJvIHBhZ2VzLCBub3QgZmFpbC4gIEFsc28sIHdlIHdhbnQgdG8gdXNlIGEKIAkJ ICogbm9uZGVmYXVsdCBidWZmZXIgYWNjZXNzIHN0cmF0ZWd5LgogCQkgKi8KLQkJYnVmID0g UmVhZEJ1ZmZlckV4dGVuZGVkKHJlbCwgTUFJTl9GT1JLTlVNLCBibGtubywgUkJNX05PUk1B TCwKLQkJCQkJCQkJIGluZm8tPnN0cmF0ZWd5KTsKKwkJYnVmID0gUmVhZEJ1ZmZlckV4dGVu ZGVkKHJlbCwgTUFJTl9GT1JLTlVNLCBibGtubywgUkJNX05PUk1BTCk7CiAJCWdvdG8gYmFj a3RyYWNrOwogCX0KIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL3NwZ2lzdC9z cGd1dGlscy5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3NwZ2lzdC9zcGd1dGlscy5jCmluZGV4 IGYyZWUzMzNmNjBkLi43ODVlMzg1YWFiNiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNj ZXNzL3NwZ2lzdC9zcGd1dGlscy5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9zcGdpc3Qv c3BndXRpbHMuYwpAQCAtNDMyLDcgKzQzMiw3IEBAIFNwR2lzdE5ld0J1ZmZlcihSZWxhdGlv biBpbmRleCkKIAkJUmVsZWFzZUJ1ZmZlcihidWZmZXIpOwogCX0KIAotCWJ1ZmZlciA9IEV4 dGVuZEJ1ZmZlcmVkUmVsKEJNUl9SRUwoaW5kZXgpLCBNQUlOX0ZPUktOVU0sIE5VTEwsCisJ YnVmZmVyID0gRXh0ZW5kQnVmZmVyZWRSZWwoQk1SX1JFTChpbmRleCksIE1BSU5fRk9SS05V TSwKIAkJCQkJCQkgICBFQl9MT0NLX0ZJUlNUKTsKIAogCXJldHVybiBidWZmZXI7CmRpZmYg LS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3Mvc3BnaXN0L3NwZ3ZhY3V1bS5jIGIvc3JjL2Jh Y2tlbmQvYWNjZXNzL3NwZ2lzdC9zcGd2YWN1dW0uYwppbmRleCBjNDYxZjhkYzAyZC4uOWY2 NDRlZGFmODIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9zcGdpc3Qvc3BndmFj dXVtLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3NwZ2lzdC9zcGd2YWN1dW0uYwpAQCAt NzA0LDggKzcwNCw3IEBAIHNwZ3Byb2Nlc3NwZW5kaW5nKHNwZ0J1bGtEZWxldGVTdGF0ZSAq YmRzKQogCiAJCS8qIGV4YW1pbmUgdGhlIHJlZmVyZW5jZWQgcGFnZSAqLwogCQlibGtubyA9 IEl0ZW1Qb2ludGVyR2V0QmxvY2tOdW1iZXIoJnBpdGVtLT50aWQpOwotCQlidWZmZXIgPSBS ZWFkQnVmZmVyRXh0ZW5kZWQoaW5kZXgsIE1BSU5fRk9SS05VTSwgYmxrbm8sCi0JCQkJCQkJ CQlSQk1fTk9STUFMLCBiZHMtPmluZm8tPnN0cmF0ZWd5KTsKKwkJYnVmZmVyID0gUmVhZEJ1 ZmZlckV4dGVuZGVkKGluZGV4LCBNQUlOX0ZPUktOVU0sIGJsa25vLCBSQk1fTk9STUFMKTsK IAkJTG9ja0J1ZmZlcihidWZmZXIsIEJVRkZFUl9MT0NLX0VYQ0xVU0lWRSk7CiAJCXBhZ2Ug PSBCdWZmZXJHZXRQYWdlKGJ1ZmZlcik7CiAKQEAgLTgzMCw3ICs4MjksNiBAQCBzcGd2YWN1 dW1zY2FuKHNwZ0J1bGtEZWxldGVTdGF0ZSAqYmRzKQogCXN0cmVhbSA9IHJlYWRfc3RyZWFt X2JlZ2luX3JlbGF0aW9uKFJFQURfU1RSRUFNX01BSU5URU5BTkNFIHwKIAkJCQkJCQkJCQlS RUFEX1NUUkVBTV9GVUxMIHwKIAkJCQkJCQkJCQlSRUFEX1NUUkVBTV9VU0VfQkFUQ0hJTkcs Ci0JCQkJCQkJCQkJYmRzLT5pbmZvLT5zdHJhdGVneSwKIAkJCQkJCQkJCQlpbmRleCwKIAkJ CQkJCQkJCQlNQUlOX0ZPUktOVU0sCiAJCQkJCQkJCQkJYmxvY2tfcmFuZ2VfcmVhZF9zdHJl YW1fY2IsCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94bG9naW5z ZXJ0LmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94bG9naW5zZXJ0LmMKaW5kZXgg ZjJlMTBiODJiN2QuLjBjMTZiN2ZlZjBmIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nl c3MvdHJhbnNhbS94bG9naW5zZXJ0LmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5z YW0veGxvZ2luc2VydC5jCkBAIC0xMzQ4LDcgKzEzNDgsNyBAQCBsb2dfbmV3cGFnZV9yYW5n ZShSZWxhdGlvbiByZWwsIEZvcmtOdW1iZXIgZm9ya251bSwKIAkJd2hpbGUgKG5idWZzIDwg WExSX01BWF9CTE9DS19JRCAmJiBibGtubyA8IGVuZGJsaykKIAkJewogCQkJQnVmZmVyCQli dWYgPSBSZWFkQnVmZmVyRXh0ZW5kZWQocmVsLCBmb3JrbnVtLCBibGtubywKLQkJCQkJCQkJ CQkJCSBSQk1fTk9STUFMLCBOVUxMKTsKKwkJCQkJCQkJCQkJCSBSQk1fTk9STUFMKTsKIAog CQkJTG9ja0J1ZmZlcihidWYsIEJVRkZFUl9MT0NLX0VYQ0xVU0lWRSk7CiAKZGlmZiAtLWdp dCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2d1dGlscy5jIGIvc3JjL2JhY2tl bmQvYWNjZXNzL3RyYW5zYW0veGxvZ3V0aWxzLmMKaW5kZXggZDhjMTc5YzVkY2MuLmU1YmU0 OWY4YjVkIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94bG9ndXRp bHMuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94bG9ndXRpbHMuYwpAQCAt NTE5LDcgKzUxOSw3IEBAIFhMb2dSZWFkQnVmZmVyRXh0ZW5kZWQoUmVsRmlsZUxvY2F0b3Ig cmxvY2F0b3IsIEZvcmtOdW1iZXIgZm9ya251bSwKIAl7CiAJCS8qIHBhZ2UgZXhpc3RzIGlu IGZpbGUgKi8KIAkJYnVmZmVyID0gUmVhZEJ1ZmZlcldpdGhvdXRSZWxjYWNoZShybG9jYXRv ciwgZm9ya251bSwgYmxrbm8sCi0JCQkJCQkJCQkJICAgbW9kZSwgTlVMTCwgdHJ1ZSk7CisJ CQkJCQkJCQkJICAgbW9kZSwgdHJ1ZSk7CiAJfQogCWVsc2UKIAl7CkBAIC01MzYsNyArNTM2 LDYgQEAgWExvZ1JlYWRCdWZmZXJFeHRlbmRlZChSZWxGaWxlTG9jYXRvciBybG9jYXRvciwg Rm9ya051bWJlciBmb3JrbnVtLAogCQlBc3NlcnQoSW5SZWNvdmVyeSk7CiAJCWJ1ZmZlciA9 IEV4dGVuZEJ1ZmZlcmVkUmVsVG8oQk1SX1NNR1Ioc21nciwgUkVMUEVSU0lTVEVOQ0VfUEVS TUFORU5UKSwKIAkJCQkJCQkJCSBmb3JrbnVtLAotCQkJCQkJCQkJIE5VTEwsCiAJCQkJCQkJ CQkgRUJfUEVSRk9STUlOR19SRUNPVkVSWSB8CiAJCQkJCQkJCQkgRUJfU0tJUF9FWFRFTlNJ T05fTE9DSywKIAkJCQkJCQkJCSBibGtubyArIDEsCmRpZmYgLS1naXQgYS9zcmMvYmFja2Vu ZC9jYXRhbG9nL2luZGV4LmMgYi9zcmMvYmFja2VuZC9jYXRhbG9nL2luZGV4LmMKaW5kZXgg ODFiYmE0YmVhYzcuLmIwYTdiOGEzM2NkIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jYXRh bG9nL2luZGV4LmMKKysrIGIvc3JjL2JhY2tlbmQvY2F0YWxvZy9pbmRleC5jCkBAIC0zNDMx LDcgKzM0MzEsNiBAQCB2YWxpZGF0ZV9pbmRleChPaWQgaGVhcElkLCBPaWQgaW5kZXhJZCwg U25hcHNob3Qgc25hcHNob3QpCiAJaXZpbmZvLmVzdGltYXRlZF9jb3VudCA9IHRydWU7CiAJ aXZpbmZvLm1lc3NhZ2VfbGV2ZWwgPSBERUJVRzI7CiAJaXZpbmZvLm51bV9oZWFwX3R1cGxl cyA9IGhlYXBSZWxhdGlvbi0+cmRfcmVsLT5yZWx0dXBsZXM7Ci0JaXZpbmZvLnN0cmF0ZWd5 ID0gTlVMTDsKIAogCS8qCiAJICogRW5jb2RlIFRJRHMgYXMgaW50OCB2YWx1ZXMgZm9yIHRo ZSBzb3J0LCByYXRoZXIgdGhhbiBkaXJlY3RseSBzb3J0aW5nCmRpZmYgLS1naXQgYS9zcmMv YmFja2VuZC9jb21tYW5kcy9hbmFseXplLmMgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9hbmFs eXplLmMKaW5kZXggZjY2ZTgwYjc1N2MuLjliMTE3YTUzMTI0IDEwMDY0NAotLS0gYS9zcmMv YmFja2VuZC9jb21tYW5kcy9hbmFseXplLmMKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMv YW5hbHl6ZS5jCkBAIC03Miw3ICs3Miw2IEBAIGludAkJCWRlZmF1bHRfc3RhdGlzdGljc190 YXJnZXQgPSAxMDA7CiAKIC8qIEEgZmV3IHZhcmlhYmxlcyB0aGF0IGRvbid0IHNlZW0gd29y dGggcGFzc2luZyBhcm91bmQgYXMgcGFyYW1ldGVycyAqLwogc3RhdGljIE1lbW9yeUNvbnRl eHQgYW5sX2NvbnRleHQgPSBOVUxMOwotc3RhdGljIEJ1ZmZlckFjY2Vzc1N0cmF0ZWd5IHZh Y19zdHJhdGVneTsKIAogCiBzdGF0aWMgdm9pZCBkb19hbmFseXplX3JlbChSZWxhdGlvbiBv bmVyZWwsCkBAIC0xMDgsOCArMTA3LDcgQEAgc3RhdGljIERhdHVtIGluZF9mZXRjaF9mdW5j KFZhY0F0dHJTdGF0c1Agc3RhdHMsIGludCByb3dudW0sIGJvb2wgKmlzTnVsbCk7CiAgKi8K IHZvaWQKIGFuYWx5emVfcmVsKE9pZCByZWxpZCwgUmFuZ2VWYXIgKnJlbGF0aW9uLAotCQkJ Y29uc3QgVmFjdXVtUGFyYW1zICpwYXJhbXMsIExpc3QgKnZhX2NvbHMsIGJvb2wgaW5fb3V0 ZXJfeGFjdCwKLQkJCUJ1ZmZlckFjY2Vzc1N0cmF0ZWd5IGJzdHJhdGVneSkKKwkJCWNvbnN0 IFZhY3V1bVBhcmFtcyAqcGFyYW1zLCBMaXN0ICp2YV9jb2xzLCBib29sIGluX291dGVyX3hh Y3QpCiB7CiAJUmVsYXRpb24Jb25lcmVsOwogCWludAkJCWVsZXZlbDsKQEAgLTEyNCw3ICsx MjIsNiBAQCBhbmFseXplX3JlbChPaWQgcmVsaWQsIFJhbmdlVmFyICpyZWxhdGlvbiwKIAkJ ZWxldmVsID0gREVCVUcyOwogCiAJLyogU2V0IHVwIHN0YXRpYyB2YXJpYWJsZXMgKi8KLQl2 YWNfc3RyYXRlZ3kgPSBic3RyYXRlZ3k7CiAKIAkvKgogCSAqIENoZWNrIGZvciB1c2VyLXJl cXVlc3RlZCBhYm9ydC4KQEAgLTczMCw3ICs3MjcsNiBAQCBkb19hbmFseXplX3JlbChSZWxh dGlvbiBvbmVyZWwsIGNvbnN0IFZhY3V1bVBhcmFtcyAqcGFyYW1zLAogCQkJaXZpbmZvLmVz dGltYXRlZF9jb3VudCA9IHRydWU7CiAJCQlpdmluZm8ubWVzc2FnZV9sZXZlbCA9IGVsZXZl bDsKIAkJCWl2aW5mby5udW1faGVhcF90dXBsZXMgPSBvbmVyZWwtPnJkX3JlbC0+cmVsdHVw bGVzOwotCQkJaXZpbmZvLnN0cmF0ZWd5ID0gdmFjX3N0cmF0ZWd5OwogCiAJCQlzdGF0cyA9 IGluZGV4X3ZhY3V1bV9jbGVhbnVwKCZpdmluZm8sIE5VTEwpOwogCkBAIC0xMzAyLDcgKzEy OTgsNiBAQCBhY3F1aXJlX3NhbXBsZV9yb3dzKFJlbGF0aW9uIG9uZXJlbCwgaW50IGVsZXZl bCwKIAkgKi8KIAlzdHJlYW0gPSByZWFkX3N0cmVhbV9iZWdpbl9yZWxhdGlvbihSRUFEX1NU UkVBTV9NQUlOVEVOQU5DRSB8CiAJCQkJCQkJCQkJUkVBRF9TVFJFQU1fVVNFX0JBVENISU5H LAotCQkJCQkJCQkJCXZhY19zdHJhdGVneSwKIAkJCQkJCQkJCQlzY2FuLT5yc19yZCwKIAkJ CQkJCQkJCQlNQUlOX0ZPUktOVU0sCiAJCQkJCQkJCQkJYmxvY2tfc2FtcGxpbmdfcmVhZF9z dHJlYW1fbmV4dCwKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2RiY29tbWFu ZHMuYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2RiY29tbWFuZHMuYwppbmRleCBmMDgxOWQx NWFiNy4uNmY2NWQ0OGI2YmQgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2Ri Y29tbWFuZHMuYworKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9kYmNvbW1hbmRzLmMKQEAg LTI2Miw3ICsyNjIsNiBAQCBTY2FuU291cmNlRGF0YWJhc2VQZ0NsYXNzKE9pZCB0YmlkLCBP aWQgZGJpZCwgY2hhciAqc3JjcGF0aCkKIAlMb2NrUmVsSWQJcmVsaWQ7CiAJU25hcHNob3QJ c25hcHNob3Q7CiAJU01nclJlbGF0aW9uIHNtZ3I7Ci0JQnVmZmVyQWNjZXNzU3RyYXRlZ3kg YnN0cmF0ZWd5OwogCiAJLyogR2V0IHBnX2NsYXNzIHJlbGZpbGVudW1iZXIuICovCiAJcmVs ZmlsZW51bWJlciA9IFJlbGF0aW9uTWFwT2lkVG9GaWxlbnVtYmVyRm9yRGF0YWJhc2Uoc3Jj cGF0aCwKQEAgLTI4Miw5ICsyODEsNiBAQCBTY2FuU291cmNlRGF0YWJhc2VQZ0NsYXNzKE9p ZCB0YmlkLCBPaWQgZGJpZCwgY2hhciAqc3JjcGF0aCkKIAluYmxvY2tzID0gc21ncm5ibG9j a3Moc21nciwgTUFJTl9GT1JLTlVNKTsKIAlzbWdyY2xvc2Uoc21ncik7CiAKLQkvKiBVc2Ug YSBidWZmZXIgYWNjZXNzIHN0cmF0ZWd5IHNpbmNlIHRoaXMgaXMgYSBidWxrIHJlYWQgb3Bl cmF0aW9uLiAqLwotCWJzdHJhdGVneSA9IEdldEFjY2Vzc1N0cmF0ZWd5KEJBU19CVUxLUkVB RCk7Ci0KIAkvKgogCSAqIEFzIGV4cGxhaW5lZCBpbiB0aGUgZnVuY3Rpb24gaGVhZGVyIGNv bW1lbnRzLCB3ZSBuZWVkIGEgc25hcHNob3QgdGhhdAogCSAqIHdpbGwgc2VlIGFsbCBjb21t aXR0ZWQgdHJhbnNhY3Rpb25zIGFzIGNvbW1pdHRlZCwgYW5kIG91ciB0cmFuc2FjdGlvbgpA QCAtMjk5LDcgKzI5NSw3IEBAIFNjYW5Tb3VyY2VEYXRhYmFzZVBnQ2xhc3MoT2lkIHRiaWQs IE9pZCBkYmlkLCBjaGFyICpzcmNwYXRoKQogCQlDSEVDS19GT1JfSU5URVJSVVBUUygpOwog CiAJCWJ1ZiA9IFJlYWRCdWZmZXJXaXRob3V0UmVsY2FjaGUocmxvY2F0b3IsIE1BSU5fRk9S S05VTSwgYmxrbm8sCi0JCQkJCQkJCQkJUkJNX05PUk1BTCwgYnN0cmF0ZWd5LCB0cnVlKTsK KwkJCQkJCQkJCQlSQk1fTk9STUFMLCB0cnVlKTsKIAogCQlMb2NrQnVmZmVyKGJ1ZiwgQlVG RkVSX0xPQ0tfU0hBUkUpOwogCQlwYWdlID0gQnVmZmVyR2V0UGFnZShidWYpOwpkaWZmIC0t Z2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvcmVwYWNrLmMgYi9zcmMvYmFja2VuZC9jb21t YW5kcy9yZXBhY2suYwppbmRleCAwMjg4M2ZlMzRhNC4uZDhjMTVhOGIxYmMgMTAwNjQ0Ci0t LSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3JlcGFjay5jCisrKyBiL3NyYy9iYWNrZW5kL2Nv bW1hbmRzL3JlcGFjay5jCkBAIC0yNDQ3LDcgKzI0NDcsNyBAQCBwcm9jZXNzX3NpbmdsZV9y ZWxhdGlvbihSZXBhY2tTdG10ICpzdG10LCBMT0NLTU9ERSBsb2NrbW9kZSwgYm9vbCBpc1Rv cExldmVsLAogCQkJaWYgKHBhcmFtcy0+b3B0aW9ucyAmIENMVU9QVF9WRVJCT1NFKQogCQkJ CXZhY19wYXJhbXMub3B0aW9ucyB8PSBWQUNPUFRfVkVSQk9TRTsKIAkJCWFuYWx5emVfcmVs KHRhYmxlT2lkLCBOVUxMLCAmdmFjX3BhcmFtcywKLQkJCQkJCXN0bXQtPnJlbGF0aW9uLT52 YV9jb2xzLCB0cnVlLCBOVUxMKTsKKwkJCQkJCXN0bXQtPnJlbGF0aW9uLT52YV9jb2xzLCB0 cnVlKTsKIAkJCVBvcEFjdGl2ZVNuYXBzaG90KCk7CiAJCQlDb21tYW5kQ291bnRlckluY3Jl bWVudCgpOwogCQl9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy9zZXF1ZW5j ZS5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvc2VxdWVuY2UuYwppbmRleCA1NTE2Njc2NTBi YS4uYWMxYWI5NDgyMTEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3NlcXVl bmNlLmMKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvc2VxdWVuY2UuYwpAQCAtMzU4LDcg KzM1OCw3IEBAIGZpbGxfc2VxX2Zvcmtfd2l0aF9kYXRhKFJlbGF0aW9uIHJlbCwgSGVhcFR1 cGxlIHR1cGxlLCBGb3JrTnVtYmVyIGZvcmtOdW0pCiAKIAkvKiBJbml0aWFsaXplIGZpcnN0 IHBhZ2Ugb2YgcmVsYXRpb24gd2l0aCBzcGVjaWFsIG1hZ2ljIG51bWJlciAqLwogCi0JYnVm ID0gRXh0ZW5kQnVmZmVyZWRSZWwoQk1SX1JFTChyZWwpLCBmb3JrTnVtLCBOVUxMLAorCWJ1 ZiA9IEV4dGVuZEJ1ZmZlcmVkUmVsKEJNUl9SRUwocmVsKSwgZm9ya051bSwKIAkJCQkJCQlF Ql9MT0NLX0ZJUlNUIHwgRUJfU0tJUF9FWFRFTlNJT05fTE9DSyk7CiAJQXNzZXJ0KEJ1ZmZl ckdldEJsb2NrTnVtYmVyKGJ1ZikgPT0gMCk7CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5k L2NvbW1hbmRzL3ZhY3V1bS5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvdmFjdXVtLmMKaW5k ZXggMzg1MzlhNmZkM2QuLjY2YWNkMjdiZDQ4IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9j b21tYW5kcy92YWN1dW0uYworKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy92YWN1dW0uYwpA QCAtMTI3LDMyICsxMjcsMTEgQEAgc3RhdGljIHZvaWQgdmFjX3RydW5jYXRlX2Nsb2coVHJh bnNhY3Rpb25JZCBmcm96ZW5YSUQsCiAJCQkJCQkJICBUcmFuc2FjdGlvbklkIGxhc3RTYW5l RnJvemVuWGlkLAogCQkJCQkJCSAgTXVsdGlYYWN0SWQgbGFzdFNhbmVNaW5NdWx0aSk7CiBz dGF0aWMgYm9vbCB2YWN1dW1fcmVsKE9pZCByZWxpZCwgUmFuZ2VWYXIgKnJlbGF0aW9uLCBW YWN1dW1QYXJhbXMgcGFyYW1zLAotCQkJCQkgICBCdWZmZXJBY2Nlc3NTdHJhdGVneSBic3Ry YXRlZ3ksIGJvb2wgaXNUb3BMZXZlbCk7CisJCQkJCSAgIGJvb2wgaXNUb3BMZXZlbCk7CiBz dGF0aWMgZG91YmxlIGNvbXB1dGVfcGFyYWxsZWxfZGVsYXkodm9pZCk7CiBzdGF0aWMgVmFj T3B0VmFsdWUgZ2V0X3ZhY29wdHZhbF9mcm9tX2Jvb2xlYW4oRGVmRWxlbSAqZGVmKTsKIHN0 YXRpYyBib29sIHZhY190aWRfcmVhcGVkKEl0ZW1Qb2ludGVyIGl0ZW1wdHIsIHZvaWQgKnN0 YXRlKTsKIAotLyoKLSAqIEdVQyBjaGVjayBmdW5jdGlvbiB0byBlbnN1cmUgR1VDIHZhbHVl IHNwZWNpZmllZCBpcyB3aXRoaW4gdGhlIGFsbG93YWJsZQotICogcmFuZ2UuCi0gKi8KLWJv b2wKLWNoZWNrX3ZhY3V1bV9idWZmZXJfdXNhZ2VfbGltaXQoaW50ICpuZXd2YWwsIHZvaWQg KipleHRyYSwKLQkJCQkJCQkJR3VjU291cmNlIHNvdXJjZSkKLXsKLQkvKiBWYWx1ZSB1cHBl ciBhbmQgbG93ZXIgaGFyZCBsaW1pdHMgYXJlIGluY2x1c2l2ZSAqLwotCWlmICgqbmV3dmFs ID09IDAgfHwgKCpuZXd2YWwgPj0gTUlOX0JBU19WQUNfUklOR19TSVpFX0tCICYmCi0JCQkJ CQkgKm5ld3ZhbCA8PSBNQVhfQkFTX1ZBQ19SSU5HX1NJWkVfS0IpKQotCQlyZXR1cm4gdHJ1 ZTsKLQotCS8qIFZhbHVlIGRvZXMgbm90IGZhbGwgd2l0aGluIGFueSBhbGxvd2FibGUgcmFu Z2UgKi8KLQlHVUNfY2hlY2tfZXJyZGV0YWlsKCJcIiVzXCIgbXVzdCBiZSAwIG9yIGJldHdl ZW4gJWQga0IgYW5kICVkIGtCLiIsCi0JCQkJCQkidmFjdXVtX2J1ZmZlcl91c2FnZV9saW1p dCIsCi0JCQkJCQlNSU5fQkFTX1ZBQ19SSU5HX1NJWkVfS0IsIE1BWF9CQVNfVkFDX1JJTkdf U0laRV9LQik7Ci0KLQlyZXR1cm4gZmFsc2U7Ci19Ci0KIC8qCiAgKiBQcmltYXJ5IGVudHJ5 IHBvaW50IGZvciBtYW51YWwgVkFDVVVNIGFuZCBBTkFMWVpFIGNvbW1hbmRzCiAgKgpAQCAt MTYzLDcgKzE0Miw2IEBAIHZvaWQKIEV4ZWNWYWN1dW0oUGFyc2VTdGF0ZSAqcHN0YXRlLCBW YWN1dW1TdG10ICp2YWNzdG10LCBib29sIGlzVG9wTGV2ZWwpCiB7CiAJVmFjdXVtUGFyYW1z IHBhcmFtczsKLQlCdWZmZXJBY2Nlc3NTdHJhdGVneSBic3RyYXRlZ3kgPSBOVUxMOwogCWJv b2wJCXZlcmJvc2UgPSBmYWxzZTsKIAlib29sCQlza2lwX2xvY2tlZCA9IGZhbHNlOwogCWJv b2wJCWFuYWx5emUgPSBmYWxzZTsKQEAgLTE3Miw3ICsxNTAsNiBAQCBFeGVjVmFjdXVtKFBh cnNlU3RhdGUgKnBzdGF0ZSwgVmFjdXVtU3RtdCAqdmFjc3RtdCwgYm9vbCBpc1RvcExldmVs KQogCWJvb2wJCWRpc2FibGVfcGFnZV9za2lwcGluZyA9IGZhbHNlOwogCWJvb2wJCXByb2Nl c3NfbWFpbiA9IHRydWU7CiAJYm9vbAkJcHJvY2Vzc190b2FzdCA9IHRydWU7Ci0JaW50CQkJ cmluZ19zaXplOwogCWJvb2wJCXNraXBfZGF0YWJhc2Vfc3RhdHMgPSBmYWxzZTsKIAlib29s CQlvbmx5X2RhdGFiYXNlX3N0YXRzID0gZmFsc2U7CiAJTWVtb3J5Q29udGV4dCB2YWNfY29u dGV4dDsKQEAgLTE4OCwxMiArMTY1LDYgQEAgRXhlY1ZhY3V1bShQYXJzZVN0YXRlICpwc3Rh dGUsIFZhY3V1bVN0bXQgKnZhY3N0bXQsIGJvb2wgaXNUb3BMZXZlbCkKIAkvKiBXaWxsIGJl IHNldCBsYXRlciBpZiB3ZSByZWN1cnNlIHRvIGEgVE9BU1QgdGFibGUuICovCiAJcGFyYW1z LnRvYXN0X3BhcmVudCA9IEludmFsaWRPaWQ7CiAKLQkvKgotCSAqIFNldCB0aGlzIHRvIGFu IGludmFsaWQgdmFsdWUgc28gaXQgaXMgY2xlYXIgd2hldGhlciBvciBub3QgYQotCSAqIEJV RkZFUl9VU0FHRV9MSU1JVCB3YXMgc3BlY2lmaWVkIHdoZW4gbWFraW5nIHRoZSBhY2Nlc3Mg c3RyYXRlZ3kuCi0JICovCi0JcmluZ19zaXplID0gLTE7Ci0KIAkvKiBQYXJzZSBvcHRpb25z IGxpc3QgKi8KIAlmb3JlYWNoKGxjLCB2YWNzdG10LT5vcHRpb25zKQogCXsKQEAgLTIwNCwz MiArMTc1LDYgQEAgRXhlY1ZhY3V1bShQYXJzZVN0YXRlICpwc3RhdGUsIFZhY3V1bVN0bXQg KnZhY3N0bXQsIGJvb2wgaXNUb3BMZXZlbCkKIAkJCXZlcmJvc2UgPSBkZWZHZXRCb29sZWFu KG9wdCk7CiAJCWVsc2UgaWYgKHN0cmNtcChvcHQtPmRlZm5hbWUsICJza2lwX2xvY2tlZCIp ID09IDApCiAJCQlza2lwX2xvY2tlZCA9IGRlZkdldEJvb2xlYW4ob3B0KTsKLQkJZWxzZSBp ZiAoc3RyY21wKG9wdC0+ZGVmbmFtZSwgImJ1ZmZlcl91c2FnZV9saW1pdCIpID09IDApCi0J CXsKLQkJCWNvbnN0IGNoYXIgKmhpbnRtc2c7Ci0JCQlpbnQJCQlyZXN1bHQ7Ci0JCQljaGFy CSAgICp2YWNfYnVmZmVyX3NpemU7Ci0KLQkJCXZhY19idWZmZXJfc2l6ZSA9IGRlZkdldFN0 cmluZyhvcHQpOwotCi0JCQkvKgotCQkJICogQ2hlY2sgdGhhdCB0aGUgc3BlY2lmaWVkIHZh bHVlIGlzIHZhbGlkIGFuZCB0aGUgc2l6ZSBmYWxscwotCQkJICogd2l0aGluIHRoZSBoYXJk IHVwcGVyIGFuZCBsb3dlciBsaW1pdHMgaWYgaXQgaXMgbm90IDAuCi0JCQkgKi8KLQkJCWlm ICghcGFyc2VfaW50KHZhY19idWZmZXJfc2l6ZSwgJnJlc3VsdCwgR1VDX1VOSVRfS0IsICZo aW50bXNnKSB8fAotCQkJCShyZXN1bHQgIT0gMCAmJgotCQkJCSAocmVzdWx0IDwgTUlOX0JB U19WQUNfUklOR19TSVpFX0tCIHx8IHJlc3VsdCA+IE1BWF9CQVNfVkFDX1JJTkdfU0laRV9L QikpKQotCQkJewotCQkJCWVyZXBvcnQoRVJST1IsCi0JCQkJCQkoZXJyY29kZShFUlJDT0RF X0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKLQkJCQkJCSBlcnJtc2coIiVzIG9wdGlvbiBt dXN0IGJlIDAgb3IgYmV0d2VlbiAlZCBrQiBhbmQgJWQga0IiLAotCQkJCQkJCQkiQlVGRkVS X1VTQUdFX0xJTUlUIiwKLQkJCQkJCQkJTUlOX0JBU19WQUNfUklOR19TSVpFX0tCLCBNQVhf QkFTX1ZBQ19SSU5HX1NJWkVfS0IpLAotCQkJCQkJIGhpbnRtc2cgPyBlcnJoaW50X2ludGVy bmFsKCIlcyIsIF8oaGludG1zZykpIDogMCkpOwotCQkJfQotCi0JCQlyaW5nX3NpemUgPSBy ZXN1bHQ7Ci0JCX0KIAkJZWxzZSBpZiAoIXZhY3N0bXQtPmlzX3ZhY3V1bWNtZCkKIAkJCWVy ZXBvcnQoRVJST1IsCiAJCQkJCShlcnJjb2RlKEVSUkNPREVfU1lOVEFYX0VSUk9SKSwKQEAg LTMyNSwxNyArMjcwLDYgQEAgRXhlY1ZhY3V1bShQYXJzZVN0YXRlICpwc3RhdGUsIFZhY3V1 bVN0bXQgKnZhY3N0bXQsIGJvb2wgaXNUb3BMZXZlbCkKIAkJCQkoZXJyY29kZShFUlJDT0RF X0ZFQVRVUkVfTk9UX1NVUFBPUlRFRCksCiAJCQkJIGVycm1zZygiVkFDVVVNIEZVTEwgY2Fu bm90IGJlIHBlcmZvcm1lZCBpbiBwYXJhbGxlbCIpKSk7CiAKLQkvKgotCSAqIEJVRkZFUl9V U0FHRV9MSU1JVCBkb2VzIG5vdGhpbmcgZm9yIFZBQ1VVTSAoRlVMTCkgc28ganVzdCByYWlz ZSBhbgotCSAqIEVSUk9SIGZvciB0aGF0IGNhc2UuICBWQUNVVU0gKEZVTEwsIEFOQUxZWkUp IGRvZXMgbWFrZSB1c2Ugb2YgaXQsIHNvCi0JICogd2UnbGwgcGVybWl0IHRoYXQuCi0JICov Ci0JaWYgKHJpbmdfc2l6ZSAhPSAtMSAmJiAocGFyYW1zLm9wdGlvbnMgJiBWQUNPUFRfRlVM TCkgJiYKLQkJIShwYXJhbXMub3B0aW9ucyAmIFZBQ09QVF9BTkFMWVpFKSkKLQkJZXJlcG9y dChFUlJPUiwKLQkJCQkoZXJyY29kZShFUlJDT0RFX0ZFQVRVUkVfTk9UX1NVUFBPUlRFRCks Ci0JCQkJIGVycm1zZygiQlVGRkVSX1VTQUdFX0xJTUlUIGNhbm5vdCBiZSBzcGVjaWZpZWQg Zm9yIFZBQ1VVTSBGVUxMIikpKTsKLQogCS8qCiAJICogTWFrZSBzdXJlIFZBQ09QVF9BTkFM WVpFIGlzIHNwZWNpZmllZCBpZiBhbnkgY29sdW1uIGxpc3RzIGFyZSBwcmVzZW50LgogCSAq LwpAQCAtNDMxLDM4ICszNjUsOCBAQCBFeGVjVmFjdXVtKFBhcnNlU3RhdGUgKnBzdGF0ZSwg VmFjdXVtU3RtdCAqdmFjc3RtdCwgYm9vbCBpc1RvcExldmVsKQogCQkJCQkJCQkJCSJWYWN1 dW0iLAogCQkJCQkJCQkJCUFMTE9DU0VUX0RFRkFVTFRfU0laRVMpOwogCi0JLyoKLQkgKiBN YWtlIGEgYnVmZmVyIHN0cmF0ZWd5IG9iamVjdCBpbiB0aGUgY3Jvc3MtdHJhbnNhY3Rpb24g bWVtb3J5IGNvbnRleHQuCi0JICogV2UgbmVlZG4ndCBib3RoZXIgbWFraW5nIHRoaXMgZm9y IFZBQ1VVTSAoRlVMTCkgb3IgVkFDVVVNCi0JICogKE9OTFlfREFUQUJBU0VfU1RBVFMpIGFz IHRoZXknbGwgbm90IG1ha2UgdXNlIG9mIGl0LiAgVkFDVVVNIChGVUxMLAotCSAqIEFOQUxZ WkUpIGlzIHBvc3NpYmxlLCBzbyB3ZSdkIGJldHRlciBlbnN1cmUgdGhhdCB3ZSBtYWtlIGEg c3RyYXRlZ3kKLQkgKiB3aGVuIHdlIHNlZSBBTkFMWVpFLgotCSAqLwotCWlmICgocGFyYW1z Lm9wdGlvbnMgJiAoVkFDT1BUX09OTFlfREFUQUJBU0VfU1RBVFMgfAotCQkJCQkJICAgVkFD T1BUX0ZVTEwpKSA9PSAwIHx8Ci0JCShwYXJhbXMub3B0aW9ucyAmIFZBQ09QVF9BTkFMWVpF KSAhPSAwKQotCXsKLQotCQlNZW1vcnlDb250ZXh0IG9sZF9jb250ZXh0ID0gTWVtb3J5Q29u dGV4dFN3aXRjaFRvKHZhY19jb250ZXh0KTsKLQotCQlBc3NlcnQocmluZ19zaXplID49IC0x KTsKLQotCQkvKgotCQkgKiBJZiBCVUZGRVJfVVNBR0VfTElNSVQgd2FzIHNwZWNpZmllZCBi eSB0aGUgVkFDVVVNIG9yIEFOQUxZWkUKLQkJICogY29tbWFuZCwgaXQgb3ZlcnJpZGVzIHRo ZSB2YWx1ZSBvZiBWYWN1dW1CdWZmZXJVc2FnZUxpbWl0LiAgRWl0aGVyCi0JCSAqIHZhbHVl IG1heSBiZSAwLCBpbiB3aGljaCBjYXNlIEdldEFjY2Vzc1N0cmF0ZWd5V2l0aFNpemUoKSB3 aWxsCi0JCSAqIHJldHVybiBOVUxMLCBlZmZlY3RpdmVseSBhbGxvd2luZyBmdWxsIHVzZSBv ZiBzaGFyZWQgYnVmZmVycy4KLQkJICovCi0JCWlmIChyaW5nX3NpemUgPT0gLTEpCi0JCQly aW5nX3NpemUgPSBWYWN1dW1CdWZmZXJVc2FnZUxpbWl0OwotCi0JCWJzdHJhdGVneSA9IEdl dEFjY2Vzc1N0cmF0ZWd5V2l0aFNpemUoQkFTX1ZBQ1VVTSwgcmluZ19zaXplKTsKLQotCQlN ZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xkX2NvbnRleHQpOwotCX0KLQogCS8qIE5vdyBnbyB0 aHJvdWdoIHRoZSBjb21tb24gcm91dGluZSAqLwotCXZhY3V1bSh2YWNzdG10LT5yZWxzLCAm cGFyYW1zLCBic3RyYXRlZ3ksIHZhY19jb250ZXh0LCBpc1RvcExldmVsKTsKKwl2YWN1dW0o dmFjc3RtdC0+cmVscywgJnBhcmFtcywgdmFjX2NvbnRleHQsIGlzVG9wTGV2ZWwpOwogCiAJ LyogRmluYWxseSwgY2xlYW4gdXAgdGhlIHZhY3V1bSBtZW1vcnkgY29udGV4dCAqLwogCU1l bW9yeUNvbnRleHREZWxldGUodmFjX2NvbnRleHQpOwpAQCAtNDc5LDE5ICszODMsMTMgQEAg RXhlY1ZhY3V1bShQYXJzZVN0YXRlICpwc3RhdGUsIFZhY3V1bVN0bXQgKnZhY3N0bXQsIGJv b2wgaXNUb3BMZXZlbCkKICAqIHBhcmFtcyBjb250YWlucyBhIHNldCBvZiBwYXJhbWV0ZXJz IHRoYXQgY2FuIGJlIHVzZWQgdG8gY3VzdG9taXplIHRoZQogICogYmVoYXZpb3IuCiAgKgot ICogYnN0cmF0ZWd5IG1heSBiZSBwYXNzZWQgaW4gYXMgTlVMTCB3aGVuIHRoZSBjYWxsZXIg ZG9lcyBub3Qgd2FudCB0bwotICogcmVzdHJpY3QgdGhlIG51bWJlciBvZiBzaGFyZWRfYnVm ZmVycyB0aGF0IFZBQ1VVTSAvIEFOQUxZWkUgY2FuIHVzZSwKLSAqIG90aGVyd2lzZSwgdGhl IGNhbGxlciBtdXN0IGJ1aWxkIGEgQnVmZmVyQWNjZXNzU3RyYXRlZ3kgd2l0aCB0aGUgbnVt YmVyIG9mCi0gKiBzaGFyZWRfYnVmZmVycyB0aGF0IFZBQ1VVTSAvIEFOQUxZWkUgc2hvdWxk IHRyeSB0byBsaW1pdCB0aGVtc2VsdmVzIHRvCi0gKiB1c2luZy4KLSAqCiAgKiBpc1RvcExl dmVsIHNob3VsZCBiZSBwYXNzZWQgZG93biBmcm9tIFByb2Nlc3NVdGlsaXR5LgogICoKICAq IEl0IGlzIHRoZSBjYWxsZXIncyByZXNwb25zaWJpbGl0eSB0aGF0IGFsbCBwYXJhbWV0ZXJz IGFyZSBhbGxvY2F0ZWQgaW4gYQogICogbWVtb3J5IGNvbnRleHQgdGhhdCB3aWxsIG5vdCBk aXNhcHBlYXIgYXQgdHJhbnNhY3Rpb24gY29tbWl0LgogICovCiB2b2lkCi12YWN1dW0oTGlz dCAqcmVsYXRpb25zLCBjb25zdCBWYWN1dW1QYXJhbXMgKnBhcmFtcywgQnVmZmVyQWNjZXNz U3RyYXRlZ3kgYnN0cmF0ZWd5LAordmFjdXVtKExpc3QgKnJlbGF0aW9ucywgY29uc3QgVmFj dXVtUGFyYW1zICpwYXJhbXMsCiAJICAgTWVtb3J5Q29udGV4dCB2YWNfY29udGV4dCwgYm9v bCBpc1RvcExldmVsKQogewogCXN0YXRpYyBib29sIGluX3ZhY3V1bSA9IGZhbHNlOwpAQCAt NjMwLDcgKzUyOCw3IEBAIHZhY3V1bShMaXN0ICpyZWxhdGlvbnMsIGNvbnN0IFZhY3V1bVBh cmFtcyAqcGFyYW1zLCBCdWZmZXJBY2Nlc3NTdHJhdGVneSBic3RyYXRlCiAKIAkJCWlmIChw YXJhbXMtPm9wdGlvbnMgJiBWQUNPUFRfVkFDVVVNKQogCQkJewotCQkJCWlmICghdmFjdXVt X3JlbCh2cmVsLT5vaWQsIHZyZWwtPnJlbGF0aW9uLCAqcGFyYW1zLCBic3RyYXRlZ3ksCisJ CQkJaWYgKCF2YWN1dW1fcmVsKHZyZWwtPm9pZCwgdnJlbC0+cmVsYXRpb24sICpwYXJhbXMs CiAJCQkJCQkJCWlzVG9wTGV2ZWwpKQogCQkJCQljb250aW51ZTsKIAkJCX0KQEAgLTY0OSw3 ICs1NDcsNyBAQCB2YWN1dW0oTGlzdCAqcmVsYXRpb25zLCBjb25zdCBWYWN1dW1QYXJhbXMg KnBhcmFtcywgQnVmZmVyQWNjZXNzU3RyYXRlZ3kgYnN0cmF0ZQogCQkJCX0KIAogCQkJCWFu YWx5emVfcmVsKHZyZWwtPm9pZCwgdnJlbC0+cmVsYXRpb24sIHBhcmFtcywKLQkJCQkJCQl2 cmVsLT52YV9jb2xzLCBpbl9vdXRlcl94YWN0LCBic3RyYXRlZ3kpOworCQkJCQkJCXZyZWwt PnZhX2NvbHMsIGluX291dGVyX3hhY3QpOwogCiAJCQkJaWYgKHVzZV9vd25feGFjdHMpCiAJ CQkJewpAQCAtMjAxMCw3ICsxOTA4LDcgQEAgdmFjX3RydW5jYXRlX2Nsb2coVHJhbnNhY3Rp b25JZCBmcm96ZW5YSUQsCiAgKi8KIHN0YXRpYyBib29sCiB2YWN1dW1fcmVsKE9pZCByZWxp ZCwgUmFuZ2VWYXIgKnJlbGF0aW9uLCBWYWN1dW1QYXJhbXMgcGFyYW1zLAotCQkgICBCdWZm ZXJBY2Nlc3NTdHJhdGVneSBic3RyYXRlZ3ksIGJvb2wgaXNUb3BMZXZlbCkKKwkJICAgYm9v bCBpc1RvcExldmVsKQogewogCUxPQ0tNT0RFCWxtb2RlOwogCVJlbGF0aW9uCXJlbDsKQEAg LTIzMDcsNyArMjIwNSw3IEBAIHZhY3V1bV9yZWwoT2lkIHJlbGlkLCBSYW5nZVZhciAqcmVs YXRpb24sIFZhY3V1bVBhcmFtcyBwYXJhbXMsCiAJCQlyZWwgPSBOVUxMOwogCQl9CiAJCWVs c2UKLQkJCXRhYmxlX3JlbGF0aW9uX3ZhY3V1bShyZWwsICZwYXJhbXMsIGJzdHJhdGVneSk7 CisJCQl0YWJsZV9yZWxhdGlvbl92YWN1dW0ocmVsLCAmcGFyYW1zKTsKIAl9CiAKIAkvKiBS b2xsIGJhY2sgYW55IEdVQyBjaGFuZ2VzIGV4ZWN1dGVkIGJ5IGluZGV4IGZ1bmN0aW9ucyAq LwpAQCAtMjM0NCw3ICsyMjQyLDcgQEAgdmFjdXVtX3JlbChPaWQgcmVsaWQsIFJhbmdlVmFy ICpyZWxhdGlvbiwgVmFjdXVtUGFyYW1zIHBhcmFtcywKIAkJdG9hc3RfdmFjdXVtX3BhcmFt cy5vcHRpb25zIHw9IFZBQ09QVF9QUk9DRVNTX01BSU47CiAJCXRvYXN0X3ZhY3V1bV9wYXJh bXMudG9hc3RfcGFyZW50ID0gcmVsaWQ7CiAKLQkJdmFjdXVtX3JlbCh0b2FzdF9yZWxpZCwg TlVMTCwgdG9hc3RfdmFjdXVtX3BhcmFtcywgYnN0cmF0ZWd5LAorCQl2YWN1dW1fcmVsKHRv YXN0X3JlbGlkLCBOVUxMLCB0b2FzdF92YWN1dW1fcGFyYW1zLAogCQkJCSAgIGlzVG9wTGV2 ZWwpOwogCX0KIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvdmFjdXVtcGFy YWxsZWwuYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3ZhY3V1bXBhcmFsbGVsLmMKaW5kZXgg NDFjZWZjZmRlNTQuLjhiNGI4MzVkYjliIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21t YW5kcy92YWN1dW1wYXJhbGxlbC5jCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3ZhY3V1 bXBhcmFsbGVsLmMKQEAgLTEyNSwxMiArMTI1LDYgQEAgdHlwZWRlZiBzdHJ1Y3QgUFZTaGFy ZWQKIAkgKi8KIAlpbnQJCQltYWludGVuYW5jZV93b3JrX21lbV93b3JrZXI7CiAKLQkvKgot CSAqIFRoZSBudW1iZXIgb2YgYnVmZmVycyBlYWNoIHdvcmtlcidzIEJ1ZmZlciBBY2Nlc3Mg U3RyYXRlZ3kgcmluZyBzaG91bGQKLQkgKiBjb250YWluLgotCSAqLwotCWludAkJCXJpbmdf bmJ1ZmZlcnM7Ci0KIAkvKgogCSAqIFNoYXJlZCB2YWN1dW0gY29zdCBiYWxhbmNlLiAgRHVy aW5nIHBhcmFsbGVsIHZhY3V1bSwKIAkgKiBWYWN1dW1TaGFyZWRDb3N0QmFsYW5jZSBwb2lu dHMgdG8gdGhpcyB2YWx1ZSBhbmQgaXQgYWNjdW11bGF0ZXMgdGhlCkBAIC0yNTcsOSArMjUx LDYgQEAgc3RydWN0IFBhcmFsbGVsVmFjdXVtU3RhdGUKIAlpbnQJCQluaW5kZXhlc19wYXJh bGxlbF9jbGVhbnVwOwogCWludAkJCW5pbmRleGVzX3BhcmFsbGVsX2NvbmRjbGVhbnVwOwog Ci0JLyogQnVmZmVyIGFjY2VzcyBzdHJhdGVneSB1c2VkIGJ5IGxlYWRlciBwcm9jZXNzICov Ci0JQnVmZmVyQWNjZXNzU3RyYXRlZ3kgYnN0cmF0ZWd5OwotCiAJLyoKIAkgKiBFcnJvciBy ZXBvcnRpbmcgc3RhdGUuICBUaGUgZXJyb3IgY2FsbGJhY2sgaXMgc2V0IG9ubHkgZm9yIHdv cmtlcnMKIAkgKiBwcm9jZXNzZXMgZHVyaW5nIHBhcmFsbGVsIGluZGV4IHZhY3V1bS4KQEAg LTMwNCw3ICsyOTUsNyBAQCBzdGF0aWMgdm9pZCBwYXJhbGxlbF92YWN1dW1fZHNtX2RldGFj aChkc21fc2VnbWVudCAqc2VnLCBEYXR1bSBhcmcpOwogUGFyYWxsZWxWYWN1dW1TdGF0ZSAq CiBwYXJhbGxlbF92YWN1dW1faW5pdChSZWxhdGlvbiByZWwsIFJlbGF0aW9uICppbmRyZWxz LCBpbnQgbmluZGV4ZXMsCiAJCQkJCSBpbnQgbnJlcXVlc3RlZF93b3JrZXJzLCBpbnQgdmFj X3dvcmtfbWVtLAotCQkJCQkgaW50IGVsZXZlbCwgQnVmZmVyQWNjZXNzU3RyYXRlZ3kgYnN0 cmF0ZWd5KQorCQkJCQkgaW50IGVsZXZlbCkKIHsKIAlQYXJhbGxlbFZhY3V1bVN0YXRlICpw dnM7CiAJUGFyYWxsZWxDb250ZXh0ICpwY3h0OwpAQCAtMzQ1LDcgKzMzNiw2IEBAIHBhcmFs bGVsX3ZhY3V1bV9pbml0KFJlbGF0aW9uIHJlbCwgUmVsYXRpb24gKmluZHJlbHMsIGludCBu aW5kZXhlcywKIAlwdnMtPmluZHJlbHMgPSBpbmRyZWxzOwogCXB2cy0+bmluZGV4ZXMgPSBu aW5kZXhlczsKIAlwdnMtPndpbGxfcGFyYWxsZWxfdmFjdXVtID0gd2lsbF9wYXJhbGxlbF92 YWN1dW07Ci0JcHZzLT5ic3RyYXRlZ3kgPSBic3RyYXRlZ3k7CiAJcHZzLT5oZWFwcmVsID0g cmVsOwogCiAJRW50ZXJQYXJhbGxlbE1vZGUoKTsKQEAgLTQ0Nyw5ICs0MzcsNiBAQCBwYXJh bGxlbF92YWN1dW1faW5pdChSZWxhdGlvbiByZWwsIFJlbGF0aW9uICppbmRyZWxzLCBpbnQg bmluZGV4ZXMsCiAJc2hhcmVkLT5kZWFkX2l0ZW1zX2hhbmRsZSA9IFRpZFN0b3JlR2V0SGFu ZGxlKGRlYWRfaXRlbXMpOwogCXNoYXJlZC0+ZGVhZF9pdGVtc19kc2FfaGFuZGxlID0gZHNh X2dldF9oYW5kbGUoVGlkU3RvcmVHZXREU0EoZGVhZF9pdGVtcykpOwogCi0JLyogVXNlIHRo ZSBzYW1lIGJ1ZmZlciBzaXplIGZvciBhbGwgd29ya2VycyAqLwotCXNoYXJlZC0+cmluZ19u YnVmZmVycyA9IEdldEFjY2Vzc1N0cmF0ZWd5QnVmZmVyQ291bnQoYnN0cmF0ZWd5KTsKLQog CXBnX2F0b21pY19pbml0X3UzMigmKHNoYXJlZC0+Y29zdF9iYWxhbmNlKSwgMCk7CiAJcGdf YXRvbWljX2luaXRfdTMyKCYoc2hhcmVkLT5hY3RpdmVfbndvcmtlcnMpLCAwKTsKIAlwZ19h dG9taWNfaW5pdF91MzIoJihzaGFyZWQtPmlkeCksIDApOwpAQCAtMTA5MSw3ICsxMDc4LDYg QEAgcGFyYWxsZWxfdmFjdXVtX3Byb2Nlc3Nfb25lX2luZGV4KFBhcmFsbGVsVmFjdXVtU3Rh dGUgKnB2cywgUmVsYXRpb24gaW5kcmVsLAogCWl2aW5mby5tZXNzYWdlX2xldmVsID0gREVC VUcyOwogCWl2aW5mby5lc3RpbWF0ZWRfY291bnQgPSBwdnMtPnNoYXJlZC0+ZXN0aW1hdGVk X2NvdW50OwogCWl2aW5mby5udW1faGVhcF90dXBsZXMgPSBwdnMtPnNoYXJlZC0+cmVsdHVw bGVzOwotCWl2aW5mby5zdHJhdGVneSA9IHB2cy0+YnN0cmF0ZWd5OwogCiAJLyogVXBkYXRl IGVycm9yIHRyYWNlYmFjayBpbmZvcm1hdGlvbiAqLwogCXB2cy0+aW5kbmFtZSA9IHBzdHJk dXAoUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUoaW5kcmVsKSk7CkBAIC0xMjk0LDEwICsxMjgw LDYgQEAgcGFyYWxsZWxfdmFjdXVtX21haW4oZHNtX3NlZ21lbnQgKnNlZywgc2htX3RvYyAq dG9jKQogCXB2cy5pbmRuYW1lID0gTlVMTDsKIAlwdnMuc3RhdHVzID0gUEFSQUxMRUxfSU5E VkFDX1NUQVRVU19JTklUSUFMOwogCi0JLyogRWFjaCBwYXJhbGxlbCBWQUNVVU0gd29ya2Vy IGdldHMgaXRzIG93biBhY2Nlc3Mgc3RyYXRlZ3kuICovCi0JcHZzLmJzdHJhdGVneSA9IEdl dEFjY2Vzc1N0cmF0ZWd5V2l0aFNpemUoQkFTX1ZBQ1VVTSwKLQkJCQkJCQkJCQkJICBzaGFy ZWQtPnJpbmdfbmJ1ZmZlcnMgKiAoQkxDS1NaIC8gMTAyNCkpOwotCiAJLyogU2V0dXAgZXJy b3IgdHJhY2ViYWNrIHN1cHBvcnQgZm9yIGVyZXBvcnQoKSAqLwogCWVycmNhbGxiYWNrLmNh bGxiYWNrID0gcGFyYWxsZWxfdmFjdXVtX2Vycm9yX2NhbGxiYWNrOwogCWVycmNhbGxiYWNr LmFyZyA9ICZwdnM7CkBAIC0xMzI4LDcgKzEzMTAsNiBAQCBwYXJhbGxlbF92YWN1dW1fbWFp bihkc21fc2VnbWVudCAqc2VnLCBzaG1fdG9jICp0b2MpCiAKIAl2YWNfY2xvc2VfaW5kZXhl cyhuaW5kZXhlcywgaW5kcmVscywgUm93RXhjbHVzaXZlTG9jayk7CiAJdGFibGVfY2xvc2Uo cmVsLCBTaGFyZVVwZGF0ZUV4Y2x1c2l2ZUxvY2spOwotCUZyZWVBY2Nlc3NTdHJhdGVneShw dnMuYnN0cmF0ZWd5KTsKIAogCWlmIChzaGFyZWQtPmlzX2F1dG92YWN1dW0pCiAJCXB2X3No YXJlZF9jb3N0X3BhcmFtcyA9IE5VTEw7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9wb3N0 bWFzdGVyL2F1dG92YWN1dW0uYyBiL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvYXV0b3ZhY3V1 bS5jCmluZGV4IDQ1YWJmNDg3NjhhLi5lMDIxZTc5ODgwNSAxMDA2NDQKLS0tIGEvc3JjL2Jh Y2tlbmQvcG9zdG1hc3Rlci9hdXRvdmFjdXVtLmMKKysrIGIvc3JjL2JhY2tlbmQvcG9zdG1h c3Rlci9hdXRvdmFjdXVtLmMKQEAgLTM4Niw4ICszODYsNyBAQCBzdGF0aWMgdm9pZCByZWxh dGlvbl9uZWVkc192YWNhbmFseXplKE9pZCByZWxpZCwgQXV0b1ZhY09wdHMgKnJlbG9wdHMs CiAJCQkJCQkJCQkgIGJvb2wgKmRvdmFjdXVtLCBib29sICpkb2FuYWx5emUsIGJvb2wgKndy YXBhcm91bmQsCiAJCQkJCQkJCQkgIEF1dG9WYWN1dW1TY29yZXMgKnNjb3Jlcyk7CiAKLXN0 YXRpYyB2b2lkIGF1dG92YWN1dW1fZG9fdmFjX2FuYWx5emUoYXV0b3ZhY190YWJsZSAqdGFi LAotCQkJCQkJCQkJICBCdWZmZXJBY2Nlc3NTdHJhdGVneSBic3RyYXRlZ3kpOworc3RhdGlj IHZvaWQgYXV0b3ZhY3V1bV9kb192YWNfYW5hbHl6ZShhdXRvdmFjX3RhYmxlICp0YWIpOwog c3RhdGljIEF1dG9WYWNPcHRzICpleHRyYWN0X2F1dG92YWNfb3B0cyhIZWFwVHVwbGUgdHVw LAogCQkJCQkJCQkJCSBUdXBsZURlc2MgcGdfY2xhc3NfZGVzYyk7CiBzdGF0aWMgdm9pZCBw ZXJmb3JtX3dvcmtfaXRlbShBdXRvVmFjdXVtV29ya0l0ZW0gKndvcmtpdGVtKTsKQEAgLTE5 MzYsNyArMTkzNSw2IEBAIGRvX2F1dG92YWN1dW0odm9pZCkKIAlIQVNIQ1RMCQljdGw7CiAJ SFRBQgkgICAqdGFibGVfdG9hc3RfbWFwOwogCUxpc3RDZWxsICAgKnZvbGF0aWxlIGNlbGw7 Ci0JQnVmZmVyQWNjZXNzU3RyYXRlZ3kgYnN0cmF0ZWd5OwogCVNjYW5LZXlEYXRhIGtleTsK IAlUdXBsZURlc2MJcGdfY2xhc3NfZGVzYzsKIAlpbnQJCQllZmZlY3RpdmVfbXVsdGl4YWN0 X2ZyZWV6ZV9tYXhfYWdlOwpAQCAtMjMyMiwyMyArMjMyMCw2IEBAIGRvX2F1dG92YWN1dW0o dm9pZCkKIAkJYXV0b3ZhY3V1bV9hbmFseXplX3Njb3JlX3dlaWdodCAhPSAwLjApCiAJCWxp c3Rfc29ydCh0YWJsZXNfdG9fcHJvY2VzcywgVGFibGVUb1Byb2Nlc3NDb21wYXJhdG9yKTsK IAotCS8qCi0JICogT3B0aW9uYWxseSwgY3JlYXRlIGEgYnVmZmVyIGFjY2VzcyBzdHJhdGVn eSBvYmplY3QgZm9yIFZBQ1VVTSB0byB1c2UuCi0JICogV2UgdXNlIHRoZSBzYW1lIEJ1ZmZl ckFjY2Vzc1N0cmF0ZWd5IG9iamVjdCBmb3IgYWxsIHRhYmxlcyBWQUNVVU1lZCBieQotCSAq IHRoaXMgd29ya2VyIHRvIHByZXZlbnQgYXV0b3ZhY3V1bSBmcm9tIGJsb3dpbmcgb3V0IHNo YXJlZCBidWZmZXJzLgotCSAqCi0JICogVmFjdXVtQnVmZmVyVXNhZ2VMaW1pdCBiZWluZyBz ZXQgdG8gMCByZXN1bHRzIGluCi0JICogR2V0QWNjZXNzU3RyYXRlZ3lXaXRoU2l6ZSByZXR1 cm5pbmcgTlVMTCwgZWZmZWN0aXZlbHkgbWVhbmluZyB3ZSBjYW4KLQkgKiB1c2UgdXAgdG8g YWxsIG9mIHNoYXJlZCBidWZmZXJzLgotCSAqCi0JICogSWYgd2UgbGF0ZXIgZW50ZXIgZmFp bHNhZmUgbW9kZSBvbiBhbnkgb2YgdGhlIHRhYmxlcyBiZWluZyB2YWN1dW1lZCwgd2UKLQkg KiB3aWxsIGNlYXNlIHVzZSBvZiB0aGUgQnVmZmVyQWNjZXNzU3RyYXRlZ3kgb25seSBmb3Ig dGhhdCB0YWJsZS4KLQkgKgotCSAqIFhYWCBzaG91bGQgd2UgY29uc2lkZXIgYWRkaW5nIGNv ZGUgdG8gYWRqdXN0IHRoZSBzaXplIG9mIHRoaXMgaWYKLQkgKiBWYWN1dW1CdWZmZXJVc2Fn ZUxpbWl0IGNoYW5nZXM/Ci0JICovCi0JYnN0cmF0ZWd5ID0gR2V0QWNjZXNzU3RyYXRlZ3lX aXRoU2l6ZShCQVNfVkFDVVVNLCBWYWN1dW1CdWZmZXJVc2FnZUxpbWl0KTsKLQogCS8qCiAJ ICogY3JlYXRlIGEgbWVtb3J5IGNvbnRleHQgdG8gYWN0IGFzIGZha2UgUG9ydGFsQ29udGV4 dCwgc28gdGhhdCB0aGUKIAkgKiBjb250ZXh0cyBjcmVhdGVkIGluIHRoZSB2YWN1dW0gY29k ZSBhcmUgY2xlYW5lZCB1cCBmb3IgZWFjaCB0YWJsZS4KQEAgLTI1MTYsNyArMjQ5Nyw3IEBA IGRvX2F1dG92YWN1dW0odm9pZCkKIAkJCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhQb3J0YWxD b250ZXh0KTsKIAogCQkJLyogaGF2ZSBhdCBpdCAqLwotCQkJYXV0b3ZhY3V1bV9kb192YWNf YW5hbHl6ZSh0YWIsIGJzdHJhdGVneSk7CisJCQlhdXRvdmFjdXVtX2RvX3ZhY19hbmFseXpl KHRhYik7CiAKIAkJCS8qCiAJCQkgKiBDbGVhciBhIHBvc3NpYmxlIHF1ZXJ5LWNhbmNlbCBz aWduYWwsIHRvIGF2b2lkIGEgbGF0ZSByZWFjdGlvbgpAQCAtMjYzNiw4ICsyNjE3LDYgQEAg ZGVsZXRlZDoKICNpZmRlZiBVU0VfVkFMR1JJTkQKIAloYXNoX2Rlc3Ryb3kodGFibGVfdG9h c3RfbWFwKTsKIAlGcmVlVHVwbGVEZXNjKHBnX2NsYXNzX2Rlc2MpOwotCWlmIChic3RyYXRl Z3kpCi0JCXBmcmVlKGJzdHJhdGVneSk7CiAjZW5kaWYKIAogCS8qIFJ1biB0aGUgcmVzdCBp biB4YWN0IGNvbnRleHQsIG1haW5seSB0byBhdm9pZCBWYWxncmluZCBsZWFrIHdhcm5pbmdz ICovCkBAIC0zMzQ4LDcgKzMzMjcsNyBAQCByZWxhdGlvbl9uZWVkc192YWNhbmFseXplKE9p ZCByZWxpZCwKICAqIGRpc2FwcGVhciBhdCB0cmFuc2FjdGlvbiBjb21taXQuCiAgKi8KIHN0 YXRpYyB2b2lkCi1hdXRvdmFjdXVtX2RvX3ZhY19hbmFseXplKGF1dG92YWNfdGFibGUgKnRh YiwgQnVmZmVyQWNjZXNzU3RyYXRlZ3kgYnN0cmF0ZWd5KQorYXV0b3ZhY3V1bV9kb192YWNf YW5hbHl6ZShhdXRvdmFjX3RhYmxlICp0YWIpCiB7CiAJUmFuZ2VWYXIgICAqcmFuZ2V2YXI7 CiAJVmFjdXVtUmVsYXRpb24gKnJlbDsKQEAgLTMzNzEsNyArMzM1MCw3IEBAIGF1dG92YWN1 dW1fZG9fdmFjX2FuYWx5emUoYXV0b3ZhY190YWJsZSAqdGFiLCBCdWZmZXJBY2Nlc3NTdHJh dGVneSBic3RyYXRlZ3kpCiAJcmVsX2xpc3QgPSBsaXN0X21ha2UxKHJlbCk7CiAJTWVtb3J5 Q29udGV4dFN3aXRjaFRvKG9sZF9jb250ZXh0KTsKIAotCXZhY3V1bShyZWxfbGlzdCwgJnRh Yi0+YXRfcGFyYW1zLCBic3RyYXRlZ3ksIHZhY19jb250ZXh0LCB0cnVlKTsKKwl2YWN1dW0o cmVsX2xpc3QsICZ0YWItPmF0X3BhcmFtcywgdmFjX2NvbnRleHQsIHRydWUpOwogCiAJTWVt b3J5Q29udGV4dERlbGV0ZSh2YWNfY29udGV4dCk7CiB9CmRpZmYgLS1naXQgYS9zcmMvYmFj a2VuZC9wb3N0bWFzdGVyL2RhdGFjaGVja3N1bV9zdGF0ZS5jIGIvc3JjL2JhY2tlbmQvcG9z dG1hc3Rlci9kYXRhY2hlY2tzdW1fc3RhdGUuYwppbmRleCA3M2RjNTM5ODM2Yi4uYjY2MTJm MWU1MTcgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvZGF0YWNoZWNrc3Vt X3N0YXRlLmMKKysrIGIvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9kYXRhY2hlY2tzdW1fc3Rh dGUuYwpAQCAtMzkwLDcgKzM5MCw3IEBAIHN0YXRpYyBMaXN0ICpCdWlsZFJlbGF0aW9uTGlz dChib29sIHRlbXBfcmVsYXRpb25zLCBib29sIGluY2x1ZGVfc2hhcmVkKTsKIHN0YXRpYyB2 b2lkIEZyZWVEYXRhYmFzZUxpc3QoTGlzdCAqZGJsaXN0KTsKIHN0YXRpYyBEYXRhQ2hlY2tz dW1zV29ya2VyUmVzdWx0IFByb2Nlc3NEYXRhYmFzZShEYXRhQ2hlY2tzdW1zV29ya2VyRGF0 YWJhc2UgKmRiKTsKIHN0YXRpYyBib29sIFByb2Nlc3NBbGxEYXRhYmFzZXModm9pZCk7Ci1z dGF0aWMgYm9vbCBQcm9jZXNzU2luZ2xlUmVsYXRpb25Gb3JrKFJlbGF0aW9uIHJlbG4sIEZv cmtOdW1iZXIgZm9ya051bSwgQnVmZmVyQWNjZXNzU3RyYXRlZ3kgc3RyYXRlZ3kpOworc3Rh dGljIGJvb2wgUHJvY2Vzc1NpbmdsZVJlbGF0aW9uRm9yayhSZWxhdGlvbiByZWxuLCBGb3Jr TnVtYmVyIGZvcmtOdW0pOwogc3RhdGljIHZvaWQgUmVzZXREYXRhQ2hlY2tzdW1zUHJvZ3Jl c3NDb3VudGVycyh2b2lkKTsKIHN0YXRpYyB2b2lkIGxhdW5jaGVyX2NhbmNlbF9oYW5kbGVy KFNJR05BTF9BUkdTKTsKIHN0YXRpYyB2b2lkIFdhaXRGb3JBbGxUcmFuc2FjdGlvbnNUb0Zp bmlzaCh2b2lkKTsKQEAgLTY4Nyw3ICs2ODcsNyBAQCBTdGFydERhdGFDaGVja3N1bXNXb3Jr ZXJMYXVuY2hlcihEYXRhQ2hlY2tzdW1zV29ya2VyT3BlcmF0aW9uIG9wLAogICogZXJyb3Ig aXMgcmFpc2VkIGluIHRoZSBsb3dlciBsZXZlbHMuCiAgKi8KIHN0YXRpYyBib29sCi1Qcm9j ZXNzU2luZ2xlUmVsYXRpb25Gb3JrKFJlbGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9ya051 bSwgQnVmZmVyQWNjZXNzU3RyYXRlZ3kgc3RyYXRlZ3kpCitQcm9jZXNzU2luZ2xlUmVsYXRp b25Gb3JrKFJlbGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9ya051bSkKIHsKIAlCbG9ja051 bWJlciBudW1ibG9ja3MgPSBSZWxhdGlvbkdldE51bWJlck9mQmxvY2tzSW5Gb3JrKHJlbG4s IGZvcmtOdW0pOwogCWNoYXIJCWFjdGl2aXR5W05BTUVEQVRBTEVOICogMiArIDEyOF07CkBA IC03MjIsNyArNzIyLDcgQEAgUHJvY2Vzc1NpbmdsZVJlbGF0aW9uRm9yayhSZWxhdGlvbiBy ZWxuLCBGb3JrTnVtYmVyIGZvcmtOdW0sIEJ1ZmZlckFjY2Vzc1N0cmF0ZWcKIAkgKi8KIAlm b3IgKEJsb2NrTnVtYmVyIGJsa251bSA9IDA7IGJsa251bSA8IG51bWJsb2NrczsgYmxrbnVt KyspCiAJewotCQlCdWZmZXIJCWJ1ZiA9IFJlYWRCdWZmZXJFeHRlbmRlZChyZWxuLCBmb3Jr TnVtLCBibGtudW0sIFJCTV9OT1JNQUwsIHN0cmF0ZWd5KTsKKwkJQnVmZmVyCQlidWYgPSBS ZWFkQnVmZmVyRXh0ZW5kZWQocmVsbiwgZm9ya051bSwgYmxrbnVtLCBSQk1fTk9STUFMKTsK IAogCQkvKiBOZWVkIHRvIGdldCBhbiBleGNsdXNpdmUgbG9jayB0byBtYXJrIHRoZSBidWZm ZXIgYXMgZGlydHkgKi8KIAkJTG9ja0J1ZmZlcihidWYsIEJVRkZFUl9MT0NLX0VYQ0xVU0lW RSk7CkBAIC04MDgsNyArODA4LDcgQEAgUmVzZXREYXRhQ2hlY2tzdW1zUHJvZ3Jlc3NDb3Vu dGVycyh2b2lkKQogICogZXJyb3IgaXMgcmFpc2VkIGluIHRoZSBsb3dlciBsZXZlbHMuCiAg Ki8KIHN0YXRpYyBib29sCi1Qcm9jZXNzU2luZ2xlUmVsYXRpb25CeU9pZChPaWQgcmVsYXRp b25JZCwgQnVmZmVyQWNjZXNzU3RyYXRlZ3kgc3RyYXRlZ3kpCitQcm9jZXNzU2luZ2xlUmVs YXRpb25CeU9pZChPaWQgcmVsYXRpb25JZCkKIHsKIAlSZWxhdGlvbglyZWw7CiAJYm9vbAkJ YWJvcnRlZCA9IGZhbHNlOwpAQCAtODM1LDcgKzgzNSw3IEBAIFByb2Nlc3NTaW5nbGVSZWxh dGlvbkJ5T2lkKE9pZCByZWxhdGlvbklkLCBCdWZmZXJBY2Nlc3NTdHJhdGVneSBzdHJhdGVn eSkKIAl7CiAJCWlmIChzbWdyZXhpc3RzKHJlbC0+cmRfc21nciwgZm51bSkpCiAJCXsKLQkJ CWlmICghUHJvY2Vzc1NpbmdsZVJlbGF0aW9uRm9yayhyZWwsIGZudW0sIHN0cmF0ZWd5KSkK KwkJCWlmICghUHJvY2Vzc1NpbmdsZVJlbGF0aW9uRm9yayhyZWwsIGZudW0pKQogCQkJewog CQkJCWFib3J0ZWQgPSB0cnVlOwogCQkJCWJyZWFrOwpAQCAtMTU4Miw3ICsxNTgyLDYgQEAg RGF0YUNoZWNrc3Vtc1dvcmtlck1haW4oRGF0dW0gYXJnKQogCU9pZAkJCWRib2lkOwogCUxp c3QJICAgKlJlbGF0aW9uTGlzdCA9IE5JTDsKIAlMaXN0CSAgICpJbml0aWFsVGVtcFRhYmxl TGlzdCA9IE5JTDsKLQlCdWZmZXJBY2Nlc3NTdHJhdGVneSBzdHJhdGVneTsKIAlib29sCQlh Ym9ydGVkID0gZmFsc2U7CiAJaW50NjQJCXJlbHNfZG9uZTsKIAlib29sCQlwcm9jZXNzX3No YXJlZDsKQEAgLTE2NTAsMTEgKzE2NDksNiBAQCBEYXRhQ2hlY2tzdW1zV29ya2VyTWFpbihE YXR1bSBhcmcpCiAJVmFjdXVtVXBkYXRlQ29zdHMoKTsKIAlWYWN1dW1Db3N0QmFsYW5jZSA9 IDA7CiAKLQkvKgotCSAqIENyZWF0ZSBhbmQgc2V0IHRoZSB2YWN1dW0gc3RyYXRlZ3kgYXMg b3VyIGJ1ZmZlciBzdHJhdGVneS4KLQkgKi8KLQlzdHJhdGVneSA9IEdldEFjY2Vzc1N0cmF0 ZWd5KEJBU19WQUNVVU0pOwotCiAJUmVsYXRpb25MaXN0ID0gQnVpbGRSZWxhdGlvbkxpc3Qo ZmFsc2UsIHByb2Nlc3Nfc2hhcmVkKTsKIAogCS8qIFVwZGF0ZSB0aGUgdG90YWwgbnVtYmVy IG9mIHJlbGF0aW9ucyB0byBiZSBwcm9jZXNzZWQgaW4gdGhpcyBEQi4gKi8KQEAgLTE2NzYs OSArMTY3MCw3IEBAIERhdGFDaGVja3N1bXNXb3JrZXJNYWluKERhdHVtIGFyZykKIAlyZWxz X2RvbmUgPSAwOwogCWZvcmVhY2hfb2lkKHJlbG9pZCwgUmVsYXRpb25MaXN0KQogCXsKLQkJ Ym9vbAkJY29zdHNfdXBkYXRlZCA9IGZhbHNlOwotCi0JCWlmICghUHJvY2Vzc1NpbmdsZVJl bGF0aW9uQnlPaWQocmVsb2lkLCBzdHJhdGVneSkpCisJCWlmICghUHJvY2Vzc1NpbmdsZVJl bGF0aW9uQnlPaWQocmVsb2lkKSkKIAkJewogCQkJYWJvcnRlZCA9IHRydWU7CiAJCQlicmVh azsKQEAgLTE2OTQsOCArMTY4Niw3IEBAIERhdGFDaGVja3N1bXNXb3JrZXJNYWluKERhdHVt IGFyZykKIAogCQkvKgogCQkgKiBDaGVjayBpZiB0aGUgY29zdCBzZXR0aW5ncyBjaGFuZ2Vk IGR1cmluZyBydW50aW1lIGFuZCBpZiBzbywgdXBkYXRlCi0JCSAqIHRvIHJlZmxlY3QgdGhl IG5ldyB2YWx1ZXMgYW5kIHNpZ25hbCB0aGF0IHRoZSBhY2Nlc3Mgc3RyYXRlZ3kgbmVlZHMK LQkJICogdG8gYmUgcmVmcmVzaGVkLgorCQkgKiB0byByZWZsZWN0IHRoZSBuZXcgdmFsdWVz LgogCQkgKi8KIAkJTFdMb2NrQWNxdWlyZShEYXRhQ2hlY2tzdW1zV29ya2VyTG9jaywgTFdf RVhDTFVTSVZFKTsKIAkJaWYgKERhdGFDaGVja3N1bVN0YXRlLT53b3JrZXJfaW52b2NhdGlv biAhPSB3b3JrZXJfaW52b2NhdGlvbikKQEAgLTE3MDYsNyArMTY5Nyw2IEBAIERhdGFDaGVj a3N1bXNXb3JrZXJNYWluKERhdHVtIGFyZykKIAkJaWYgKChEYXRhQ2hlY2tzdW1TdGF0ZS0+ bGF1bmNoX2Nvc3RfZGVsYXkgIT0gRGF0YUNoZWNrc3VtU3RhdGUtPmNvc3RfZGVsYXkpCiAJ CQl8fCAoRGF0YUNoZWNrc3VtU3RhdGUtPmxhdW5jaF9jb3N0X2xpbWl0ICE9IERhdGFDaGVj a3N1bVN0YXRlLT5jb3N0X2xpbWl0KSkKIAkJewotCQkJY29zdHNfdXBkYXRlZCA9IHRydWU7 CiAJCQlWYWN1dW1Db3N0RGVsYXkgPSBEYXRhQ2hlY2tzdW1TdGF0ZS0+bGF1bmNoX2Nvc3Rf ZGVsYXk7CiAJCQlWYWN1dW1Db3N0TGltaXQgPSBEYXRhQ2hlY2tzdW1TdGF0ZS0+bGF1bmNo X2Nvc3RfbGltaXQ7CiAJCQlWYWN1dW1VcGRhdGVDb3N0cygpOwpAQCAtMTcxNCwxOSArMTcw NCwxMCBAQCBEYXRhQ2hlY2tzdW1zV29ya2VyTWFpbihEYXR1bSBhcmcpCiAJCQlEYXRhQ2hl Y2tzdW1TdGF0ZS0+Y29zdF9kZWxheSA9IERhdGFDaGVja3N1bVN0YXRlLT5sYXVuY2hfY29z dF9kZWxheTsKIAkJCURhdGFDaGVja3N1bVN0YXRlLT5jb3N0X2xpbWl0ID0gRGF0YUNoZWNr c3VtU3RhdGUtPmxhdW5jaF9jb3N0X2xpbWl0OwogCQl9Ci0JCWVsc2UKLQkJCWNvc3RzX3Vw ZGF0ZWQgPSBmYWxzZTsKIAkJTFdMb2NrUmVsZWFzZShEYXRhQ2hlY2tzdW1zV29ya2VyTG9j ayk7Ci0KLQkJaWYgKGNvc3RzX3VwZGF0ZWQpCi0JCXsKLQkJCUZyZWVBY2Nlc3NTdHJhdGVn eShzdHJhdGVneSk7Ci0JCQlzdHJhdGVneSA9IEdldEFjY2Vzc1N0cmF0ZWd5KEJBU19WQUNV VU0pOwotCQl9CiAJfQogCiAJbGlzdF9mcmVlKFJlbGF0aW9uTGlzdCk7Ci0JRnJlZUFjY2Vz c1N0cmF0ZWd5KHN0cmF0ZWd5KTsKIAogCWlmIChhYm9ydGVkIHx8IGFib3J0X3JlcXVlc3Rl ZCkKIAl7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9zdG9yYWdlL2Fpby9yZWFkX3N0cmVh bS5jIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9haW8vcmVhZF9zdHJlYW0uYwppbmRleCBhMzE4 NTM5ZTU2Yy4uMDhkMzQ0ZjA2M2QgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3N0b3JhZ2Uv YWlvL3JlYWRfc3RyZWFtLmMKKysrIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9haW8vcmVhZF9z dHJlYW0uYwpAQCAtNzU3LDcgKzc1Nyw2IEBAIHJlYWRfc3RyZWFtX2xvb2tfYWhlYWQoUmVh ZFN0cmVhbSAqc3RyZWFtKQogICovCiBzdGF0aWMgUmVhZFN0cmVhbSAqCiByZWFkX3N0cmVh bV9iZWdpbl9pbXBsKGludCBmbGFncywKLQkJCQkJICAgQnVmZmVyQWNjZXNzU3RyYXRlZ3kg c3RyYXRlZ3ksCiAJCQkJCSAgIFJlbGF0aW9uIHJlbCwKIAkJCQkJICAgU01nclJlbGF0aW9u IHNtZ3IsCiAJCQkJCSAgIGNoYXIgcGVyc2lzdGVuY2UsCkBAIC03NzEsNyArNzcwLDYgQEAg cmVhZF9zdHJlYW1fYmVnaW5faW1wbChpbnQgZmxhZ3MsCiAJaW50MTYJCXF1ZXVlX3NpemU7 CiAJaW50MTYJCXF1ZXVlX292ZXJmbG93OwogCWludAkJCW1heF9pb3M7Ci0JaW50CQkJc3Ry YXRlZ3lfcGluX2xpbWl0OwogCXVpbnQzMgkJbWF4X3Bpbm5lZF9idWZmZXJzOwogCXVpbnQz MgkJbWF4X3Bvc3NpYmxlX2J1ZmZlcl9saW1pdDsKIAlPaWQJCQl0YWJsZXNwYWNlX2lkOwpA QCAtODM1LDEwICs4MzMsNiBAQCByZWFkX3N0cmVhbV9iZWdpbl9pbXBsKGludCBmbGFncywK IAltYXhfcGlubmVkX2J1ZmZlcnMgPSBNaW4obWF4X3Bpbm5lZF9idWZmZXJzLAogCQkJCQkJ CSBQR19JTlQxNl9NQVggLSBxdWV1ZV9vdmVyZmxvdyAtIDEpOwogCi0JLyogR2l2ZSB0aGUg c3RyYXRlZ3kgYSBjaGFuY2UgdG8gbGltaXQgdGhlIG51bWJlciBvZiBidWZmZXJzIHdlIHBp bi4gKi8KLQlzdHJhdGVneV9waW5fbGltaXQgPSBHZXRBY2Nlc3NTdHJhdGVneVBpbkxpbWl0 KHN0cmF0ZWd5KTsKLQltYXhfcGlubmVkX2J1ZmZlcnMgPSBNaW4oc3RyYXRlZ3lfcGluX2xp bWl0LCBtYXhfcGlubmVkX2J1ZmZlcnMpOwotCiAJLyoKIAkgKiBBbHNvIGxpbWl0IG91ciBx dWV1ZSB0byB0aGUgbWF4aW11bSBudW1iZXIgb2YgcGlucyB3ZSBjb3VsZCBldmVyIGJlCiAJ ICogYWxsb3dlZCB0byBhY3F1aXJlIGFjY29yZGluZyB0byB0aGUgYnVmZmVyIG1hbmFnZXIu ICBXZSBtYXkgbm90IHJlYWxseQpAQCAtOTYyLDcgKzk1Niw2IEBAIHJlYWRfc3RyZWFtX2Jl Z2luX2ltcGwoaW50IGZsYWdzLAogCQlzdHJlYW0tPmlvc1tpXS5vcC5zbWdyID0gc21ncjsK IAkJc3RyZWFtLT5pb3NbaV0ub3AucGVyc2lzdGVuY2UgPSBwZXJzaXN0ZW5jZTsKIAkJc3Ry ZWFtLT5pb3NbaV0ub3AuZm9ya251bSA9IGZvcmtudW07Ci0JCXN0cmVhbS0+aW9zW2ldLm9w LnN0cmF0ZWd5ID0gc3RyYXRlZ3k7CiAJfQogCiAJcmV0dXJuIHN0cmVhbTsKQEAgLTk3NCw3 ICs5NjcsNiBAQCByZWFkX3N0cmVhbV9iZWdpbl9pbXBsKGludCBmbGFncywKICAqLwogUmVh ZFN0cmVhbSAqCiByZWFkX3N0cmVhbV9iZWdpbl9yZWxhdGlvbihpbnQgZmxhZ3MsCi0JCQkJ CQkgICBCdWZmZXJBY2Nlc3NTdHJhdGVneSBzdHJhdGVneSwKIAkJCQkJCSAgIFJlbGF0aW9u IHJlbCwKIAkJCQkJCSAgIEZvcmtOdW1iZXIgZm9ya251bSwKIAkJCQkJCSAgIFJlYWRTdHJl YW1CbG9ja051bWJlckNCIGNhbGxiYWNrLApAQCAtOTgyLDcgKzk3NCw2IEBAIHJlYWRfc3Ry ZWFtX2JlZ2luX3JlbGF0aW9uKGludCBmbGFncywKIAkJCQkJCSAgIHNpemVfdCBwZXJfYnVm ZmVyX2RhdGFfc2l6ZSkKIHsKIAlyZXR1cm4gcmVhZF9zdHJlYW1fYmVnaW5faW1wbChmbGFn cywKLQkJCQkJCQkJICBzdHJhdGVneSwKIAkJCQkJCQkJICByZWwsCiAJCQkJCQkJCSAgUmVs YXRpb25HZXRTbWdyKHJlbCksCiAJCQkJCQkJCSAgcmVsLT5yZF9yZWwtPnJlbHBlcnNpc3Rl bmNlLApAQCAtOTk4LDcgKzk4OSw2IEBAIHJlYWRfc3RyZWFtX2JlZ2luX3JlbGF0aW9uKGlu dCBmbGFncywKICAqLwogUmVhZFN0cmVhbSAqCiByZWFkX3N0cmVhbV9iZWdpbl9zbWdyX3Jl bGF0aW9uKGludCBmbGFncywKLQkJCQkJCQkJQnVmZmVyQWNjZXNzU3RyYXRlZ3kgc3RyYXRl Z3ksCiAJCQkJCQkJCVNNZ3JSZWxhdGlvbiBzbWdyLAogCQkJCQkJCQljaGFyIHNtZ3JfcGVy c2lzdGVuY2UsCiAJCQkJCQkJCUZvcmtOdW1iZXIgZm9ya251bSwKQEAgLTEwMDcsNyArOTk3 LDYgQEAgcmVhZF9zdHJlYW1fYmVnaW5fc21ncl9yZWxhdGlvbihpbnQgZmxhZ3MsCiAJCQkJ CQkJCXNpemVfdCBwZXJfYnVmZmVyX2RhdGFfc2l6ZSkKIHsKIAlyZXR1cm4gcmVhZF9zdHJl YW1fYmVnaW5faW1wbChmbGFncywKLQkJCQkJCQkJICBzdHJhdGVneSwKIAkJCQkJCQkJICBO VUxMLAogCQkJCQkJCQkgIHNtZ3IsCiAJCQkJCQkJCSAgc21ncl9wZXJzaXN0ZW5jZSwKQEAg LTEzNzAsMTMgKzEzNTksMTEgQEAgcmVhZF9zdHJlYW1fbmV4dF9idWZmZXIoUmVhZFN0cmVh bSAqc3RyZWFtLCB2b2lkICoqcGVyX2J1ZmZlcl9kYXRhKQogICogVHJhbnNpdGlvbmFsIHN1 cHBvcnQgZm9yIGNvZGUgdGhhdCB3b3VsZCBsaWtlIHRvIHBlcmZvcm0gb3Igc2tpcCByZWFk cwogICogaXRzZWxmLCB3aXRob3V0IHVzaW5nIHRoZSBzdHJlYW0uICBSZXR1cm5zLCBhbmQg Y29uc3VtZXMsIHRoZSBuZXh0IGJsb2NrCiAgKiBudW1iZXIgdGhhdCB3b3VsZCBiZSByZWFk IGJ5IHRoZSBzdHJlYW0ncyBsb29rLWFoZWFkIGFsZ29yaXRobSwgb3IKLSAqIEludmFsaWRC bG9ja051bWJlciBpZiB0aGUgZW5kIG9mIHRoZSBzdHJlYW0gaXMgcmVhY2hlZC4gIEFsc28g cmVwb3J0cyB0aGUKLSAqIHN0cmF0ZWd5IHRoYXQgd291bGQgYmUgdXNlZCB0byByZWFkIGl0 LgorICogSW52YWxpZEJsb2NrTnVtYmVyIGlmIHRoZSBlbmQgb2YgdGhlIHN0cmVhbSBpcyBy ZWFjaGVkLgogICovCiBCbG9ja051bWJlcgotcmVhZF9zdHJlYW1fbmV4dF9ibG9jayhSZWFk U3RyZWFtICpzdHJlYW0sIEJ1ZmZlckFjY2Vzc1N0cmF0ZWd5ICpzdHJhdGVneSkKK3JlYWRf c3RyZWFtX25leHRfYmxvY2soUmVhZFN0cmVhbSAqc3RyZWFtKQogewotCSpzdHJhdGVneSA9 IHN0cmVhbS0+aW9zWzBdLm9wLnN0cmF0ZWd5OwogCXJldHVybiByZWFkX3N0cmVhbV9nZXRf YmxvY2soc3RyZWFtLCBOVUxMKTsKIH0KIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvc3Rv cmFnZS9idWZmZXIvUkVBRE1FIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9idWZmZXIvUkVBRE1F CmluZGV4IGIzMzJlMDAyYmExLi41OGRmNmJkMDExYSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tl bmQvc3RvcmFnZS9idWZmZXIvUkVBRE1FCisrKyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYnVm ZmVyL1JFQURNRQpAQCAtMjAzLDUwICsyMDMsNiBAQCBoYXZlIHRvIGdpdmUgdXAgYW5kIHRy eSBhbm90aGVyIGJ1ZmZlci4gIFRoaXMgaG93ZXZlciBpcyBub3QgYSBjb25jZXJuCiBvZiB0 aGUgYmFzaWMgc2VsZWN0LWEtdmljdGltLWJ1ZmZlciBhbGdvcml0aG0uKQogCiAKLUJ1ZmZl ciBSaW5nIFJlcGxhY2VtZW50IFN0cmF0ZWd5Ci0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KLQotV2hlbiBydW5uaW5nIGEgcXVlcnkgdGhhdCBuZWVkcyB0byBhY2Nlc3Mg YSBsYXJnZSBudW1iZXIgb2YgcGFnZXMganVzdCBvbmNlLAotc3VjaCBhcyBWQUNVVU0gb3Ig YSBsYXJnZSBzZXF1ZW50aWFsIHNjYW4sIGEgZGlmZmVyZW50IHN0cmF0ZWd5IGlzIHVzZWQu Ci1BIHBhZ2UgdGhhdCBoYXMgYmVlbiB0b3VjaGVkIG9ubHkgYnkgc3VjaCBhIHNjYW4gaXMg dW5saWtlbHkgdG8gYmUgbmVlZGVkCi1hZ2FpbiBzb29uLCBzbyBpbnN0ZWFkIG9mIHJ1bm5p bmcgdGhlIG5vcm1hbCBjbG9jay1zd2VlcCBhbGdvcml0aG0gYW5kCi1ibG93aW5nIG91dCB0 aGUgZW50aXJlIGJ1ZmZlciBjYWNoZSwgYSBzbWFsbCByaW5nIG9mIGJ1ZmZlcnMgaXMgYWxs b2NhdGVkCi11c2luZyB0aGUgbm9ybWFsIGNsb2NrLXN3ZWVwIGFsZ29yaXRobSBhbmQgdGhv c2UgYnVmZmVycyBhcmUgcmV1c2VkIGZvciB0aGUKLXdob2xlIHNjYW4uICBUaGlzIGFsc28g aW1wbGllcyB0aGF0IG11Y2ggb2YgdGhlIHdyaXRlIHRyYWZmaWMgY2F1c2VkIGJ5IHN1Y2gK LWEgc3RhdGVtZW50IHdpbGwgYmUgZG9uZSBieSB0aGUgYmFja2VuZCBpdHNlbGYgYW5kIG5v dCBwdXNoZWQgb2ZmIG9udG8gb3RoZXIKLXByb2Nlc3Nlcy4KLQotRm9yIHNlcXVlbnRpYWwg c2NhbnMsIGEgMjU2S0IgcmluZyBpcyB1c2VkLiBUaGF0J3Mgc21hbGwgZW5vdWdoIHRvIGZp dCBpbiBMMgotY2FjaGUsIHdoaWNoIG1ha2VzIHRyYW5zZmVycmluZyBwYWdlcyBmcm9tIE9T IGNhY2hlIHRvIHNoYXJlZCBidWZmZXIgY2FjaGUKLWVmZmljaWVudC4gIEV2ZW4gbGVzcyB3 b3VsZCBvZnRlbiBiZSBlbm91Z2gsIGJ1dCB0aGUgcmluZyBtdXN0IGJlIGJpZyBlbm91Z2gK LXRvIGFjY29tbW9kYXRlIGFsbCBwYWdlcyBpbiB0aGUgc2NhbiB0aGF0IGFyZSBwaW5uZWQg Y29uY3VycmVudGx5LiAgMjU2S0IKLXNob3VsZCBhbHNvIGJlIGVub3VnaCB0byBsZWF2ZSBh IHNtYWxsIGNhY2hlIHRyYWlsIGZvciBvdGhlciBiYWNrZW5kcyB0bwotam9pbiBpbiBhIHN5 bmNocm9uaXplZCBzZXEgc2Nhbi4gIElmIGEgcmluZyBidWZmZXIgaXMgZGlydGllZCBhbmQg aXRzIExTTgotdXBkYXRlZCwgd2Ugd291bGQgbm9ybWFsbHkgaGF2ZSB0byB3cml0ZSBhbmQg Zmx1c2ggV0FMIGJlZm9yZSB3ZSBjb3VsZAotcmUtdXNlIHRoZSBidWZmZXI7IGluIHRoaXMg Y2FzZSB3ZSBpbnN0ZWFkIGRpc2NhcmQgdGhlIGJ1ZmZlciBmcm9tIHRoZSByaW5nCi1hbmQg KGxhdGVyKSBjaG9vc2UgYSByZXBsYWNlbWVudCB1c2luZyB0aGUgbm9ybWFsIGNsb2NrLXN3 ZWVwIGFsZ29yaXRobS4KLUhlbmNlIHRoaXMgc3RyYXRlZ3kgd29ya3MgYmVzdCBmb3Igc2Nh bnMgdGhhdCBhcmUgcmVhZC1vbmx5IChvciBhdCB3b3JzdAotdXBkYXRlIGhpbnQgYml0cyku ICBJbiBhIHNjYW4gdGhhdCBtb2RpZmllcyBldmVyeSBwYWdlIGluIHRoZSBzY2FuLCBsaWtl IGEKLWJ1bGsgVVBEQVRFIG9yIERFTEVURSwgdGhlIGJ1ZmZlcnMgaW4gdGhlIHJpbmcgd2ls bCBhbHdheXMgYmUgZGlydGllZCBhbmQKLXRoZSByaW5nIHN0cmF0ZWd5IGVmZmVjdGl2ZWx5 IGRlZ3JhZGVzIHRvIHRoZSBub3JtYWwgc3RyYXRlZ3kuCi0KLVZBQ1VVTSB1c2VzIGEgcmlu ZyBsaWtlIHNlcXVlbnRpYWwgc2NhbnMsIGhvd2V2ZXIsIHRoZSBzaXplIG9mIHRoaXMgcmlu ZyBpcwotY29udHJvbGxlZCBieSB0aGUgdmFjdXVtX2J1ZmZlcl91c2FnZV9saW1pdCBHVUMu ICBEaXJ0eSBwYWdlcyBhcmUgbm90IHJlbW92ZWQKLWZyb20gdGhlIHJpbmcuICBJbnN0ZWFk LCB0aGUgV0FMIGlzIGZsdXNoZWQgaWYgbmVlZGVkIHRvIGFsbG93IHJldXNlIG9mIHRoZQot YnVmZmVycy4gIEJlZm9yZSBpbnRyb2R1Y2luZyB0aGUgYnVmZmVyIHJpbmcgc3RyYXRlZ3kg aW4gOC4zLCBWQUNVVU0ncyBidWZmZXJzCi13ZXJlIHNlbnQgdG8gdGhlIGZyZWVsaXN0LCB3 aGljaCB3YXMgZWZmZWN0aXZlbHkgYSBidWZmZXIgcmluZyBvZiAxIGJ1ZmZlciwKLXJlc3Vs dGluZyBpbiBleGNlc3NpdmUgV0FMIGZsdXNoaW5nLgotCi1CdWxrIHdyaXRlcyB3b3JrIHNp bWlsYXJseSB0byBWQUNVVU0uICBDdXJyZW50bHkgdGhpcyBhcHBsaWVzIG9ubHkgdG8KLUNP UFkgSU4gYW5kIENSRUFURSBUQUJMRSBBUyBTRUxFQ1QuICAoTWlnaHQgaXQgYmUgaW50ZXJl c3RpbmcgdG8gbWFrZQotc2Vxc2NhbiBVUERBVEUgYW5kIERFTEVURSB1c2UgdGhlIGJ1bGt3 cml0ZSBzdHJhdGVneT8pICBGb3IgYnVsayB3cml0ZXMKLXdlIHVzZSBhIHJpbmcgc2l6ZSBv ZiAxNk1CIChidXQgbm90IG1vcmUgdGhhbiAxLzh0aCBvZiBzaGFyZWRfYnVmZmVycykuCi1T bWFsbGVyIHNpemVzIGhhdmUgYmVlbiBzaG93biB0byByZXN1bHQgaW4gdGhlIENPUFkgYmxv Y2tpbmcgdG9vIG9mdGVuCi1mb3IgV0FMIGZsdXNoZXMuICBXaGlsZSBpdCdzIG9rYXkgZm9y IGEgYmFja2dyb3VuZCB2YWN1dW0gdG8gYmUgc2xvd2VkIGJ5Ci1kb2luZyBpdHMgb3duIFdB TCBmbHVzaGluZywgd2UnZCBwcmVmZXIgdGhhdCBDT1BZIG5vdCBiZSBzdWJqZWN0IHRvIHRo YXQsCi1zbyB3ZSBsZXQgaXQgdXNlIHVwIGEgYml0IG1vcmUgb2YgdGhlIGJ1ZmZlciBhcmVu YS4KLQotCiBCYWNrZ3JvdW5kIFdyaXRlcidzIFByb2Nlc3NpbmcKIC0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQogCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9zdG9yYWdlL2J1 ZmZlci9idWZtZ3IuYyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYnVmZmVyL2J1Zm1nci5jCmlu ZGV4IDExNzNiNTBiN2MxLi4zMGYyNDQzZTU3NyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQv c3RvcmFnZS9idWZmZXIvYnVmbWdyLmMKKysrIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9idWZm ZXIvYnVmbWdyLmMKQEAgLTYxMiwxMCArNjEyLDkgQEAgRm9yZ2V0UHJpdmF0ZVJlZkNvdW50 RW50cnkoUHJpdmF0ZVJlZkNvdW50RW50cnkgKnJlZikKIHN0YXRpYyBCdWZmZXIgUmVhZEJ1 ZmZlcl9jb21tb24oUmVsYXRpb24gcmVsLAogCQkJCQkJCQlTTWdyUmVsYXRpb24gc21nciwg Y2hhciBzbWdyX3BlcnNpc3RlbmNlLAogCQkJCQkJCQlGb3JrTnVtYmVyIGZvcmtOdW0sIEJs b2NrTnVtYmVyIGJsb2NrTnVtLAotCQkJCQkJCQlSZWFkQnVmZmVyTW9kZSBtb2RlLCBCdWZm ZXJBY2Nlc3NTdHJhdGVneSBzdHJhdGVneSk7CisJCQkJCQkJCVJlYWRCdWZmZXJNb2RlIG1v ZGUpOwogc3RhdGljIEJsb2NrTnVtYmVyIEV4dGVuZEJ1ZmZlcmVkUmVsQ29tbW9uKEJ1ZmZl ck1hbmFnZXJSZWxhdGlvbiBibXIsCiAJCQkJCQkJCQkJICAgRm9ya051bWJlciBmb3JrLAot CQkJCQkJCQkJCSAgIEJ1ZmZlckFjY2Vzc1N0cmF0ZWd5IHN0cmF0ZWd5LAogCQkJCQkJCQkJ CSAgIHVpbnQzMiBmbGFncywKIAkJCQkJCQkJCQkgICB1aW50MzIgZXh0ZW5kX2J5LAogCQkJ CQkJCQkJCSAgIEJsb2NrTnVtYmVyIGV4dGVuZF91cHRvLApAQCAtNjIzLDEzICs2MjIsMTIg QEAgc3RhdGljIEJsb2NrTnVtYmVyIEV4dGVuZEJ1ZmZlcmVkUmVsQ29tbW9uKEJ1ZmZlck1h bmFnZXJSZWxhdGlvbiBibXIsCiAJCQkJCQkJCQkJICAgdWludDMyICpleHRlbmRlZF9ieSk7 CiBzdGF0aWMgQmxvY2tOdW1iZXIgRXh0ZW5kQnVmZmVyZWRSZWxTaGFyZWQoQnVmZmVyTWFu YWdlclJlbGF0aW9uIGJtciwKIAkJCQkJCQkJCQkgICBGb3JrTnVtYmVyIGZvcmssCi0JCQkJ CQkJCQkJICAgQnVmZmVyQWNjZXNzU3RyYXRlZ3kgc3RyYXRlZ3ksCiAJCQkJCQkJCQkJICAg dWludDMyIGZsYWdzLAogCQkJCQkJCQkJCSAgIHVpbnQzMiBleHRlbmRfYnksCiAJCQkJCQkJ CQkJICAgQmxvY2tOdW1iZXIgZXh0ZW5kX3VwdG8sCiAJCQkJCQkJCQkJICAgQnVmZmVyICpi dWZmZXJzLAogCQkJCQkJCQkJCSAgIHVpbnQzMiAqZXh0ZW5kZWRfYnkpOwotc3RhdGljIGJv b2wgUGluQnVmZmVyKEJ1ZmZlckRlc2MgKmJ1ZiwgQnVmZmVyQWNjZXNzU3RyYXRlZ3kgc3Ry YXRlZ3ksCitzdGF0aWMgYm9vbCBQaW5CdWZmZXIoQnVmZmVyRGVzYyAqYnVmLAogCQkJCQkg IGJvb2wgc2tpcF9pZl9ub3RfdmFsaWQpOwogc3RhdGljIHZvaWQgUGluQnVmZmVyX0xvY2tl ZChCdWZmZXJEZXNjICpidWYpOwogc3RhdGljIHZvaWQgVW5waW5CdWZmZXIoQnVmZmVyRGVz YyAqYnVmKTsKQEAgLTY0NSw3ICs2NDMsNiBAQCBzdGF0aWMgaW5saW5lIEJ1ZmZlckRlc2Mg KkJ1ZmZlckFsbG9jKFNNZ3JSZWxhdGlvbiBzbWdyLAogCQkJCQkJCQkJICBjaGFyIHJlbHBl cnNpc3RlbmNlLAogCQkJCQkJCQkJICBGb3JrTnVtYmVyIGZvcmtOdW0sCiAJCQkJCQkJCQkg IEJsb2NrTnVtYmVyIGJsb2NrTnVtLAotCQkJCQkJCQkJICBCdWZmZXJBY2Nlc3NTdHJhdGVn eSBzdHJhdGVneSwKIAkJCQkJCQkJCSAgYm9vbCAqZm91bmRQdHIsIElPQ29udGV4dCBpb19j b250ZXh0KTsKIHN0YXRpYyBib29sIEFzeW5jUmVhZEJ1ZmZlcnMoUmVhZEJ1ZmZlcnNPcGVy YXRpb24gKm9wZXJhdGlvbiwgaW50ICpuYmxvY2tzX3Byb2dyZXNzKTsKIHN0YXRpYyB2b2lk IENoZWNrUmVhZEJ1ZmZlcnNPcGVyYXRpb24oUmVhZEJ1ZmZlcnNPcGVyYXRpb24gKm9wZXJh dGlvbiwgYm9vbCBpc19jb21wbGV0ZSk7CkBAIC02NTQsNyArNjUxLDcgQEAgc3RhdGljIHBn X2F0dHJpYnV0ZV9hbHdheXNfaW5saW5lIHZvaWQgVHJhY2tCdWZmZXJIaXQoSU9PYmplY3Qg aW9fb2JqZWN0LAogCQkJCQkJCQkJCQkJCSAgSU9Db250ZXh0IGlvX2NvbnRleHQsCiAJCQkJ CQkJCQkJCQkJICBSZWxhdGlvbiByZWwsIGNoYXIgcGVyc2lzdGVuY2UsIFNNZ3JSZWxhdGlv biBzbWdyLAogCQkJCQkJCQkJCQkJCSAgRm9ya051bWJlciBmb3JrbnVtLCBCbG9ja051bWJl ciBibG9ja251bSk7Ci1zdGF0aWMgQnVmZmVyIEdldFZpY3RpbUJ1ZmZlcihCdWZmZXJBY2Nl c3NTdHJhdGVneSBzdHJhdGVneSwgSU9Db250ZXh0IGlvX2NvbnRleHQpOworc3RhdGljIEJ1 ZmZlciBHZXRWaWN0aW1CdWZmZXIoSU9Db250ZXh0IGlvX2NvbnRleHQpOwogc3RhdGljIHZv aWQgRmx1c2hVbmxvY2tlZEJ1ZmZlcihCdWZmZXJEZXNjICpidWYsIFNNZ3JSZWxhdGlvbiBy ZWxuLAogCQkJCQkJCQlJT09iamVjdCBpb19vYmplY3QsIElPQ29udGV4dCBpb19jb250ZXh0 KTsKIHN0YXRpYyB2b2lkIEZsdXNoQnVmZmVyKEJ1ZmZlckRlc2MgKmJ1ZiwgU01nclJlbGF0 aW9uIHJlbG4sCkBAIC04NTgsNyArODU1LDcgQEAgUmVhZFJlY2VudEJ1ZmZlcihSZWxGaWxl TG9jYXRvciBybG9jYXRvciwgRm9ya051bWJlciBmb3JrTnVtLCBCbG9ja051bWJlciBibG9j a04KIAkJICogcGluLgogCQkgKi8KIAkJaWYgKEJ1ZmZlclRhZ3NFcXVhbCgmdGFnLCAmYnVm SGRyLT50YWcpICYmCi0JCQlQaW5CdWZmZXIoYnVmSGRyLCBOVUxMLCB0cnVlKSkKKwkJCVBp bkJ1ZmZlcihidWZIZHIsIHRydWUpKQogCQl7CiAJCQlpZiAoQnVmZmVyVGFnc0VxdWFsKCZ0 YWcsICZidWZIZHItPnRhZykpCiAJCQl7CkBAIC04NzQsMTIgKzg3MSwxMiBAQCBSZWFkUmVj ZW50QnVmZmVyKFJlbEZpbGVMb2NhdG9yIHJsb2NhdG9yLCBGb3JrTnVtYmVyIGZvcmtOdW0s IEJsb2NrTnVtYmVyIGJsb2NrTgogCiAvKgogICogUmVhZEJ1ZmZlciAtLSBhIHNob3J0aGFu ZCBmb3IgUmVhZEJ1ZmZlckV4dGVuZGVkLCBmb3IgcmVhZGluZyBmcm9tIG1haW4KLSAqCQlm b3JrIHdpdGggUkJNX05PUk1BTCBtb2RlIGFuZCBkZWZhdWx0IHN0cmF0ZWd5LgorICoJCWZv cmsgd2l0aCBSQk1fTk9STUFMIG1vZGUuCiAgKi8KIEJ1ZmZlcgogUmVhZEJ1ZmZlcihSZWxh dGlvbiByZWxuLCBCbG9ja051bWJlciBibG9ja051bSkKIHsKLQlyZXR1cm4gUmVhZEJ1ZmZl ckV4dGVuZGVkKHJlbG4sIE1BSU5fRk9SS05VTSwgYmxvY2tOdW0sIFJCTV9OT1JNQUwsIE5V TEwpOworCXJldHVybiBSZWFkQnVmZmVyRXh0ZW5kZWQocmVsbiwgTUFJTl9GT1JLTlVNLCBi bG9ja051bSwgUkJNX05PUk1BTCk7CiB9CiAKIC8qCkBAIC05MTksMTMgKzkxNiwxMCBAQCBS ZWFkQnVmZmVyKFJlbGF0aW9uIHJlbG4sIEJsb2NrTnVtYmVyIGJsb2NrTnVtKQogICogYSBj bGVhbnVwLXN0cmVuZ3RoIGxvY2sgb24gdGhlIHBhZ2UuCiAgKgogICogUkJNX05PUk1BTF9O T19MT0cgbW9kZSBpcyB0cmVhdGVkIHRoZSBzYW1lIGFzIFJCTV9OT1JNQUwgaGVyZS4KLSAq Ci0gKiBJZiBzdHJhdGVneSBpcyBub3QgTlVMTCwgYSBub25kZWZhdWx0IGJ1ZmZlciBhY2Nl c3Mgc3RyYXRlZ3kgaXMgdXNlZC4KLSAqIFNlZSBidWZmZXIvUkVBRE1FIGZvciBkZXRhaWxz LgogICovCiBpbmxpbmUgQnVmZmVyCiBSZWFkQnVmZmVyRXh0ZW5kZWQoUmVsYXRpb24gcmVs biwgRm9ya051bWJlciBmb3JrTnVtLCBCbG9ja051bWJlciBibG9ja051bSwKLQkJCQkgICBS ZWFkQnVmZmVyTW9kZSBtb2RlLCBCdWZmZXJBY2Nlc3NTdHJhdGVneSBzdHJhdGVneSkKKwkJ CQkgICBSZWFkQnVmZmVyTW9kZSBtb2RlKQogewogCUJ1ZmZlcgkJYnVmOwogCkBAIC05MzUs NyArOTI5LDcgQEAgUmVhZEJ1ZmZlckV4dGVuZGVkKFJlbGF0aW9uIHJlbG4sIEZvcmtOdW1i ZXIgZm9ya051bSwgQmxvY2tOdW1iZXIgYmxvY2tOdW0sCiAJICogUmVhZEJ1ZmZlcl9jb21t b24oKS4KIAkgKi8KIAlidWYgPSBSZWFkQnVmZmVyX2NvbW1vbihyZWxuLCBSZWxhdGlvbkdl dFNtZ3IocmVsbiksIDAsCi0JCQkJCQkJZm9ya051bSwgYmxvY2tOdW0sIG1vZGUsIHN0cmF0 ZWd5KTsKKwkJCQkJCQlmb3JrTnVtLCBibG9ja051bSwgbW9kZSk7CiAKIAlyZXR1cm4gYnVm OwogfQpAQCAtOTU0LDE0ICs5NDgsMTQgQEAgUmVhZEJ1ZmZlckV4dGVuZGVkKFJlbGF0aW9u IHJlbG4sIEZvcmtOdW1iZXIgZm9ya051bSwgQmxvY2tOdW1iZXIgYmxvY2tOdW0sCiBCdWZm ZXIKIFJlYWRCdWZmZXJXaXRob3V0UmVsY2FjaGUoUmVsRmlsZUxvY2F0b3IgcmxvY2F0b3Is IEZvcmtOdW1iZXIgZm9ya051bSwKIAkJCQkJCSAgQmxvY2tOdW1iZXIgYmxvY2tOdW0sIFJl YWRCdWZmZXJNb2RlIG1vZGUsCi0JCQkJCQkgIEJ1ZmZlckFjY2Vzc1N0cmF0ZWd5IHN0cmF0 ZWd5LCBib29sIHBlcm1hbmVudCkKKwkJCQkJCSAgYm9vbCBwZXJtYW5lbnQpCiB7CiAJU01n clJlbGF0aW9uIHNtZ3IgPSBzbWdyb3BlbihybG9jYXRvciwgSU5WQUxJRF9QUk9DX05VTUJF Uik7CiAKIAlyZXR1cm4gUmVhZEJ1ZmZlcl9jb21tb24oTlVMTCwgc21nciwKIAkJCQkJCQkg cGVybWFuZW50ID8gUkVMUEVSU0lTVEVOQ0VfUEVSTUFORU5UIDogUkVMUEVSU0lTVEVOQ0Vf VU5MT0dHRUQsCiAJCQkJCQkJIGZvcmtOdW0sIGJsb2NrTnVtLAotCQkJCQkJCSBtb2RlLCBz dHJhdGVneSk7CisJCQkJCQkJIG1vZGUpOwogfQogCiAvKgpAQCAtOTcwLDEzICs5NjQsMTIg QEAgUmVhZEJ1ZmZlcldpdGhvdXRSZWxjYWNoZShSZWxGaWxlTG9jYXRvciBybG9jYXRvciwg Rm9ya051bWJlciBmb3JrTnVtLAogQnVmZmVyCiBFeHRlbmRCdWZmZXJlZFJlbChCdWZmZXJN YW5hZ2VyUmVsYXRpb24gYm1yLAogCQkJCSAgRm9ya051bWJlciBmb3JrTnVtLAotCQkJCSAg QnVmZmVyQWNjZXNzU3RyYXRlZ3kgc3RyYXRlZ3ksCiAJCQkJICB1aW50MzIgZmxhZ3MpCiB7 CiAJQnVmZmVyCQlidWY7CiAJdWludDMyCQlleHRlbmRfYnkgPSAxOwogCi0JRXh0ZW5kQnVm ZmVyZWRSZWxCeShibXIsIGZvcmtOdW0sIHN0cmF0ZWd5LCBmbGFncywgZXh0ZW5kX2J5LAor CUV4dGVuZEJ1ZmZlcmVkUmVsQnkoYm1yLCBmb3JrTnVtLCBmbGFncywgZXh0ZW5kX2J5LAog CQkJCQkJJmJ1ZiwgJmV4dGVuZF9ieSk7CiAKIAlyZXR1cm4gYnVmOwpAQCAtMTAwMiw3ICs5 OTUsNiBAQCBFeHRlbmRCdWZmZXJlZFJlbChCdWZmZXJNYW5hZ2VyUmVsYXRpb24gYm1yLAog QmxvY2tOdW1iZXIKIEV4dGVuZEJ1ZmZlcmVkUmVsQnkoQnVmZmVyTWFuYWdlclJlbGF0aW9u IGJtciwKIAkJCQkJRm9ya051bWJlciBmb3JrLAotCQkJCQlCdWZmZXJBY2Nlc3NTdHJhdGVn eSBzdHJhdGVneSwKIAkJCQkJdWludDMyIGZsYWdzLAogCQkJCQl1aW50MzIgZXh0ZW5kX2J5 LAogCQkJCQlCdWZmZXIgKmJ1ZmZlcnMsCkBAIC0xMDE1LDcgKzEwMDcsNyBAQCBFeHRlbmRC dWZmZXJlZFJlbEJ5KEJ1ZmZlck1hbmFnZXJSZWxhdGlvbiBibXIsCiAJaWYgKGJtci5yZWxw ZXJzaXN0ZW5jZSA9PSAnXDAnKQogCQlibXIucmVscGVyc2lzdGVuY2UgPSBibXIucmVsLT5y ZF9yZWwtPnJlbHBlcnNpc3RlbmNlOwogCi0JcmV0dXJuIEV4dGVuZEJ1ZmZlcmVkUmVsQ29t bW9uKGJtciwgZm9yaywgc3RyYXRlZ3ksIGZsYWdzLAorCXJldHVybiBFeHRlbmRCdWZmZXJl ZFJlbENvbW1vbihibXIsIGZvcmssIGZsYWdzLAogCQkJCQkJCQkgICBleHRlbmRfYnksIElu dmFsaWRCbG9ja051bWJlciwKIAkJCQkJCQkJICAgYnVmZmVycywgZXh0ZW5kZWRfYnkpOwog fQpAQCAtMTAzMSw3ICsxMDIzLDYgQEAgRXh0ZW5kQnVmZmVyZWRSZWxCeShCdWZmZXJNYW5h Z2VyUmVsYXRpb24gYm1yLAogQnVmZmVyCiBFeHRlbmRCdWZmZXJlZFJlbFRvKEJ1ZmZlck1h bmFnZXJSZWxhdGlvbiBibXIsCiAJCQkJCUZvcmtOdW1iZXIgZm9yaywKLQkJCQkJQnVmZmVy QWNjZXNzU3RyYXRlZ3kgc3RyYXRlZ3ksCiAJCQkJCXVpbnQzMiBmbGFncywKIAkJCQkJQmxv Y2tOdW1iZXIgZXh0ZW5kX3RvLAogCQkJCQlSZWFkQnVmZmVyTW9kZSBtb2RlKQpAQCAtMTA5 Nyw3ICsxMDg4LDcgQEAgRXh0ZW5kQnVmZmVyZWRSZWxUbyhCdWZmZXJNYW5hZ2VyUmVsYXRp b24gYm1yLAogCQlpZiAoKHVpbnQ2NCkgY3VycmVudF9zaXplICsgbnVtX3BhZ2VzID4gZXh0 ZW5kX3RvKQogCQkJbnVtX3BhZ2VzID0gZXh0ZW5kX3RvIC0gY3VycmVudF9zaXplOwogCi0J CWZpcnN0X2Jsb2NrID0gRXh0ZW5kQnVmZmVyZWRSZWxDb21tb24oYm1yLCBmb3JrLCBzdHJh dGVneSwgZmxhZ3MsCisJCWZpcnN0X2Jsb2NrID0gRXh0ZW5kQnVmZmVyZWRSZWxDb21tb24o Ym1yLCBmb3JrLCBmbGFncywKIAkJCQkJCQkJCQkJICBudW1fcGFnZXMsIGV4dGVuZF90bywK IAkJCQkJCQkJCQkJICBidWZmZXJzLCAmZXh0ZW5kZWRfYnkpOwogCkBAIC0xMTIzLDcgKzEx MTQsNyBAQCBFeHRlbmRCdWZmZXJlZFJlbFRvKEJ1ZmZlck1hbmFnZXJSZWxhdGlvbiBibXIs CiAJewogCQlBc3NlcnQoZXh0ZW5kZWRfYnkgPT0gMCk7CiAJCWJ1ZmZlciA9IFJlYWRCdWZm ZXJfY29tbW9uKGJtci5yZWwsIEJNUl9HRVRfU01HUihibXIpLCBibXIucmVscGVyc2lzdGVu Y2UsCi0JCQkJCQkJCSAgIGZvcmssIGV4dGVuZF90byAtIDEsIG1vZGUsIHN0cmF0ZWd5KTsK KwkJCQkJCQkJICAgZm9yaywgZXh0ZW5kX3RvIC0gMSwgbW9kZSk7CiAJfQogCiAJcmV0dXJu IGJ1ZmZlcjsKQEAgLTEyMjYsNyArMTIxNyw2IEBAIFBpbkJ1ZmZlckZvckJsb2NrKFJlbGF0 aW9uIHJlbCwKIAkJCQkgIGNoYXIgcGVyc2lzdGVuY2UsCiAJCQkJICBGb3JrTnVtYmVyIGZv cmtOdW0sCiAJCQkJICBCbG9ja051bWJlciBibG9ja051bSwKLQkJCQkgIEJ1ZmZlckFjY2Vz c1N0cmF0ZWd5IHN0cmF0ZWd5LAogCQkJCSAgSU9PYmplY3QgaW9fb2JqZWN0LAogCQkJCSAg SU9Db250ZXh0IGlvX2NvbnRleHQsCiAJCQkJICBib29sICpmb3VuZFB0cikKQEAgLTEyNTAs NyArMTI0MCw3IEBAIFBpbkJ1ZmZlckZvckJsb2NrKFJlbGF0aW9uIHJlbCwKIAkJYnVmSGRy ID0gTG9jYWxCdWZmZXJBbGxvYyhzbWdyLCBmb3JrTnVtLCBibG9ja051bSwgZm91bmRQdHIp OwogCWVsc2UKIAkJYnVmSGRyID0gQnVmZmVyQWxsb2Moc21nciwgcGVyc2lzdGVuY2UsIGZv cmtOdW0sIGJsb2NrTnVtLAotCQkJCQkJCSBzdHJhdGVneSwgZm91bmRQdHIsIGlvX2NvbnRl eHQpOworCQkJCQkJCSBmb3VuZFB0ciwgaW9fY29udGV4dCk7CiAKIAlpZiAoKmZvdW5kUHRy KQogCQlUcmFja0J1ZmZlckhpdChpb19vYmplY3QsIGlvX2NvbnRleHQsIHJlbCwgcGVyc2lz dGVuY2UsIHNtZ3IsIGZvcmtOdW0sIGJsb2NrTnVtKTsKQEAgLTEyNzYsOCArMTI2Niw3IEBA IFBpbkJ1ZmZlckZvckJsb2NrKFJlbGF0aW9uIHJlbCwKIHN0YXRpYyBwZ19hdHRyaWJ1dGVf YWx3YXlzX2lubGluZSBCdWZmZXIKIFJlYWRCdWZmZXJfY29tbW9uKFJlbGF0aW9uIHJlbCwg U01nclJlbGF0aW9uIHNtZ3IsIGNoYXIgc21ncl9wZXJzaXN0ZW5jZSwKIAkJCQkgIEZvcmtO dW1iZXIgZm9ya051bSwKLQkJCQkgIEJsb2NrTnVtYmVyIGJsb2NrTnVtLCBSZWFkQnVmZmVy TW9kZSBtb2RlLAotCQkJCSAgQnVmZmVyQWNjZXNzU3RyYXRlZ3kgc3RyYXRlZ3kpCisJCQkJ ICBCbG9ja051bWJlciBibG9ja051bSwgUmVhZEJ1ZmZlck1vZGUgbW9kZSkKIHsKIAlSZWFk QnVmZmVyc09wZXJhdGlvbiBvcGVyYXRpb247CiAJQnVmZmVyCQlidWZmZXI7CkBAIC0xMzEz LDcgKzEzMDIsNyBAQCBSZWFkQnVmZmVyX2NvbW1vbihSZWxhdGlvbiByZWwsIFNNZ3JSZWxh dGlvbiBzbWdyLCBjaGFyIHNtZ3JfcGVyc2lzdGVuY2UsCiAJCWlmIChtb2RlID09IFJCTV9a RVJPX0FORF9MT0NLIHx8IG1vZGUgPT0gUkJNX1pFUk9fQU5EX0NMRUFOVVBfTE9DSykKIAkJ CWZsYWdzIHw9IEVCX0xPQ0tfRklSU1Q7CiAKLQkJcmV0dXJuIEV4dGVuZEJ1ZmZlcmVkUmVs KEJNUl9SRUwocmVsKSwgZm9ya051bSwgc3RyYXRlZ3ksIGZsYWdzKTsKKwkJcmV0dXJuIEV4 dGVuZEJ1ZmZlcmVkUmVsKEJNUl9SRUwocmVsKSwgZm9ya051bSwgZmxhZ3MpOwogCX0KIAog CWlmIChyZWwpCkBAIC0xMzM1LDEyICsxMzI0LDEyIEBAIFJlYWRCdWZmZXJfY29tbW9uKFJl bGF0aW9uIHJlbCwgU01nclJlbGF0aW9uIHNtZ3IsIGNoYXIgc21ncl9wZXJzaXN0ZW5jZSwK IAkJfQogCQllbHNlCiAJCXsKLQkJCWlvX2NvbnRleHQgPSBJT0NvbnRleHRGb3JTdHJhdGVn eShzdHJhdGVneSk7CisJCQlpb19jb250ZXh0ID0gSU9DT05URVhUX05PUk1BTDsKIAkJCWlv X29iamVjdCA9IElPT0JKRUNUX1JFTEFUSU9OOwogCQl9CiAKIAkJYnVmZmVyID0gUGluQnVm ZmVyRm9yQmxvY2socmVsLCBzbWdyLCBwZXJzaXN0ZW5jZSwKLQkJCQkJCQkJICAgZm9ya051 bSwgYmxvY2tOdW0sIHN0cmF0ZWd5LAorCQkJCQkJCQkgICBmb3JrTnVtLCBibG9ja051bSwK IAkJCQkJCQkJICAgaW9fb2JqZWN0LCBpb19jb250ZXh0LCAmZm91bmQpOwogCQlaZXJvQW5k TG9ja0J1ZmZlcihidWZmZXIsIG1vZGUsIGZvdW5kKTsKIAkJcmV0dXJuIGJ1ZmZlcjsKQEAg LTEzNTgsNyArMTM0Nyw2IEBAIFJlYWRCdWZmZXJfY29tbW9uKFJlbGF0aW9uIHJlbCwgU01n clJlbGF0aW9uIHNtZ3IsIGNoYXIgc21ncl9wZXJzaXN0ZW5jZSwKIAlvcGVyYXRpb24ucmVs ID0gcmVsOwogCW9wZXJhdGlvbi5wZXJzaXN0ZW5jZSA9IHBlcnNpc3RlbmNlOwogCW9wZXJh dGlvbi5mb3JrbnVtID0gZm9ya051bTsKLQlvcGVyYXRpb24uc3RyYXRlZ3kgPSBzdHJhdGVn eTsKIAlpZiAoU3RhcnRSZWFkQnVmZmVyKCZvcGVyYXRpb24sCiAJCQkJCQkmYnVmZmVyLAog CQkJCQkJYmxvY2tOdW0sCkBAIC0xMzk5LDcgKzEzODcsNyBAQCBTdGFydFJlYWRCdWZmZXJz SW1wbChSZWFkQnVmZmVyc09wZXJhdGlvbiAqb3BlcmF0aW9uLAogCX0KIAllbHNlCiAJewot CQlpb19jb250ZXh0ID0gSU9Db250ZXh0Rm9yU3RyYXRlZ3kob3BlcmF0aW9uLT5zdHJhdGVn eSk7CisJCWlvX2NvbnRleHQgPSBJT0NPTlRFWFRfTk9STUFMOwogCQlpb19vYmplY3QgPSBJ T09CSkVDVF9SRUxBVElPTjsKIAl9CiAKQEAgLTE0NTAsNyArMTQzOCw2IEBAIFN0YXJ0UmVh ZEJ1ZmZlcnNJbXBsKFJlYWRCdWZmZXJzT3BlcmF0aW9uICpvcGVyYXRpb24sCiAJCQkJCQkJ CQkJICAgb3BlcmF0aW9uLT5wZXJzaXN0ZW5jZSwKIAkJCQkJCQkJCQkgICBvcGVyYXRpb24t PmZvcmtudW0sCiAJCQkJCQkJCQkJICAgYmxvY2tOdW0gKyBpLAotCQkJCQkJCQkJCSAgIG9w ZXJhdGlvbi0+c3RyYXRlZ3ksCiAJCQkJCQkJCQkJICAgaW9fb2JqZWN0LCBpb19jb250ZXh0 LAogCQkJCQkJCQkJCSAgICZmb3VuZCk7CiAJCX0KQEAgLTE3NzEsNyArMTc1OCw3IEBAIFdh aXRSZWFkQnVmZmVycyhSZWFkQnVmZmVyc09wZXJhdGlvbiAqb3BlcmF0aW9uKQogCX0KIAll bHNlCiAJewotCQlpb19jb250ZXh0ID0gSU9Db250ZXh0Rm9yU3RyYXRlZ3kob3BlcmF0aW9u LT5zdHJhdGVneSk7CisJCWlvX2NvbnRleHQgPSBJT0NPTlRFWFRfTk9STUFMOwogCQlpb19v YmplY3QgPSBJT09CSkVDVF9SRUxBVElPTjsKIAl9CiAKQEAgLTE5NjEsNyArMTk0OCw3IEBA IEFzeW5jUmVhZEJ1ZmZlcnMoUmVhZEJ1ZmZlcnNPcGVyYXRpb24gKm9wZXJhdGlvbiwgaW50 ICpuYmxvY2tzX3Byb2dyZXNzKQogCX0KIAllbHNlCiAJewotCQlpb19jb250ZXh0ID0gSU9D b250ZXh0Rm9yU3RyYXRlZ3kob3BlcmF0aW9uLT5zdHJhdGVneSk7CisJCWlvX2NvbnRleHQg PSBJT0NPTlRFWFRfTk9STUFMOwogCQlpb19vYmplY3QgPSBJT09CSkVDVF9SRUxBVElPTjsK IAl9CiAKQEAgLTIxODAsMjQgKzIxNjcsMTggQEAgQXN5bmNSZWFkQnVmZmVycyhSZWFkQnVm ZmVyc09wZXJhdGlvbiAqb3BlcmF0aW9uLCBpbnQgKm5ibG9ja3NfcHJvZ3Jlc3MpCiAgKgkJ YnVmZmVyLiAgSWYgbm8gYnVmZmVyIGV4aXN0cyBhbHJlYWR5LCBzZWxlY3RzIGEgcmVwbGFj ZW1lbnQgdmljdGltIGFuZAogICoJCWV2aWN0cyB0aGUgb2xkIHBhZ2UsIGJ1dCBkb2VzIE5P VCByZWFkIGluIG5ldyBwYWdlLgogICoKLSAqICJzdHJhdGVneSIgY2FuIGJlIGEgYnVmZmVy IHJlcGxhY2VtZW50IHN0cmF0ZWd5IG9iamVjdCwgb3IgTlVMTCBmb3IKLSAqIHRoZSBkZWZh dWx0IHN0cmF0ZWd5LiAgVGhlIHNlbGVjdGVkIGJ1ZmZlcidzIHVzYWdlX2NvdW50IGlzIGFk dmFuY2VkIHdoZW4KLSAqIHVzaW5nIHRoZSBkZWZhdWx0IHN0cmF0ZWd5LCBidXQgb3RoZXJ3 aXNlIHBvc3NpYmx5IG5vdCAoc2VlIFBpbkJ1ZmZlcikuCi0gKgogICogVGhlIHJldHVybmVk IGJ1ZmZlciBpcyBwaW5uZWQgYW5kIGlzIGFscmVhZHkgbWFya2VkIGFzIGhvbGRpbmcgdGhl CiAgKiBkZXNpcmVkIHBhZ2UuICBJZiBpdCBhbHJlYWR5IGRpZCBoYXZlIHRoZSBkZXNpcmVk IHBhZ2UsICpmb3VuZFB0ciBpcwogICogc2V0IHRydWUuICBPdGhlcndpc2UsICpmb3VuZFB0 ciBpcyBzZXQgZmFsc2UuCiAgKgotICogaW9fY29udGV4dCBpcyBwYXNzZWQgYXMgYW4gb3V0 cHV0IHBhcmFtZXRlciB0byBhdm9pZCBjYWxsaW5nCi0gKiBJT0NvbnRleHRGb3JTdHJhdGVn eSgpIHdoZW4gdGhlcmUgaXMgYSBzaGFyZWQgYnVmZmVycyBoaXQgYW5kIG5vIElPCi0gKiBz dGF0aXN0aWNzIG5lZWQgYmUgY2FwdHVyZWQuCisgKiBpb19jb250ZXh0IGlzIHBhc3NlZCBh cyBhbiBvdXRwdXQgcGFyYW1ldGVyIHRvIGF2b2lkIGNhcHR1cmluZyBJTworICogc3RhdGlz dGljcyB3aGVuIHRoZXJlIGlzIGEgc2hhcmVkIGJ1ZmZlcnMgaGl0IGFuZCBubyBJTyBvY2N1 cnMuCiAgKgogICogTm8gbG9ja3MgYXJlIGhlbGQgZWl0aGVyIGF0IGVudHJ5IG9yIGV4aXQu CiAgKi8KIHN0YXRpYyBwZ19hdHRyaWJ1dGVfYWx3YXlzX2lubGluZSBCdWZmZXJEZXNjICoK IEJ1ZmZlckFsbG9jKFNNZ3JSZWxhdGlvbiBzbWdyLCBjaGFyIHJlbHBlcnNpc3RlbmNlLCBG b3JrTnVtYmVyIGZvcmtOdW0sCiAJCQlCbG9ja051bWJlciBibG9ja051bSwKLQkJCUJ1ZmZl ckFjY2Vzc1N0cmF0ZWd5IHN0cmF0ZWd5LAogCQkJYm9vbCAqZm91bmRQdHIsIElPQ29udGV4 dCBpb19jb250ZXh0KQogewogCUJ1ZmZlclRhZwluZXdUYWc7CQkJLyogaWRlbnRpdHkgb2Yg cmVxdWVzdGVkIGJsb2NrICovCkBAIC0yMjM1LDcgKzIyMTYsNyBAQCBCdWZmZXJBbGxvYyhT TWdyUmVsYXRpb24gc21nciwgY2hhciByZWxwZXJzaXN0ZW5jZSwgRm9ya051bWJlciBmb3Jr TnVtLAogCQkgKi8KIAkJYnVmID0gR2V0QnVmZmVyRGVzY3JpcHRvcihleGlzdGluZ19idWZf aWQpOwogCi0JCXZhbGlkID0gUGluQnVmZmVyKGJ1Ziwgc3RyYXRlZ3ksIGZhbHNlKTsKKwkJ dmFsaWQgPSBQaW5CdWZmZXIoYnVmLCBmYWxzZSk7CiAKIAkJLyogQ2FuIHJlbGVhc2UgdGhl IG1hcHBpbmcgbG9jayBhcyBzb29uIGFzIHdlJ3ZlIHBpbm5lZCBpdCAqLwogCQlMV0xvY2tS ZWxlYXNlKG5ld1BhcnRpdGlvbkxvY2spOwpAQCAtMjI2Niw3ICsyMjQ3LDcgQEAgQnVmZmVy QWxsb2MoU01nclJlbGF0aW9uIHNtZ3IsIGNoYXIgcmVscGVyc2lzdGVuY2UsIEZvcmtOdW1i ZXIgZm9ya051bSwKIAkgKiBkb24ndCBob2xkIGFueSBjb25mbGljdGluZyBsb2Nrcy4gSWYg c28gd2UnbGwgaGF2ZSB0byB1bmRvIG91ciB3b3JrCiAJICogbGF0ZXIuCiAJICovCi0Jdmlj dGltX2J1ZmZlciA9IEdldFZpY3RpbUJ1ZmZlcihzdHJhdGVneSwgaW9fY29udGV4dCk7CisJ dmljdGltX2J1ZmZlciA9IEdldFZpY3RpbUJ1ZmZlcihpb19jb250ZXh0KTsKIAl2aWN0aW1f YnVmX2hkciA9IEdldEJ1ZmZlckRlc2NyaXB0b3IodmljdGltX2J1ZmZlciAtIDEpOwogCiAJ LyoKQEAgLTIyOTcsNyArMjI3OCw3IEBAIEJ1ZmZlckFsbG9jKFNNZ3JSZWxhdGlvbiBzbWdy LCBjaGFyIHJlbHBlcnNpc3RlbmNlLCBGb3JrTnVtYmVyIGZvcmtOdW0sCiAKIAkJZXhpc3Rp bmdfYnVmX2hkciA9IEdldEJ1ZmZlckRlc2NyaXB0b3IoZXhpc3RpbmdfYnVmX2lkKTsKIAot CQl2YWxpZCA9IFBpbkJ1ZmZlcihleGlzdGluZ19idWZfaGRyLCBzdHJhdGVneSwgZmFsc2Up OworCQl2YWxpZCA9IFBpbkJ1ZmZlcihleGlzdGluZ19idWZfaGRyLCBmYWxzZSk7CiAKIAkJ LyogQ2FuIHJlbGVhc2UgdGhlIG1hcHBpbmcgbG9jayBhcyBzb29uIGFzIHdlJ3ZlIHBpbm5l ZCBpdCAqLwogCQlMV0xvY2tSZWxlYXNlKG5ld1BhcnRpdGlvbkxvY2spOwpAQCAtMjMzNSw5 ICsyMzE2LDEyIEBAIEJ1ZmZlckFsbG9jKFNNZ3JSZWxhdGlvbiBzbWdyLCBjaGFyIHJlbHBl cnNpc3RlbmNlLCBGb3JrTnVtYmVyIGZvcmtOdW0sCiAJICoganVzdCBsaWtlIHBlcm1hbmVu dCByZWxhdGlvbnMuCiAJICovCiAJc2V0X2JpdHMgfD0gQk1fVEFHX1ZBTElEOwotCS8qIEFk bWl0IHRoZSBuZXdseSBsb2FkZWQgcGFnZSBDT09MIChwcm9iYXRpb24pOyBhIHNlY29uZCBh Y2Nlc3MgdmlhCisKKwkvKgorCSAqIEFkbWl0IHRoZSBuZXdseSBsb2FkZWQgcGFnZSBDT09M IChwcm9iYXRpb24pOyBhIHNlY29uZCBhY2Nlc3MgdmlhCiAJICogUGluQnVmZmVyIHByb21v dGVzIGl0IHRvIEhPVC4gIFRoaXMgaXMgd2hhdCBtYWtlcyBhIG9uZS10b3VjaCBzY2FuCi0J ICogc2VsZi1ldmljdGluZyAtLSBzZWUgdGhlIGNvb2xpbmctc3RhdGUgbm90ZXMgaW4gYnVm X2ludGVybmFscy5oLiAqLworCSAqIHNlbGYtZXZpY3RpbmcgLS0gc2VlIHRoZSBjb29saW5n LXN0YXRlIG5vdGVzIGluIGJ1Zl9pbnRlcm5hbHMuaC4KKwkgKi8KIAlpZiAocmVscGVyc2lz dGVuY2UgPT0gUkVMUEVSU0lTVEVOQ0VfUEVSTUFORU5UIHx8IGZvcmtOdW0gPT0gSU5JVF9G T1JLTlVNKQogCQlzZXRfYml0cyB8PSBCTV9QRVJNQU5FTlQ7CiAKQEAgLTI1NDksMTIgKzI1 MzMsMTEgQEAgSW52YWxpZGF0ZVZpY3RpbUJ1ZmZlcihCdWZmZXJEZXNjICpidWZfaGRyKQog fQogCiBzdGF0aWMgQnVmZmVyCi1HZXRWaWN0aW1CdWZmZXIoQnVmZmVyQWNjZXNzU3RyYXRl Z3kgc3RyYXRlZ3ksIElPQ29udGV4dCBpb19jb250ZXh0KQorR2V0VmljdGltQnVmZmVyKElP Q29udGV4dCBpb19jb250ZXh0KQogewogCUJ1ZmZlckRlc2MgKmJ1Zl9oZHI7CiAJQnVmZmVy CQlidWY7CiAJdWludDY0CQlidWZfc3RhdGU7Ci0JYm9vbAkJZnJvbV9yaW5nOwogCiAJLyoK IAkgKiBFbnN1cmUsIGJlZm9yZSB3ZSBwaW4gYSB2aWN0aW0gYnVmZmVyLCB0aGF0IHRoZXJl J3MgYSBmcmVlIHJlZmNvdW50CkBAIC0yNTcwLDcgKzI1NTMsNyBAQCBhZ2FpbjoKIAkgKiBT ZWxlY3QgYSB2aWN0aW0gYnVmZmVyLiAgVGhlIGJ1ZmZlciBpcyByZXR1cm5lZCBwaW5uZWQg YW5kIG93bmVkIGJ5CiAJICogdGhpcyBiYWNrZW5kLgogCSAqLwotCWJ1Zl9oZHIgPSBTdHJh dGVneUdldEJ1ZmZlcihzdHJhdGVneSwgJmJ1Zl9zdGF0ZSwgJmZyb21fcmluZyk7CisJYnVm X2hkciA9IFN0cmF0ZWd5R2V0QnVmZmVyKCZidWZfc3RhdGUpOwogCWJ1ZiA9IEJ1ZmZlckRl c2NyaXB0b3JHZXRCdWZmZXIoYnVmX2hkcik7CiAKIAkvKgpAQCAtMjYxNCwyNiArMjU5Nyw2 IEBAIGFnYWluOgogCQkJZ290byBhZ2FpbjsKIAkJfQogCi0JCS8qCi0JCSAqIElmIHVzaW5n IGEgbm9uZGVmYXVsdCBzdHJhdGVneSwgYW5kIHRoaXMgdmljdGltIGNhbWUgZnJvbSB0aGUK LQkJICogc3RyYXRlZ3kgcmluZywgbGV0IHRoZSBzdHJhdGVneSBkZWNpZGUgd2hldGhlciB0 byByZWplY3QgaXQgd2hlbgotCQkgKiByZXVzaW5nIGl0IHdvdWxkIHJlcXVpcmUgYSBXQUwg Zmx1c2guICBUaGlzIG9ubHkgYXBwbGllcyB0bwotCQkgKiBwZXJtYW5lbnQgYnVmZmVyczsg dW5sb2dnZWQgYnVmZmVycyBjYW4gaGF2ZSBmYWtlIExTTnMsIHNvCi0JCSAqIFhMb2dOZWVk c0ZsdXNoKCkgaXMgbm90IG1lYW5pbmdmdWwgZm9yIHRoZW0uCi0JCSAqCi0JCSAqIFdlIG5l ZWQgdG8gaG9sZCB0aGUgY29udGVudCBsb2NrIGluIGF0IGxlYXN0IHNoYXJlLWV4Y2x1c2l2 ZSBtb2RlCi0JCSAqIHRvIHNhZmVseSBpbnNwZWN0IHRoZSBwYWdlIExTTiwgc28gdGhpcyBj b3VsZG4ndCBoYXZlIGJlZW4gZG9uZQotCQkgKiBpbnNpZGUgU3RyYXRlZ3lHZXRCdWZmZXIo KS4KLQkJICovCi0JCWlmIChzdHJhdGVneSAmJiBmcm9tX3JpbmcgJiYKLQkJCWJ1Zl9zdGF0 ZSAmIEJNX1BFUk1BTkVOVCAmJgotCQkJWExvZ05lZWRzRmx1c2goQnVmZmVyR2V0TFNOKGJ1 Zl9oZHIpKSAmJgotCQkJU3RyYXRlZ3lSZWplY3RCdWZmZXIoc3RyYXRlZ3ksIGJ1Zl9oZHIs IGZyb21fcmluZykpCi0JCXsKLQkJCVVubG9ja1JlbGVhc2VCdWZmZXIoYnVmKTsKLQkJCWdv dG8gYWdhaW47Ci0JCX0KLQogCQkvKiBPSywgZG8gdGhlIEkvTyAqLwogCQlGbHVzaEJ1ZmZl cihidWZfaGRyLCBOVUxMLCBJT09CSkVDVF9SRUxBVElPTiwgaW9fY29udGV4dCk7CiAJCUxv Y2tCdWZmZXIoYnVmLCBCVUZGRVJfTE9DS19VTkxPQ0spOwpAQCAtMjY0NiwyMyArMjYwOSwx NSBAQCBhZ2FpbjoKIAlpZiAoYnVmX3N0YXRlICYgQk1fVkFMSUQpCiAJewogCQkvKgotCQkg KiBXaGVuIGEgQnVmZmVyQWNjZXNzU3RyYXRlZ3kgaXMgaW4gdXNlLCBibG9ja3MgZXZpY3Rl ZCBmcm9tIHNoYXJlZAotCQkgKiBidWZmZXJzIGFyZSBjb3VudGVkIGFzIElPT1BfRVZJQ1Qg aW4gdGhlIGNvcnJlc3BvbmRpbmcgY29udGV4dAotCQkgKiAoZS5nLiBJT0NPTlRFWFRfQlVM S1dSSVRFKS4gU2hhcmVkIGJ1ZmZlcnMgYXJlIGV2aWN0ZWQgYnkgYQotCQkgKiBzdHJhdGVn eSBpbiB0d28gY2FzZXM6IDEpIHdoaWxlIGluaXRpYWxseSBjbGFpbWluZyBidWZmZXJzIGZv ciB0aGUKLQkJICogc3RyYXRlZ3kgcmluZyAyKSB0byByZXBsYWNlIGFuIGV4aXN0aW5nIHN0 cmF0ZWd5IHJpbmcgYnVmZmVyCi0JCSAqIGJlY2F1c2UgaXQgaXMgcGlubmVkIG9yIGluIHVz ZSBhbmQgY2Fubm90IGJlIHJldXNlZC4KKwkJICogQmxvY2tzIGV2aWN0ZWQgZnJvbSBzaGFy ZWQgYnVmZmVycyBhcmUgY291bnRlZCBhcyBJT09QX0VWSUNULgogCQkgKgotCQkgKiBCbG9j a3MgZXZpY3RlZCBmcm9tIGJ1ZmZlcnMgYWxyZWFkeSBpbiB0aGUgc3RyYXRlZ3kgcmluZyBh cmUKLQkJICogY291bnRlZCBhcyBJT09QX1JFVVNFIGluIHRoZSBjb3JyZXNwb25kaW5nIHN0 cmF0ZWd5IGNvbnRleHQuCi0JCSAqCi0JCSAqIEF0IHRoaXMgcG9pbnQsIHdlIGNhbiBhY2N1 cmF0ZWx5IGNvdW50IGV2aWN0aW9ucyBhbmQgcmV1c2VzLAotCQkgKiBiZWNhdXNlIHdlIGhh dmUgc3VjY2Vzc2Z1bGx5IGNsYWltZWQgdGhlIHZhbGlkIGJ1ZmZlci4gUHJldmlvdXNseSwK LQkJICogd2UgbWF5IGhhdmUgYmVlbiBmb3JjZWQgdG8gcmVsZWFzZSB0aGUgYnVmZmVyIGR1 ZSB0byBjb25jdXJyZW50Ci0JCSAqIHBpbm5lcnMgb3IgZXJyb3Jpbmcgb3V0LgorCQkgKiBB dCB0aGlzIHBvaW50LCB3ZSBjYW4gYWNjdXJhdGVseSBjb3VudCBldmljdGlvbnMsIGJlY2F1 c2Ugd2UgaGF2ZQorCQkgKiBzdWNjZXNzZnVsbHkgY2xhaW1lZCB0aGUgdmFsaWQgYnVmZmVy LiBQcmV2aW91c2x5LCB3ZSBtYXkgaGF2ZSBiZWVuCisJCSAqIGZvcmNlZCB0byByZWxlYXNl IHRoZSBidWZmZXIgZHVlIHRvIGNvbmN1cnJlbnQgcGlubmVycyBvciBlcnJvcmluZworCQkg KiBvdXQuCiAJCSAqLwogCQlwZ3N0YXRfY291bnRfaW9fb3AoSU9PQkpFQ1RfUkVMQVRJT04s IGlvX2NvbnRleHQsCi0JCQkJCQkgICBmcm9tX3JpbmcgPyBJT09QX1JFVVNFIDogSU9PUF9F VklDVCwgMSwgMCk7CisJCQkJCQkgICBJT09QX0VWSUNULCAxLCAwKTsKIAl9CiAKIAkvKgpA QCAtMjc1NCw3ICsyNzA5LDYgQEAgTGltaXRBZGRpdGlvbmFsUGlucyh1aW50MzIgKmFkZGl0 aW9uYWxfcGlucykKIHN0YXRpYyBCbG9ja051bWJlcgogRXh0ZW5kQnVmZmVyZWRSZWxDb21t b24oQnVmZmVyTWFuYWdlclJlbGF0aW9uIGJtciwKIAkJCQkJCUZvcmtOdW1iZXIgZm9yaywK LQkJCQkJCUJ1ZmZlckFjY2Vzc1N0cmF0ZWd5IHN0cmF0ZWd5LAogCQkJCQkJdWludDMyIGZs YWdzLAogCQkJCQkJdWludDMyIGV4dGVuZF9ieSwKIAkJCQkJCUJsb2NrTnVtYmVyIGV4dGVu ZF91cHRvLApAQCAtMjc4OSw3ICsyNzQzLDcgQEAgRXh0ZW5kQnVmZmVyZWRSZWxDb21tb24o QnVmZmVyTWFuYWdlclJlbGF0aW9uIGJtciwKIAkJCQkJCQkJCQkJIGJ1ZmZlcnMsICZleHRl bmRfYnkpOwogCX0KIAllbHNlCi0JCWZpcnN0X2Jsb2NrID0gRXh0ZW5kQnVmZmVyZWRSZWxT aGFyZWQoYm1yLCBmb3JrLCBzdHJhdGVneSwgZmxhZ3MsCisJCWZpcnN0X2Jsb2NrID0gRXh0 ZW5kQnVmZmVyZWRSZWxTaGFyZWQoYm1yLCBmb3JrLCBmbGFncywKIAkJCQkJCQkJCQkJICBl eHRlbmRfYnksIGV4dGVuZF91cHRvLAogCQkJCQkJCQkJCQkgIGJ1ZmZlcnMsICZleHRlbmRf YnkpOwogCSpleHRlbmRlZF9ieSA9IGV4dGVuZF9ieTsKQEAgLTI4MTIsNyArMjc2Niw2IEBA IEV4dGVuZEJ1ZmZlcmVkUmVsQ29tbW9uKEJ1ZmZlck1hbmFnZXJSZWxhdGlvbiBibXIsCiBz dGF0aWMgQmxvY2tOdW1iZXIKIEV4dGVuZEJ1ZmZlcmVkUmVsU2hhcmVkKEJ1ZmZlck1hbmFn ZXJSZWxhdGlvbiBibXIsCiAJCQkJCQlGb3JrTnVtYmVyIGZvcmssCi0JCQkJCQlCdWZmZXJB Y2Nlc3NTdHJhdGVneSBzdHJhdGVneSwKIAkJCQkJCXVpbnQzMiBmbGFncywKIAkJCQkJCXVp bnQzMiBleHRlbmRfYnksCiAJCQkJCQlCbG9ja051bWJlciBleHRlbmRfdXB0bywKQEAgLTI4 MjAsNyArMjc3Myw3IEBAIEV4dGVuZEJ1ZmZlcmVkUmVsU2hhcmVkKEJ1ZmZlck1hbmFnZXJS ZWxhdGlvbiBibXIsCiAJCQkJCQl1aW50MzIgKmV4dGVuZGVkX2J5KQogewogCUJsb2NrTnVt YmVyIGZpcnN0X2Jsb2NrOwotCUlPQ29udGV4dAlpb19jb250ZXh0ID0gSU9Db250ZXh0Rm9y U3RyYXRlZ3koc3RyYXRlZ3kpOworCUlPQ29udGV4dAlpb19jb250ZXh0ID0gSU9DT05URVhU X05PUk1BTDsKIAlpbnN0cl90aW1lCWlvX3N0YXJ0OwogCiAJTGltaXRBZGRpdGlvbmFsUGlu cygmZXh0ZW5kX2J5KTsKQEAgLTI4MzksNyArMjc5Miw3IEBAIEV4dGVuZEJ1ZmZlcmVkUmVs U2hhcmVkKEJ1ZmZlck1hbmFnZXJSZWxhdGlvbiBibXIsCiAJewogCQlCbG9jawkJYnVmX2Js b2NrOwogCi0JCWJ1ZmZlcnNbaV0gPSBHZXRWaWN0aW1CdWZmZXIoc3RyYXRlZ3ksIGlvX2Nv bnRleHQpOworCQlidWZmZXJzW2ldID0gR2V0VmljdGltQnVmZmVyKGlvX2NvbnRleHQpOwog CQlidWZfYmxvY2sgPSBCdWZIZHJHZXRCbG9jayhHZXRCdWZmZXJEZXNjcmlwdG9yKGJ1ZmZl cnNbaV0gLSAxKSk7CiAKIAkJLyogbmV3IGJ1ZmZlcnMgYXJlIHplcm8tZmlsbGVkICovCkBA IC0yOTU3LDcgKzI5MTAsNyBAQCBFeHRlbmRCdWZmZXJlZFJlbFNoYXJlZChCdWZmZXJNYW5h Z2VyUmVsYXRpb24gYm1yLAogCQkJICogUGluIHRoZSBleGlzdGluZyBidWZmZXIgYmVmb3Jl IHJlbGVhc2luZyB0aGUgcGFydGl0aW9uIGxvY2ssCiAJCQkgKiBwcmV2ZW50aW5nIGl0IGZy b20gYmVpbmcgZXZpY3RlZC4KIAkJCSAqLwotCQkJdmFsaWQgPSBQaW5CdWZmZXIoZXhpc3Rp bmdfaGRyLCBzdHJhdGVneSwgZmFsc2UpOworCQkJdmFsaWQgPSBQaW5CdWZmZXIoZXhpc3Rp bmdfaGRyLCBmYWxzZSk7CiAKIAkJCUxXTG9ja1JlbGVhc2UocGFydGl0aW9uX2xvY2spOwog CQkJVW5waW5CdWZmZXIodmljdGltX2J1Zl9oZHIpOwpAQCAtMzAwNyw4ICsyOTYwLDExIEBA IEV4dGVuZEJ1ZmZlcmVkUmVsU2hhcmVkKEJ1ZmZlck1hbmFnZXJSZWxhdGlvbiBibXIsCiAJ CQl2aWN0aW1fYnVmX2hkci0+dGFnID0gdGFnOwogCiAJCQlzZXRfYml0cyB8PSBCTV9UQUdf VkFMSUQ7Ci0JCQkvKiBBZG1pdCBDT09MIChwcm9iYXRpb24pOyBzZWUgdGhlIGNvbW1lbnQg YXQgdGhlIG90aGVyIGFkbWlzc2lvbgotCQkJICogc2l0ZSBhbmQgdGhlIGNvb2xpbmctc3Rh dGUgbm90ZXMgaW4gYnVmX2ludGVybmFscy5oLiAqLworCisJCQkvKgorCQkJICogQWRtaXQg Q09PTCAocHJvYmF0aW9uKTsgc2VlIHRoZSBjb21tZW50IGF0IHRoZSBvdGhlciBhZG1pc3Np b24KKwkJCSAqIHNpdGUgYW5kIHRoZSBjb29saW5nLXN0YXRlIG5vdGVzIGluIGJ1Zl9pbnRl cm5hbHMuaC4KKwkJCSAqLwogCQkJaWYgKGJtci5yZWxwZXJzaXN0ZW5jZSA9PSBSRUxQRVJT SVNURU5DRV9QRVJNQU5FTlQgfHwgZm9yayA9PSBJTklUX0ZPUktOVU0pCiAJCQkJc2V0X2Jp dHMgfD0gQk1fUEVSTUFORU5UOwogCkBAIC0zMjc1LDEzICszMjMxLDggQEAgUmVsZWFzZUFu ZFJlYWRCdWZmZXIoQnVmZmVyIGJ1ZmZlciwKIC8qCiAgKiBQaW5CdWZmZXIgLS0gbWFrZSBi dWZmZXIgdW5hdmFpbGFibGUgZm9yIHJlcGxhY2VtZW50LgogICoKLSAqIEZvciB0aGUgZGVm YXVsdCBhY2Nlc3Mgc3RyYXRlZ3ksIHRoZSBidWZmZXIncyB1c2FnZV9jb3VudCBpcyBpbmNy ZW1lbnRlZAotICogd2hlbiB3ZSBmaXJzdCBwaW4gaXQ7IGZvciBvdGhlciBzdHJhdGVnaWVz IHdlIGp1c3QgbWFrZSBzdXJlIHRoZSB1c2FnZV9jb3VudAotICogaXNuJ3QgemVyby4gIChU aGUgaWRlYSBvZiB0aGUgbGF0dGVyIGlzIHRoYXQgd2UgZG9uJ3Qgd2FudCBzeW5jaHJvbml6 ZWQKLSAqIGhlYXAgc2NhbnMgdG8gaW5mbGF0ZSB0aGUgY291bnQsIGJ1dCB3ZSBuZWVkIGl0 IHRvIG5vdCBiZSB6ZXJvIHRvIGRpc2NvdXJhZ2UKLSAqIG90aGVyIGJhY2tlbmRzIGZyb20g c3RlYWxpbmcgYnVmZmVycyBmcm9tIG91ciByaW5nLiAgQXMgbG9uZyBhcyB3ZSBjeWNsZQot ICogdGhyb3VnaCB0aGUgcmluZyBmYXN0ZXIgdGhhbiB0aGUgZ2xvYmFsIGNsb2NrLXN3ZWVw IGN5Y2xlcywgYnVmZmVycyBpbgotICogb3VyIHJpbmcgd29uJ3QgYmUgY2hvc2VuIGFzIHZp Y3RpbXMgZm9yIHJlcGxhY2VtZW50IGJ5IG90aGVyIGJhY2tlbmRzLikKKyAqIFRoZSBidWZm ZXIncyBjb29saW5nIHN0YXRlIGlzIHByb21vdGVkIHRvIEhPVCAodGhlIDJRIHJlc2N1ZSkg d2hlbiB3ZSBwaW4KKyAqIGl0OyBzZWUgdGhlIGNvb2xpbmctc3RhdGUgbm90ZXMgaW4gYnVm X2ludGVybmFscy5oLgogICoKICAqIFRoaXMgc2hvdWxkIGJlIGFwcGxpZWQgb25seSB0byBz aGFyZWQgYnVmZmVycywgbmV2ZXIgbG9jYWwgb25lcy4KICAqCkBAIC0zMjk4LDcgKzMyNDks NyBAQCBSZWxlYXNlQW5kUmVhZEJ1ZmZlcihCdWZmZXIgYnVmZmVyLAogICogKHJlY2VudGx5 KSBpbnZhbGlkIGFuZCBoYXMgbm90IGJlZW4gcGlubmVkLgogICovCiBzdGF0aWMgYm9vbAot UGluQnVmZmVyKEJ1ZmZlckRlc2MgKmJ1ZiwgQnVmZmVyQWNjZXNzU3RyYXRlZ3kgc3RyYXRl Z3ksCitQaW5CdWZmZXIoQnVmZmVyRGVzYyAqYnVmLAogCQkgIGJvb2wgc2tpcF9pZl9ub3Rf dmFsaWQpCiB7CiAJQnVmZmVyCQliID0gQnVmZmVyRGVzY3JpcHRvckdldEJ1ZmZlcihidWYp OwpAQCAtMzM5Niw3ICszMzQ3LDcgQEAgUGluQnVmZmVyKEJ1ZmZlckRlc2MgKmJ1ZiwgQnVm ZmVyQWNjZXNzU3RyYXRlZ3kgc3RyYXRlZ3ksCiAgKiBSZXNvdXJjZU93bmVyRW5sYXJnZShD dXJyZW50UmVzb3VyY2VPd25lcik7CiAgKgogICogQ3VycmVudGx5LCBubyBjYWxsZXJzIG9m IHRoaXMgZnVuY3Rpb24gd2FudCB0byBtb2RpZnkgdGhlIGJ1ZmZlcidzCi0gKiB1c2FnZV9j b3VudCBhdCBhbGwsIHNvIHRoZXJlJ3Mgbm8gbmVlZCBmb3IgYSBzdHJhdGVneSBwYXJhbWV0 ZXIuCisgKiBjb29saW5nIHN0YXRlIGF0IGFsbC4KICAqIEFsc28gd2UgZG9uJ3QgYm90aGVy IHdpdGggYSBCTV9WQUxJRCB0ZXN0ICh0aGUgY2FsbGVyIGNvdWxkIGNoZWNrIHRoYXQgZm9y CiAgKiBpdHNlbGYpLgogICoKQEAgLTQ2NTksMjIgKzQ2MTAsOCBAQCBGbHVzaEJ1ZmZlcihC dWZmZXJEZXNjICpidWYsIFNNZ3JSZWxhdGlvbiByZWxuLCBJT09iamVjdCBpb19vYmplY3Qs CiAJCQkgIGZhbHNlKTsKIAogCS8qCi0JICogV2hlbiBhIHN0cmF0ZWd5IGlzIGluIHVzZSwg b25seSBmbHVzaGVzIG9mIGRpcnR5IGJ1ZmZlcnMgYWxyZWFkeSBpbiB0aGUKLQkgKiBzdHJh dGVneSByaW5nIGFyZSBjb3VudGVkIGFzIHN0cmF0ZWd5IHdyaXRlcyAoSU9DT05URVhUCi0J ICogW0JVTEtSRUFEfEJVTEtXUklURXxWQUNVVU1dIElPT1BfV1JJVEUpIGZvciB0aGUgcHVy cG9zZSBvZiBJTwotCSAqIHN0YXRpc3RpY3MgdHJhY2tpbmcuCi0JICoKLQkgKiBJZiBhIHNo YXJlZCBidWZmZXIgaW5pdGlhbGx5IGFkZGVkIHRvIHRoZSByaW5nIG11c3QgYmUgZmx1c2hl ZCBiZWZvcmUKLQkgKiBiZWluZyB1c2VkLCB0aGlzIGlzIGNvdW50ZWQgYXMgYW4gSU9DT05U RVhUX05PUk1BTCBJT09QX1dSSVRFLgotCSAqCi0JICogSWYgYSBzaGFyZWQgYnVmZmVyIHdo aWNoIHdhcyBhZGRlZCB0byB0aGUgcmluZyBsYXRlciBiZWNhdXNlIHRoZQotCSAqIGN1cnJl bnQgc3RyYXRlZ3kgYnVmZmVyIGlzIHBpbm5lZCBvciBpbiB1c2Ugb3IgYmVjYXVzZSBhbGwg c3RyYXRlZ3kKLQkgKiBidWZmZXJzIHdlcmUgZGlydHkgYW5kIHJlamVjdGVkIChmb3IgQkFT X0JVTEtSRUFEIG9wZXJhdGlvbnMgb25seSkKLQkgKiByZXF1aXJlcyBmbHVzaGluZywgdGhp cyBpcyBjb3VudGVkIGFzIGFuIElPQ09OVEVYVF9OT1JNQUwgSU9PUF9XUklURQotCSAqIChm cm9tX3Jpbmcgd2lsbCBiZSBmYWxzZSkuCi0JICoKLQkgKiBXaGVuIGEgc3RyYXRlZ3kgaXMg bm90IGluIHVzZSwgdGhlIHdyaXRlIGNhbiBvbmx5IGJlIGEgInJlZ3VsYXIiIHdyaXRlCi0J ICogb2YgYSBkaXJ0eSBzaGFyZWQgYnVmZmVyIChJT0NPTlRFWFRfTk9STUFMIElPT1BfV1JJ VEUpLgorCSAqIEFsbCB3cml0ZXMgb2YgYSBkaXJ0eSBzaGFyZWQgYnVmZmVyIGFyZSBjb3Vu dGVkIGFzIGFuIElPQ09OVEVYVF9OT1JNQUwKKwkgKiBJT09QX1dSSVRFIGZvciB0aGUgcHVy cG9zZSBvZiBJTyBzdGF0aXN0aWNzIHRyYWNraW5nLgogCSAqLwogCXBnc3RhdF9jb3VudF9p b19vcF90aW1lKGlvX29iamVjdCwgaW9fY29udGV4dCwKIAkJCQkJCQlJT09QX1dSSVRFLCBp b19zdGFydCwgMSwgQkxDS1NaKTsKQEAgLTU0MzUsOCArNTM3Miw2IEBAIFJlbGF0aW9uQ29w eVN0b3JhZ2VVc2luZ0J1ZmZlcihSZWxGaWxlTG9jYXRvciBzcmNsb2NhdG9yLAogCUJsb2Nr TnVtYmVyIG5ibG9ja3M7CiAJQmxvY2tOdW1iZXIgYmxrbm87CiAJUEdJT0FsaWduZWRCbG9j ayBidWY7Ci0JQnVmZmVyQWNjZXNzU3RyYXRlZ3kgYnN0cmF0ZWd5X3NyYzsKLQlCdWZmZXJB Y2Nlc3NTdHJhdGVneSBic3RyYXRlZ3lfZHN0OwogCUJsb2NrUmFuZ2VSZWFkU3RyZWFtUHJp dmF0ZSBwOwogCVJlYWRTdHJlYW0gKnNyY19zdHJlYW07CiAJU01nclJlbGF0aW9uIHNyY19z bWdyOwpAQCAtNTQ2NCwxMCArNTM5OSw2IEBAIFJlbGF0aW9uQ29weVN0b3JhZ2VVc2luZ0J1 ZmZlcihSZWxGaWxlTG9jYXRvciBzcmNsb2NhdG9yLAogCXNtZ3JleHRlbmQoc21ncm9wZW4o ZHN0bG9jYXRvciwgSU5WQUxJRF9QUk9DX05VTUJFUiksIGZvcmtOdW0sIG5ibG9ja3MgLSAx LAogCQkJICAgYnVmLmRhdGEsIHRydWUpOwogCi0JLyogVGhpcyBpcyBhIGJ1bGsgb3BlcmF0 aW9uLCBzbyB1c2UgYnVmZmVyIGFjY2VzcyBzdHJhdGVnaWVzLiAqLwotCWJzdHJhdGVneV9z cmMgPSBHZXRBY2Nlc3NTdHJhdGVneShCQVNfQlVMS1JFQUQpOwotCWJzdHJhdGVneV9kc3Qg PSBHZXRBY2Nlc3NTdHJhdGVneShCQVNfQlVMS1dSSVRFKTsKLQogCS8qIEluaXRpYWxpemUg c3RyZWFtaW5nIHJlYWQgKi8KIAlwLmN1cnJlbnRfYmxvY2tudW0gPSAwOwogCXAubGFzdF9l eGNsdXNpdmUgPSBuYmxvY2tzOwpAQCAtNTQ3OSw3ICs1NDEwLDYgQEAgUmVsYXRpb25Db3B5 U3RvcmFnZVVzaW5nQnVmZmVyKFJlbEZpbGVMb2NhdG9yIHNyY2xvY2F0b3IsCiAJICovCiAJ c3JjX3N0cmVhbSA9IHJlYWRfc3RyZWFtX2JlZ2luX3NtZ3JfcmVsYXRpb24oUkVBRF9TVFJF QU1fRlVMTCB8CiAJCQkJCQkJCQkJCQkgUkVBRF9TVFJFQU1fVVNFX0JBVENISU5HLAotCQkJ CQkJCQkJCQkJIGJzdHJhdGVneV9zcmMsCiAJCQkJCQkJCQkJCQkgc3JjX3NtZ3IsCiAJCQkJ CQkJCQkJCQkgcGVybWFuZW50ID8gUkVMUEVSU0lTVEVOQ0VfUEVSTUFORU5UIDogUkVMUEVS U0lTVEVOQ0VfVU5MT0dHRUQsCiAJCQkJCQkJCQkJCQkgZm9ya051bSwKQEAgLTU0OTksNyAr NTQyOSw3IEBAIFJlbGF0aW9uQ29weVN0b3JhZ2VVc2luZ0J1ZmZlcihSZWxGaWxlTG9jYXRv ciBzcmNsb2NhdG9yLAogCiAJCWRzdEJ1ZiA9IFJlYWRCdWZmZXJXaXRob3V0UmVsY2FjaGUo ZHN0bG9jYXRvciwgZm9ya051bSwKIAkJCQkJCQkJCQkgICBCdWZmZXJHZXRCbG9ja051bWJl cihzcmNCdWYpLAotCQkJCQkJCQkJCSAgIFJCTV9aRVJPX0FORF9MT0NLLCBic3RyYXRlZ3lf ZHN0LAorCQkJCQkJCQkJCSAgIFJCTV9aRVJPX0FORF9MT0NLLAogCQkJCQkJCQkJCSAgIHBl cm1hbmVudCk7CiAJCWRzdFBhZ2UgPSBCdWZmZXJHZXRQYWdlKGRzdEJ1Zik7CiAKQEAgLTU1 MjAsOSArNTQ1MCw2IEBAIFJlbGF0aW9uQ29weVN0b3JhZ2VVc2luZ0J1ZmZlcihSZWxGaWxl TG9jYXRvciBzcmNsb2NhdG9yLAogCX0KIAlBc3NlcnQocmVhZF9zdHJlYW1fbmV4dF9idWZm ZXIoc3JjX3N0cmVhbSwgTlVMTCkgPT0gSW52YWxpZEJ1ZmZlcik7CiAJcmVhZF9zdHJlYW1f ZW5kKHNyY19zdHJlYW0pOwotCi0JRnJlZUFjY2Vzc1N0cmF0ZWd5KGJzdHJhdGVneV9zcmMp OwotCUZyZWVBY2Nlc3NTdHJhdGVneShic3RyYXRlZ3lfZHN0KTsKIH0KIAogLyogLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9zdG9yYWdlL2J1ZmZlci9mcmVl bGlzdC5jIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9idWZmZXIvZnJlZWxpc3QuYwppbmRleCBj Yzc3MTQ0MjI0Yy4uNjNiMmFhOWI2MDcgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3N0b3Jh Z2UvYnVmZmVyL2ZyZWVsaXN0LmMKKysrIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9idWZmZXIv ZnJlZWxpc3QuYwpAQCAtNzcsNDAgKzc3LDYgQEAgY29uc3QgU2htZW1DYWxsYmFja3MgU3Ry YXRlZ3lDdGxTaG1lbUNhbGxiYWNrcyA9IHsKIAkuaW5pdF9mbiA9IFN0cmF0ZWd5Q3RsU2ht ZW1Jbml0LAogfTsKIAotLyoKLSAqIFByaXZhdGUgKG5vbi1zaGFyZWQpIHN0YXRlIGZvciBt YW5hZ2luZyBhIHJpbmcgb2Ygc2hhcmVkIGJ1ZmZlcnMgdG8gcmUtdXNlLgotICogVGhpcyBp cyBjdXJyZW50bHkgdGhlIG9ubHkga2luZCBvZiBCdWZmZXJBY2Nlc3NTdHJhdGVneSBvYmpl Y3QsIGJ1dCBzb21lZGF5Ci0gKiB3ZSBtaWdodCBoYXZlIG1vcmUga2luZHMuCi0gKi8KLXR5 cGVkZWYgc3RydWN0IEJ1ZmZlckFjY2Vzc1N0cmF0ZWd5RGF0YQotewotCS8qIE92ZXJhbGwg c3RyYXRlZ3kgdHlwZSAqLwotCUJ1ZmZlckFjY2Vzc1N0cmF0ZWd5VHlwZSBidHlwZTsKLQkv KiBOdW1iZXIgb2YgZWxlbWVudHMgaW4gYnVmZmVyc1tdIGFycmF5ICovCi0JaW50CQkJbmJ1 ZmZlcnM7Ci0KLQkvKgotCSAqIEluZGV4IG9mIHRoZSAiY3VycmVudCIgc2xvdCBpbiB0aGUg cmluZywgaWUsIHRoZSBvbmUgbW9zdCByZWNlbnRseQotCSAqIHJldHVybmVkIGJ5IEdldEJ1 ZmZlckZyb21SaW5nLgotCSAqLwotCWludAkJCWN1cnJlbnQ7Ci0KLQkvKgotCSAqIEFycmF5 IG9mIGJ1ZmZlciBudW1iZXJzLiAgSW52YWxpZEJ1ZmZlciAodGhhdCBpcywgemVybykgaW5k aWNhdGVzIHdlCi0JICogaGF2ZSBub3QgeWV0IHNlbGVjdGVkIGEgYnVmZmVyIGZvciB0aGlz IHJpbmcgc2xvdC4gIEZvciBhbGxvY2F0aW9uCi0JICogc2ltcGxpY2l0eSB0aGlzIGlzIHBh bGxvYydkIHRvZ2V0aGVyIHdpdGggdGhlIGZpeGVkIGZpZWxkcyBvZiB0aGUKLQkgKiBzdHJ1 Y3QuCi0JICovCi0JQnVmZmVyCQlidWZmZXJzW0ZMRVhJQkxFX0FSUkFZX01FTUJFUl07Ci19 CQkJQnVmZmVyQWNjZXNzU3RyYXRlZ3lEYXRhOwotCi0KLS8qIFByb3RvdHlwZXMgZm9yIGlu dGVybmFsIGZ1bmN0aW9ucyAqLwotc3RhdGljIEJ1ZmZlckRlc2MgKkdldEJ1ZmZlckZyb21S aW5nKEJ1ZmZlckFjY2Vzc1N0cmF0ZWd5IHN0cmF0ZWd5LAotCQkJCQkJCQkJIHVpbnQ2NCAq YnVmX3N0YXRlKTsKLXN0YXRpYyB2b2lkIEFkZEJ1ZmZlclRvUmluZyhCdWZmZXJBY2Nlc3NT dHJhdGVneSBzdHJhdGVneSwKLQkJCQkJCQlCdWZmZXJEZXNjICpidWYpOwotCiAvKgogICog UGVyLWJhY2tlbmQgc3RhdGUgZm9yIHRoZSBiYXRjaGVkIGNsb2NrIHN3ZWVwLiAgRWFjaCBi YWNrZW5kIGNsYWltcyBhIHJ1bgogICogb2YgY29uc2VjdXRpdmUgY2xvY2staGFuZCB2YWx1 ZXMgd2l0aCBhIHNpbmdsZSBhdG9taWMgZmV0Y2gtYWRkIGFuZCB0aGVuCkBAIC0xNTcsOCAr MTIzLDggQEAgQ2xvY2tTd2VlcFRpY2sodm9pZCkKIAkJCSAqIG11c3QgaG9sZCB0aGUgc3Bp bmxvY2sgc28gU3RyYXRlZ3lTeW5jU3RhcnQoKSBjYW4gcmVhZAogCQkJICogbmV4dFZpY3Rp bUJ1ZmZlciBhbmQgY29tcGxldGVQYXNzZXMgY29uc2lzdGVudGx5LgogCQkJICoKLQkJCSAq IFdpdGggYmF0Y2hpbmcsIG11bHRpcGxlIGJhY2tlbmRzIG1heSBlYWNoIGxhbmQgYSBmZXRj aC1hZGQKLQkJCSAqIHRoYXQgcmV0dXJucyBhIHZhbHVlIHBhc3QgTkJ1ZmZlcnMgaW4gdGhl IHNhbWUgcGFzcy4gIEFmdGVyCisJCQkgKiBXaXRoIGJhdGNoaW5nLCBtdWx0aXBsZSBiYWNr ZW5kcyBtYXkgZWFjaCBsYW5kIGEgZmV0Y2gtYWRkIHRoYXQKKwkJCSAqIHJldHVybnMgYSB2 YWx1ZSBwYXN0IE5CdWZmZXJzIGluIHRoZSBzYW1lIHBhc3MuICBBZnRlcgogCQkJICogYWNx dWlyaW5nIHRoZSBzcGlubG9jayB3ZSByZS1yZWFkIHRoZSBjb3VudGVyOiBpZiBhbm90aGVy CiAJCQkgKiBiYWNrZW5kIGFscmVhZHkgd3JhcHBlZCBpdCBiZWxvdyBOQnVmZmVycyB3ZSBh cmUgZG9uZS4KIAkJCSAqLwpAQCAtMTk2LDggKzE2Miw2IEBAIENsb2NrU3dlZXBUaWNrKHZv aWQpCiAgKglHZXRWaWN0aW1CdWZmZXIoKS4gVGhlIG9ubHkgaGFyZCByZXF1aXJlbWVudCBH ZXRWaWN0aW1CdWZmZXIoKSBoYXMgaXMgdGhhdAogICoJdGhlIHNlbGVjdGVkIGJ1ZmZlciBt dXN0IG5vdCBjdXJyZW50bHkgYmUgcGlubmVkIGJ5IGFueW9uZS4KICAqCi0gKglzdHJhdGVn eSBpcyBhIEJ1ZmZlckFjY2Vzc1N0cmF0ZWd5IG9iamVjdCwgb3IgTlVMTCBmb3IgZGVmYXVs dCBzdHJhdGVneS4KLSAqCiAgKglJdCBpcyB0aGUgY2FsbGVycyByZXNwb25zaWJpbGl0eSB0 byBlbnN1cmUgdGhlIGJ1ZmZlciBvd25lcnNoaXAgY2FuIGJlCiAgKgl0cmFja2VkIHZpYSBU cmFja05ld0J1ZmZlclBpbigpLgogICoKQEAgLTIwNSwyOSArMTY5LDEzIEBAIENsb2NrU3dl ZXBUaWNrKHZvaWQpCiAgKgliZWZvcmUgcmV0dXJuaW5nLgogICovCiBCdWZmZXJEZXNjICoK LVN0cmF0ZWd5R2V0QnVmZmVyKEJ1ZmZlckFjY2Vzc1N0cmF0ZWd5IHN0cmF0ZWd5LCB1aW50 NjQgKmJ1Zl9zdGF0ZSwgYm9vbCAqZnJvbV9yaW5nKQorU3RyYXRlZ3lHZXRCdWZmZXIodWlu dDY0ICpidWZfc3RhdGUpCiB7CiAJQnVmZmVyRGVzYyAqYnVmOwogCWludAkJCWJnd3Byb2Nu bzsKIAlpbnQJCQl0cnljb3VudGVyOwogCWJvb2wJCWZvcmNlX2Nvb2w7CiAKLQkqZnJvbV9y aW5nID0gZmFsc2U7Ci0KLQkvKgotCSAqIElmIGdpdmVuIGEgc3RyYXRlZ3kgb2JqZWN0LCBz ZWUgd2hldGhlciBpdCBjYW4gc2VsZWN0IGEgYnVmZmVyLiBXZQotCSAqIGFzc3VtZSBzdHJh dGVneSBvYmplY3RzIGRvbid0IG5lZWQgYnVmZmVyX3N0cmF0ZWd5X2xvY2suCi0JICovCi0J aWYgKHN0cmF0ZWd5ICE9IE5VTEwpCi0JewotCQlidWYgPSBHZXRCdWZmZXJGcm9tUmluZyhz dHJhdGVneSwgYnVmX3N0YXRlKTsKLQkJaWYgKGJ1ZiAhPSBOVUxMKQotCQl7Ci0JCQkqZnJv bV9yaW5nID0gdHJ1ZTsKLQkJCXJldHVybiBidWY7Ci0JCX0KLQl9Ci0KIAkvKgogCSAqIElm IGFza2VkLCB3ZSBuZWVkIHRvIHdha2VuIHRoZSBiZ3dyaXRlci4gU2luY2Ugd2UgZG9uJ3Qg d2FudCB0byByZWx5IG9uCiAJICogYSBzcGlubG9jayBmb3IgdGhpcyB3ZSBmb3JjZSBhIHJl YWQgZnJvbSBzaGFyZWQgbWVtb3J5IG9uY2UsIGFuZCB0aGVuCkBAIC0yNTYsOCArMjA0LDcg QEAgU3RyYXRlZ3lHZXRCdWZmZXIoQnVmZmVyQWNjZXNzU3RyYXRlZ3kgc3RyYXRlZ3ksIHVp bnQ2NCAqYnVmX3N0YXRlLCBib29sICpmcm9tX3IKIAogCS8qCiAJICogV2UgY291bnQgYnVm ZmVyIGFsbG9jYXRpb24gcmVxdWVzdHMgc28gdGhhdCB0aGUgYmd3cml0ZXIgY2FuIGVzdGlt YXRlCi0JICogdGhlIHJhdGUgb2YgYnVmZmVyIGNvbnN1bXB0aW9uLiAgTm90ZSB0aGF0IGJ1 ZmZlcnMgcmVjeWNsZWQgYnkgYQotCSAqIHN0cmF0ZWd5IG9iamVjdCBhcmUgaW50ZW50aW9u YWxseSBub3QgY291bnRlZCBoZXJlLgorCSAqIHRoZSByYXRlIG9mIGJ1ZmZlciBjb25zdW1w dGlvbi4KIAkgKi8KIAlwZ19hdG9taWNfZmV0Y2hfYWRkX3UzMigmU3RyYXRlZ3lDb250cm9s LT5udW1CdWZmZXJBbGxvY3MsIDEpOwogCkBAIC0zMjMsNyArMjcwLDcgQEAgU3RyYXRlZ3lH ZXRCdWZmZXIoQnVmZmVyQWNjZXNzU3RyYXRlZ3kgc3RyYXRlZ3ksIHVpbnQ2NCAqYnVmX3N0 YXRlLCBib29sICpmcm9tX3IKIAkJCQlpZiAoIWZvcmNlX2Nvb2wpCiAJCQkJewogCQkJCQlu b19wcm9ncmVzcyA9IHRydWU7Ci0JCQkJCWJyZWFrOwkJCS8qIGFkdmFuY2UgdGhlIGhhbmQs IGxvb2sgZm9yIENPT0wgKi8KKwkJCQkJYnJlYWs7CQkvKiBhZHZhbmNlIHRoZSBoYW5kLCBs b29rIGZvciBDT09MICovCiAJCQkJfQogCiAJCQkJbG9jYWxfYnVmX3N0YXRlICY9IH5CVUZf VVNBR0VDT1VOVF9NQVNLOwkvKiBIT1QgLT4gQ09PTCwgY2xlYXIgcmVmIGJpdCAqLwpAQCAt MzU2LDggKzMwMyw2IEBAIFN0cmF0ZWd5R2V0QnVmZmVyKEJ1ZmZlckFjY2Vzc1N0cmF0ZWd5 IHN0cmF0ZWd5LCB1aW50NjQgKmJ1Zl9zdGF0ZSwgYm9vbCAqZnJvbV9yCiAJCQkJCQkJCQkJ CQkgICBsb2NhbF9idWZfc3RhdGUpKQogCQkJCXsKIAkJCQkJLyogRm91bmQgYSB1c2FibGUg YnVmZmVyICovCi0JCQkJCWlmIChzdHJhdGVneSAhPSBOVUxMKQotCQkJCQkJQWRkQnVmZmVy VG9SaW5nKHN0cmF0ZWd5LCBidWYpOwogCQkJCQkqYnVmX3N0YXRlID0gbG9jYWxfYnVmX3N0 YXRlOwogCiAJCQkJCVRyYWNrTmV3QnVmZmVyUGluKEJ1ZmZlckRlc2NyaXB0b3JHZXRCdWZm ZXIoYnVmKSk7CkBAIC0zNjgsMTEgKzMxMywxMiBAQCBTdHJhdGVneUdldEJ1ZmZlcihCdWZm ZXJBY2Nlc3NTdHJhdGVneSBzdHJhdGVneSwgdWludDY0ICpidWZfc3RhdGUsIGJvb2wgKmZy b21fcgogCQl9CiAKIAkJLyoKLQkJICogQSB0aWNrIHRoYXQgbWFkZSBubyBwcm9ncmVzcyB0 b3dhcmQgYSB2aWN0aW0gY291bnRzIGRvd24gdHJ5Y291bnRlci4KLQkJICogQSBmdWxsIHVu cHJvZHVjdGl2ZSBwYXNzIGVzY2FsYXRlcyB0byBmb3JjZV9jb29sIChjb29sIEhPVCBidWZm ZXJzCi0JCSAqIGludG8gdmljdGltcyk7IGEgc2Vjb25kIHVucHJvZHVjdGl2ZSBmdWxsIHBh c3MgbWVhbnMgZXZlcnl0aGluZyBpcwotCQkgKiBwaW5uZWQsIHNvIGZhaWwgcmF0aGVyIHRo YW4gc3BpbiBmb3JldmVyLiAgKEEgZmFpbGVkIENBUyBhYm92ZSBpcwotCQkgKiBuZWl0aGVy IHByb2dyZXNzIG5vciBhIGZ1bGwgbWlzczogd2Ugc2ltcGx5IHJldHJ5IHRoZSBzYW1lIGJ1 ZmZlci4pCisJCSAqIEEgdGljayB0aGF0IG1hZGUgbm8gcHJvZ3Jlc3MgdG93YXJkIGEgdmlj dGltIGNvdW50cyBkb3duCisJCSAqIHRyeWNvdW50ZXIuIEEgZnVsbCB1bnByb2R1Y3RpdmUg cGFzcyBlc2NhbGF0ZXMgdG8gZm9yY2VfY29vbCAoY29vbAorCQkgKiBIT1QgYnVmZmVycyBp bnRvIHZpY3RpbXMpOyBhIHNlY29uZCB1bnByb2R1Y3RpdmUgZnVsbCBwYXNzIG1lYW5zCisJ CSAqIGV2ZXJ5dGhpbmcgaXMgcGlubmVkLCBzbyBmYWlsIHJhdGhlciB0aGFuIHNwaW4gZm9y ZXZlci4gIChBIGZhaWxlZAorCQkgKiBDQVMgYWJvdmUgaXMgbmVpdGhlciBwcm9ncmVzcyBu b3IgYSBmdWxsIG1pc3M6IHdlIHNpbXBseSByZXRyeSB0aGUKKwkJICogc2FtZSBidWZmZXIu KQogCQkgKi8KIAkJaWYgKG5vX3Byb2dyZXNzICYmIC0tdHJ5Y291bnRlciA9PSAwKQogCQl7 CkBAIC01MDAsMzYxICs0NDYsMyBAQCBTdHJhdGVneUN0bFNobWVtSW5pdCh2b2lkICphcmcp CiAJZWxzZQogCQlTdHJhdGVneUNvbnRyb2wtPmJhdGNoU2l6ZSA9IDE7CiB9Ci0KLQotLyog LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQotICoJCQkJQmFja2VuZC1wcml2YXRlIGJ1ZmZlciByaW5nIG1hbmFnZW1l bnQKLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KLSAqLwotCi0KLS8qCi0gKiBHZXRBY2Nlc3NTdHJhdGVneSAt LSBjcmVhdGUgYSBCdWZmZXJBY2Nlc3NTdHJhdGVneSBvYmplY3QKLSAqCi0gKiBUaGUgb2Jq ZWN0IGlzIGFsbG9jYXRlZCBpbiB0aGUgY3VycmVudCBtZW1vcnkgY29udGV4dC4KLSAqLwot QnVmZmVyQWNjZXNzU3RyYXRlZ3kKLUdldEFjY2Vzc1N0cmF0ZWd5KEJ1ZmZlckFjY2Vzc1N0 cmF0ZWd5VHlwZSBidHlwZSkKLXsKLQlpbnQJCQlyaW5nX3NpemVfa2I7Ci0KLQkvKgotCSAq IFNlbGVjdCByaW5nIHNpemUgdG8gdXNlLiAgU2VlIGJ1ZmZlci9SRUFETUUgZm9yIHJhdGlv bmFsZXMuCi0JICoKLQkgKiBOb3RlOiBpZiB5b3UgY2hhbmdlIHRoZSByaW5nIHNpemUgZm9y IEJBU19CVUxLUkVBRCwgc2VlIGFsc28KLQkgKiBTWU5DX1NDQU5fUkVQT1JUX0lOVEVSVkFM IGluIGFjY2Vzcy9oZWFwL3N5bmNzY2FuLmMuCi0JICovCi0Jc3dpdGNoIChidHlwZSkKLQl7 Ci0JCWNhc2UgQkFTX05PUk1BTDoKLQkJCS8qIGlmIHNvbWVvbmUgYXNrcyBmb3IgTk9STUFM LCBqdXN0IGdpdmUgJ2VtIGEgImRlZmF1bHQiIG9iamVjdCAqLwotCQkJcmV0dXJuIE5VTEw7 Ci0KLQkJY2FzZSBCQVNfQlVMS1JFQUQ6Ci0JCQl7Ci0JCQkJaW50CQkJcmluZ19tYXhfa2I7 Ci0KLQkJCQkvKgotCQkJCSAqIFRoZSByaW5nIGFsd2F5cyBuZWVkcyB0byBiZSBsYXJnZSBl bm91Z2ggdG8gYWxsb3cgc29tZQotCQkJCSAqIHNlcGFyYXRpb24gaW4gdGltZSBiZXR3ZWVu IHByb3ZpZGluZyBhIGJ1ZmZlciB0byB0aGUgdXNlcgotCQkJCSAqIG9mIHRoZSBzdHJhdGVn eSBhbmQgdGhhdCBidWZmZXIgYmVpbmcgcmV1c2VkLiBPdGhlcndpc2UgdGhlCi0JCQkJICog dXNlcidzIHBpbiB3aWxsIHByZXZlbnQgcmV1c2Ugb2YgdGhlIGJ1ZmZlciwgZXZlbiB3aXRo b3V0Ci0JCQkJICogY29uY3VycmVudCBhY3Rpdml0eS4KLQkJCQkgKgotCQkJCSAqIFdlIGFs c28gbmVlZCB0byBlbnN1cmUgdGhlIHJpbmcgYWx3YXlzIGlzIGxhcmdlIGVub3VnaCBmb3IK LQkJCQkgKiBTWU5DX1NDQU5fUkVQT1JUX0lOVEVSVkFMLCBhcyBub3RlZCBhYm92ZS4KLQkJ CQkgKgotCQkJCSAqIFRodXMgd2Ugc3RhcnQgb3V0IGEgbWluaW1hbCBzaXplIGFuZCBpbmNy ZWFzZSB0aGUgc2l6ZQotCQkJCSAqIGZ1cnRoZXIgaWYgYXBwcm9wcmlhdGUuCi0JCQkJICov Ci0JCQkJcmluZ19zaXplX2tiID0gMjU2OwotCi0JCQkJLyoKLQkJCQkgKiBUaGVyZSdzIG5v IHBvaW50IGluIGEgbGFyZ2VyIHJpbmcgaWYgd2Ugd29uJ3QgYmUgYWxsb3dlZCB0bwotCQkJ CSAqIHBpbiBzdWZmaWNpZW50bHkgbWFueSBidWZmZXJzLiAgQnV0IHdlIG5ldmVyIGxpbWl0 IHRvIGxlc3MKLQkJCQkgKiB0aGFuIHRoZSBtaW5pbWFsIHNpemUgYWJvdmUuCi0JCQkJICov Ci0JCQkJcmluZ19tYXhfa2IgPSBHZXRQaW5MaW1pdCgpICogKEJMQ0tTWiAvIDEwMjQpOwot CQkJCXJpbmdfbWF4X2tiID0gTWF4KHJpbmdfc2l6ZV9rYiwgcmluZ19tYXhfa2IpOwotCi0J CQkJLyoKLQkJCQkgKiBXZSB3b3VsZCBsaWtlIHRoZSByaW5nIHRvIGFkZGl0aW9uYWxseSBo YXZlIHNwYWNlIGZvciB0aGUKLQkJCQkgKiBjb25maWd1cmVkIGRlZ3JlZSBvZiBJTyBjb25j dXJyZW5jeS4gV2hpbGUgYmVpbmcgcmVhZCBpbiwKLQkJCQkgKiBidWZmZXJzIGNhbiBvYnZp b3VzbHkgbm90IHlldCBiZSByZXVzZWQuCi0JCQkJICoKLQkJCQkgKiBFYWNoIElPIGNhbiBi ZSB1cCB0byBpb19jb21iaW5lX2xpbWl0IGJsb2NrcyBsYXJnZSwgYW5kIHdlCi0JCQkJICog d2FudCB0byBzdGFydCB1cCB0byBlZmZlY3RpdmVfaW9fY29uY3VycmVuY3kgSU9zLgotCQkJ CSAqCi0JCQkJICogTm90ZSB0aGF0IGVmZmVjdGl2ZV9pb19jb25jdXJyZW5jeSBtYXkgYmUg MCwgd2hpY2ggZGlzYWJsZXMKLQkJCQkgKiBBSU8uCi0JCQkJICovCi0JCQkJcmluZ19zaXpl X2tiICs9IChCTENLU1ogLyAxMDI0KSAqCi0JCQkJCWlvX2NvbWJpbmVfbGltaXQgKiBlZmZl Y3RpdmVfaW9fY29uY3VycmVuY3k7Ci0KLQkJCQlpZiAocmluZ19zaXplX2tiID4gcmluZ19t YXhfa2IpCi0JCQkJCXJpbmdfc2l6ZV9rYiA9IHJpbmdfbWF4X2tiOwotCQkJCWJyZWFrOwot CQkJfQotCQljYXNlIEJBU19CVUxLV1JJVEU6Ci0JCQlyaW5nX3NpemVfa2IgPSAxNiAqIDEw MjQ7Ci0JCQlicmVhazsKLQkJY2FzZSBCQVNfVkFDVVVNOgotCQkJcmluZ19zaXplX2tiID0g MjA0ODsKLQkJCWJyZWFrOwotCi0JCWRlZmF1bHQ6Ci0JCQllbG9nKEVSUk9SLCAidW5yZWNv Z25pemVkIGJ1ZmZlciBhY2Nlc3Mgc3RyYXRlZ3k6ICVkIiwKLQkJCQkgKGludCkgYnR5cGUp OwotCQkJcmV0dXJuIE5VTEw7CQkvKiBrZWVwIGNvbXBpbGVyIHF1aWV0ICovCi0JfQotCi0J cmV0dXJuIEdldEFjY2Vzc1N0cmF0ZWd5V2l0aFNpemUoYnR5cGUsIHJpbmdfc2l6ZV9rYik7 Ci19Ci0KLS8qCi0gKiBHZXRBY2Nlc3NTdHJhdGVneVdpdGhTaXplIC0tIGNyZWF0ZSBhIEJ1 ZmZlckFjY2Vzc1N0cmF0ZWd5IG9iamVjdCB3aXRoIGEKLSAqCQludW1iZXIgb2YgYnVmZmVy cyBlcXVpdmFsZW50IHRvIHRoZSBwYXNzZWQgaW4gc2l6ZS4KLSAqCi0gKiBJZiB0aGUgZ2l2 ZW4gcmluZyBzaXplIGlzIDAsIG5vIEJ1ZmZlckFjY2Vzc1N0cmF0ZWd5IHdpbGwgYmUgY3Jl YXRlZCBhbmQKLSAqIHRoZSBmdW5jdGlvbiB3aWxsIHJldHVybiBOVUxMLiAgcmluZ19zaXpl X2tiIG11c3Qgbm90IGJlIG5lZ2F0aXZlLgotICovCi1CdWZmZXJBY2Nlc3NTdHJhdGVneQot R2V0QWNjZXNzU3RyYXRlZ3lXaXRoU2l6ZShCdWZmZXJBY2Nlc3NTdHJhdGVneVR5cGUgYnR5 cGUsIGludCByaW5nX3NpemVfa2IpCi17Ci0JaW50CQkJcmluZ19idWZmZXJzOwotCUJ1ZmZl ckFjY2Vzc1N0cmF0ZWd5IHN0cmF0ZWd5OwotCi0JQXNzZXJ0KHJpbmdfc2l6ZV9rYiA+PSAw KTsKLQotCS8qIEZpZ3VyZSBvdXQgaG93IG1hbnkgYnVmZmVycyByaW5nX3NpemVfa2IgaXMg Ki8KLQlyaW5nX2J1ZmZlcnMgPSByaW5nX3NpemVfa2IgLyAoQkxDS1NaIC8gMTAyNCk7Ci0K LQkvKiAwIG1lYW5zIHVubGltaXRlZCwgc28gbm8gQnVmZmVyQWNjZXNzU3RyYXRlZ3kgcmVx dWlyZWQgKi8KLQlpZiAocmluZ19idWZmZXJzID09IDApCi0JCXJldHVybiBOVUxMOwotCi0J LyogQ2FwIHRvIDEvOHRoIG9mIHNoYXJlZF9idWZmZXJzICovCi0JcmluZ19idWZmZXJzID0g TWluKE5CdWZmZXJzIC8gOCwgcmluZ19idWZmZXJzKTsKLQotCS8qIE5CdWZmZXJzIHNob3Vs ZCBuZXZlciBiZSBsZXNzIHRoYW4gMTYsIHNvIHRoaXMgc2hvdWxkbid0IGhhcHBlbiAqLwot CUFzc2VydChyaW5nX2J1ZmZlcnMgPiAwKTsKLQotCS8qIEFsbG9jYXRlIHRoZSBvYmplY3Qg YW5kIGluaXRpYWxpemUgYWxsIGVsZW1lbnRzIHRvIHplcm9lcyAqLwotCXN0cmF0ZWd5ID0g KEJ1ZmZlckFjY2Vzc1N0cmF0ZWd5KQotCQlwYWxsb2MwKG9mZnNldG9mKEJ1ZmZlckFjY2Vz c1N0cmF0ZWd5RGF0YSwgYnVmZmVycykgKwotCQkJCXJpbmdfYnVmZmVycyAqIHNpemVvZihC dWZmZXIpKTsKLQotCS8qIFNldCBmaWVsZHMgdGhhdCBkb24ndCBzdGFydCBvdXQgemVybyAq LwotCXN0cmF0ZWd5LT5idHlwZSA9IGJ0eXBlOwotCXN0cmF0ZWd5LT5uYnVmZmVycyA9IHJp bmdfYnVmZmVyczsKLQotCXJldHVybiBzdHJhdGVneTsKLX0KLQotLyoKLSAqIEdldEFjY2Vz c1N0cmF0ZWd5QnVmZmVyQ291bnQgLS0gYW4gYWNjZXNzb3IgZm9yIHRoZSBudW1iZXIgb2Yg YnVmZmVycyBpbgotICoJCXRoZSByaW5nCi0gKgotICogUmV0dXJucyAwIG9uIE5VTEwgaW5w dXQgdG8gbWF0Y2ggYmVoYXZpb3Igb2YgR2V0QWNjZXNzU3RyYXRlZ3lXaXRoU2l6ZSgpCi0g KiByZXR1cm5pbmcgTlVMTCB3aXRoIDAgc2l6ZS4KLSAqLwotaW50Ci1HZXRBY2Nlc3NTdHJh dGVneUJ1ZmZlckNvdW50KEJ1ZmZlckFjY2Vzc1N0cmF0ZWd5IHN0cmF0ZWd5KQotewotCWlm IChzdHJhdGVneSA9PSBOVUxMKQotCQlyZXR1cm4gMDsKLQotCXJldHVybiBzdHJhdGVneS0+ bmJ1ZmZlcnM7Ci19Ci0KLS8qCi0gKiBHZXRBY2Nlc3NTdHJhdGVneVBpbkxpbWl0IC0tIGdl dCBjYXAgb2YgbnVtYmVyIG9mIGJ1ZmZlcnMgdGhhdCBzaG91bGQgYmUgcGlubmVkCi0gKgot ICogV2hlbiBwaW5uaW5nIGV4dHJhIGJ1ZmZlcnMgdG8gbG9vayBhaGVhZCwgdXNlcnMgb2Yg YSByaW5nLWJhc2VkIHN0cmF0ZWd5IGFyZQotICogaW4gZGFuZ2VyIG9mIHBpbm5pbmcgdG9v IG11Y2ggb2YgdGhlIHJpbmcgYXQgb25jZSB3aGlsZSBwZXJmb3JtaW5nIGxvb2stYWhlYWQu Ci0gKiBGb3Igc29tZSBzdHJhdGVnaWVzLCB0aGF0IG1lYW5zICJlc2NhcGluZyIgZnJvbSB0 aGUgcmluZywgYW5kIGluIG90aGVycyBpdAotICogbWVhbnMgZm9yY2luZyBkaXJ0eSBkYXRh IHRvIGRpc2sgdmVyeSBmcmVxdWVudGx5IHdpdGggYXNzb2NpYXRlZCBXQUwKLSAqIGZsdXNo aW5nLiAgU2luY2UgZXh0ZXJuYWwgY29kZSBoYXMgbm8gaW5zaWdodCBpbnRvIGFueSBvZiB0 aGF0LCBhbGxvdwotICogaW5kaXZpZHVhbCBzdHJhdGVneSB0eXBlcyB0byBleHBvc2UgYSBj bGFtcCB0aGF0IHNob3VsZCBiZSBhcHBsaWVkIHdoZW4KLSAqIGRlY2lkaW5nIG9uIGEgbWF4 aW11bSBudW1iZXIgb2YgYnVmZmVycyB0byBwaW4gYXQgb25jZS4KLSAqCi0gKiBDYWxsZXJz IHNob3VsZCBjb21iaW5lIHRoaXMgbnVtYmVyIHdpdGggb3RoZXIgcmVsZXZhbnQgbGltaXRz IGFuZCB0YWtlIHRoZQotICogbWluaW11bS4KLSAqLwotaW50Ci1HZXRBY2Nlc3NTdHJhdGVn eVBpbkxpbWl0KEJ1ZmZlckFjY2Vzc1N0cmF0ZWd5IHN0cmF0ZWd5KQotewotCWlmIChzdHJh dGVneSA9PSBOVUxMKQotCQlyZXR1cm4gTkJ1ZmZlcnM7Ci0KLQlzd2l0Y2ggKHN0cmF0ZWd5 LT5idHlwZSkKLQl7Ci0JCWNhc2UgQkFTX0JVTEtSRUFEOgotCi0JCQkvKgotCQkJICogU2lu Y2UgQkFTX0JVTEtSRUFEIHVzZXMgU3RyYXRlZ3lSZWplY3RCdWZmZXIoKSwgZGlydHkgYnVm ZmVycwotCQkJICogc2hvdWxkbid0IGJlIGEgcHJvYmxlbSBhbmQgdGhlIGNhbGxlciBpcyBm cmVlIHRvIHBpbiB1cCB0byB0aGUKLQkJCSAqIGVudGlyZSByaW5nIGF0IG9uY2UuCi0JCQkg Ki8KLQkJCXJldHVybiBzdHJhdGVneS0+bmJ1ZmZlcnM7Ci0KLQkJZGVmYXVsdDoKLQotCQkJ LyoKLQkJCSAqIFRlbGwgY2FsbGVyIG5vdCB0byBwaW4gbW9yZSB0aGFuIGhhbGYgdGhlIGJ1 ZmZlcnMgaW4gdGhlIHJpbmcuCi0JCQkgKiBUaGlzIGlzIGEgdHJhZGUtb2ZmIGJldHdlZW4g bG9vayBhaGVhZCBkaXN0YW5jZSBhbmQgZGVmZXJyaW5nCi0JCQkgKiB3cml0ZWJhY2sgYW5k IGFzc29jaWF0ZWQgV0FMIHRyYWZmaWMuCi0JCQkgKi8KLQkJCXJldHVybiBzdHJhdGVneS0+ bmJ1ZmZlcnMgLyAyOwotCX0KLX0KLQotLyoKLSAqIEZyZWVBY2Nlc3NTdHJhdGVneSAtLSBy ZWxlYXNlIGEgQnVmZmVyQWNjZXNzU3RyYXRlZ3kgb2JqZWN0Ci0gKgotICogQSBzaW1wbGUg cGZyZWUgd291bGQgZG8gYXQgdGhlIG1vbWVudCwgYnV0IHdlIHdvdWxkIHByZWZlciB0aGF0 IGNhbGxlcnMKLSAqIGRvbid0IGFzc3VtZSB0aGF0IG11Y2ggYWJvdXQgdGhlIHJlcHJlc2Vu dGF0aW9uIG9mIEJ1ZmZlckFjY2Vzc1N0cmF0ZWd5LgotICovCi12b2lkCi1GcmVlQWNjZXNz U3RyYXRlZ3koQnVmZmVyQWNjZXNzU3RyYXRlZ3kgc3RyYXRlZ3kpCi17Ci0JLyogZG9uJ3Qg Y3Jhc2ggaWYgY2FsbGVkIG9uIGEgImRlZmF1bHQiIHN0cmF0ZWd5ICovCi0JaWYgKHN0cmF0 ZWd5ICE9IE5VTEwpCi0JCXBmcmVlKHN0cmF0ZWd5KTsKLX0KLQotLyoKLSAqIEdldEJ1ZmZl ckZyb21SaW5nIC0tIHJldHVybnMgYSBidWZmZXIgZnJvbSB0aGUgcmluZywgb3IgTlVMTCBp ZiB0aGUKLSAqCQlyaW5nIGlzIGVtcHR5IC8gbm90IHVzYWJsZS4KLSAqCi0gKiBUaGUgYnVm ZmVyIGlzIHBpbm5lZCBhbmQgbWFya2VkIGFzIG93bmVkLCB1c2luZyBUcmFja05ld0J1ZmZl clBpbigpLCBiZWZvcmUKLSAqIHJldHVybmluZy4KLSAqLwotc3RhdGljIEJ1ZmZlckRlc2Mg KgotR2V0QnVmZmVyRnJvbVJpbmcoQnVmZmVyQWNjZXNzU3RyYXRlZ3kgc3RyYXRlZ3ksIHVp bnQ2NCAqYnVmX3N0YXRlKQotewotCUJ1ZmZlckRlc2MgKmJ1ZjsKLQlCdWZmZXIJCWJ1Zm51 bTsKLQl1aW50NjQJCW9sZF9idWZfc3RhdGU7Ci0JdWludDY0CQlsb2NhbF9idWZfc3RhdGU7 CS8qIHRvIGF2b2lkIHJlcGVhdGVkIChkZS0pcmVmZXJlbmNpbmcgKi8KLQotCi0JLyogQWR2 YW5jZSB0byBuZXh0IHJpbmcgc2xvdCAqLwotCWlmICgrK3N0cmF0ZWd5LT5jdXJyZW50ID49 IHN0cmF0ZWd5LT5uYnVmZmVycykKLQkJc3RyYXRlZ3ktPmN1cnJlbnQgPSAwOwotCi0JLyoK LQkgKiBJZiB0aGUgc2xvdCBoYXNuJ3QgYmVlbiBmaWxsZWQgeWV0LCB0ZWxsIHRoZSBjYWxs ZXIgdG8gYWxsb2NhdGUgYSBuZXcKLQkgKiBidWZmZXIgd2l0aCB0aGUgbm9ybWFsIGFsbG9j YXRpb24gc3RyYXRlZ3kuICBIZSB3aWxsIHRoZW4gZmlsbCB0aGlzCi0JICogc2xvdCBieSBj YWxsaW5nIEFkZEJ1ZmZlclRvUmluZyB3aXRoIHRoZSBuZXcgYnVmZmVyLgotCSAqLwotCWJ1 Zm51bSA9IHN0cmF0ZWd5LT5idWZmZXJzW3N0cmF0ZWd5LT5jdXJyZW50XTsKLQlpZiAoYnVm bnVtID09IEludmFsaWRCdWZmZXIpCi0JCXJldHVybiBOVUxMOwotCi0JYnVmID0gR2V0QnVm ZmVyRGVzY3JpcHRvcihidWZudW0gLSAxKTsKLQotCS8qCi0JICogQ2hlY2sgd2hldGhlciB0 aGUgYnVmZmVyIGNhbiBiZSB1c2VkIGFuZCBwaW4gaXQgaWYgc28uIERvIHRoaXMgdXNpbmcg YQotCSAqIENBUyBsb29wLCB0byBhdm9pZCBoYXZpbmcgdG8gbG9jayB0aGUgYnVmZmVyIGhl YWRlci4KLQkgKi8KLQlvbGRfYnVmX3N0YXRlID0gcGdfYXRvbWljX3JlYWRfdTY0KCZidWYt PnN0YXRlKTsKLQlmb3IgKDs7KQotCXsKLQkJbG9jYWxfYnVmX3N0YXRlID0gb2xkX2J1Zl9z dGF0ZTsKLQotCQkvKgotCQkgKiBJZiB0aGUgYnVmZmVyIGlzIHBpbm5lZCB3ZSBjYW5ub3Qg dXNlIGl0IHVuZGVyIGFueSBjaXJjdW1zdGFuY2VzLgotCQkgKgotCQkgKiBXaXRoIHRoZSBj b29saW5nLXN0YXRlIHJlcGxhY2VtZW50IHRoZSBmaWVsZCBob2xkcyBvbmx5IENPT0wgb3Ig SE9ULAotCQkgKiBzbyB0aGUgc3RvY2sgInVzYWdlX2NvdW50ID4gMSBtZWFucyBhbm90aGVy IGJhY2tlbmQgdG91Y2hlZCBpdCIKLQkJICogaGV1cmlzdGljIG5vIGxvbmdlciBhcHBsaWVz OiBhIHJpbmcgZWxlbWVudCBpcyByZXVzYWJsZSB3aGVuZXZlciBpdAotCQkgKiBpcyB1bnBp bm5lZC4gIChUaGUgd2hvbGUgcmluZyBtZWNoYW5pc20gaXMgcmVtb3ZlZCBpbiBhIGxhdGVy IHBhdGNoOwotCQkgKiBzY2FuIHJlc2lzdGFuY2UgaXMgbm93IGludHJpbnNpYyB0byB0aGUg c3dlZXAuKQotCQkgKi8KLQkJaWYgKEJVRl9TVEFURV9HRVRfUkVGQ09VTlQobG9jYWxfYnVm X3N0YXRlKSAhPSAwKQotCQkJYnJlYWs7Ci0KLQkJLyogU2VlIGVxdWl2YWxlbnQgY29kZSBp biBQaW5CdWZmZXIoKSAqLwotCQlpZiAodW5saWtlbHkobG9jYWxfYnVmX3N0YXRlICYgQk1f TE9DS0VEKSkKLQkJewotCQkJb2xkX2J1Zl9zdGF0ZSA9IFdhaXRCdWZIZHJVbmxvY2tlZChi dWYpOwotCQkJY29udGludWU7Ci0JCX0KLQotCQkvKiBwaW4gdGhlIGJ1ZmZlciBpZiB0aGUg Q0FTIHN1Y2NlZWRzICovCi0JCWxvY2FsX2J1Zl9zdGF0ZSArPSBCVUZfUkVGQ09VTlRfT05F OwotCi0JCWlmIChwZ19hdG9taWNfY29tcGFyZV9leGNoYW5nZV91NjQoJmJ1Zi0+c3RhdGUs ICZvbGRfYnVmX3N0YXRlLAotCQkJCQkJCQkJCSAgIGxvY2FsX2J1Zl9zdGF0ZSkpCi0JCXsK LQkJCSpidWZfc3RhdGUgPSBsb2NhbF9idWZfc3RhdGU7Ci0KLQkJCVRyYWNrTmV3QnVmZmVy UGluKEJ1ZmZlckRlc2NyaXB0b3JHZXRCdWZmZXIoYnVmKSk7Ci0JCQlyZXR1cm4gYnVmOwot CQl9Ci0JfQotCi0JLyoKLQkgKiBUZWxsIGNhbGxlciB0byBhbGxvY2F0ZSBhIG5ldyBidWZm ZXIgd2l0aCB0aGUgbm9ybWFsIGFsbG9jYXRpb24KLQkgKiBzdHJhdGVneS4gIEhlJ2xsIHRo ZW4gcmVwbGFjZSB0aGlzIHJpbmcgZWxlbWVudCB2aWEgQWRkQnVmZmVyVG9SaW5nLgotCSAq LwotCXJldHVybiBOVUxMOwotfQotCi0vKgotICogQWRkQnVmZmVyVG9SaW5nIC0tIGFkZCBh IGJ1ZmZlciB0byB0aGUgYnVmZmVyIHJpbmcKLSAqCi0gKiBDYWxsZXIgbXVzdCBob2xkIHRo ZSBidWZmZXIgaGVhZGVyIHNwaW5sb2NrIG9uIHRoZSBidWZmZXIuICBTaW5jZSB0aGlzCi0g KiBpcyBjYWxsZWQgd2l0aCB0aGUgc3BpbmxvY2sgaGVsZCwgaXQgaGFkIGJldHRlciBiZSBx dWl0ZSBjaGVhcC4KLSAqLwotc3RhdGljIHZvaWQKLUFkZEJ1ZmZlclRvUmluZyhCdWZmZXJB Y2Nlc3NTdHJhdGVneSBzdHJhdGVneSwgQnVmZmVyRGVzYyAqYnVmKQotewotCXN0cmF0ZWd5 LT5idWZmZXJzW3N0cmF0ZWd5LT5jdXJyZW50XSA9IEJ1ZmZlckRlc2NyaXB0b3JHZXRCdWZm ZXIoYnVmKTsKLX0KLQotLyoKLSAqIFV0aWxpdHkgZnVuY3Rpb24gcmV0dXJuaW5nIHRoZSBJ T0NvbnRleHQgb2YgYSBnaXZlbiBCdWZmZXJBY2Nlc3NTdHJhdGVneSdzCi0gKiBzdHJhdGVn eSByaW5nLgotICovCi1JT0NvbnRleHQKLUlPQ29udGV4dEZvclN0cmF0ZWd5KEJ1ZmZlckFj Y2Vzc1N0cmF0ZWd5IHN0cmF0ZWd5KQotewotCWlmICghc3RyYXRlZ3kpCi0JCXJldHVybiBJ T0NPTlRFWFRfTk9STUFMOwotCi0Jc3dpdGNoIChzdHJhdGVneS0+YnR5cGUpCi0JewotCQlj YXNlIEJBU19OT1JNQUw6Ci0KLQkJCS8qCi0JCQkgKiBDdXJyZW50bHksIEdldEFjY2Vzc1N0 cmF0ZWd5KCkgcmV0dXJucyBOVUxMIGZvcgotCQkJICogQnVmZmVyQWNjZXNzU3RyYXRlZ3lU eXBlIEJBU19OT1JNQUwsIHNvIHRoaXMgY2FzZSBpcwotCQkJICogdW5yZWFjaGFibGUuCi0J CQkgKi8KLQkJCXBnX3VucmVhY2hhYmxlKCk7Ci0JCQlyZXR1cm4gSU9DT05URVhUX05PUk1B TDsKLQkJY2FzZSBCQVNfQlVMS1JFQUQ6Ci0JCQlyZXR1cm4gSU9DT05URVhUX0JVTEtSRUFE OwotCQljYXNlIEJBU19CVUxLV1JJVEU6Ci0JCQlyZXR1cm4gSU9DT05URVhUX0JVTEtXUklU RTsKLQkJY2FzZSBCQVNfVkFDVVVNOgotCQkJcmV0dXJuIElPQ09OVEVYVF9WQUNVVU07Ci0J fQotCi0JZWxvZyhFUlJPUiwgInVucmVjb2duaXplZCBCdWZmZXJBY2Nlc3NTdHJhdGVneVR5 cGU6ICVkIiwgc3RyYXRlZ3ktPmJ0eXBlKTsKLQlwZ191bnJlYWNoYWJsZSgpOwotfQotCi0v KgotICogU3RyYXRlZ3lSZWplY3RCdWZmZXIgLS0gY29uc2lkZXIgcmVqZWN0aW5nIGEgZGly dHkgYnVmZmVyCi0gKgotICogV2hlbiBhIG5vbmRlZmF1bHQgc3RyYXRlZ3kgaXMgdXNlZCwg dGhlIGJ1ZmZlciBtYW5hZ2VyIGNhbGxzIHRoaXMgZnVuY3Rpb24KLSAqIHdoZW4gaXQgdHVy bnMgb3V0IHRoYXQgdGhlIGJ1ZmZlciBzZWxlY3RlZCBieSBTdHJhdGVneUdldEJ1ZmZlciBu ZWVkcyB0bwotICogYmUgd3JpdHRlbiBvdXQgYW5kIGRvaW5nIHNvIHdvdWxkIHJlcXVpcmUg Zmx1c2hpbmcgV0FMIHRvby4gIFRoaXMgZ2l2ZXMgdXMKLSAqIGEgY2hhbmNlIHRvIGNob29z ZSBhIGRpZmZlcmVudCB2aWN0aW0uCi0gKgotICogUmV0dXJucyB0cnVlIGlmIGJ1ZmZlciBt YW5hZ2VyIHNob3VsZCBhc2sgZm9yIGEgbmV3IHZpY3RpbSwgYW5kIGZhbHNlCi0gKiBpZiB0 aGlzIGJ1ZmZlciBzaG91bGQgYmUgd3JpdHRlbiBhbmQgcmUtdXNlZC4KLSAqLwotYm9vbAot U3RyYXRlZ3lSZWplY3RCdWZmZXIoQnVmZmVyQWNjZXNzU3RyYXRlZ3kgc3RyYXRlZ3ksIEJ1 ZmZlckRlc2MgKmJ1ZiwgYm9vbCBmcm9tX3JpbmcpCi17Ci0JLyogV2Ugb25seSBkbyB0aGlz IGluIGJ1bGtyZWFkIG1vZGUgKi8KLQlpZiAoc3RyYXRlZ3ktPmJ0eXBlICE9IEJBU19CVUxL UkVBRCkKLQkJcmV0dXJuIGZhbHNlOwotCi0JLyogRG9uJ3QgbXVjayB3aXRoIGJlaGF2aW9y IG9mIG5vcm1hbCBidWZmZXItcmVwbGFjZW1lbnQgc3RyYXRlZ3kgKi8KLQlpZiAoIWZyb21f cmluZyB8fAotCQlzdHJhdGVneS0+YnVmZmVyc1tzdHJhdGVneS0+Y3VycmVudF0gIT0gQnVm ZmVyRGVzY3JpcHRvckdldEJ1ZmZlcihidWYpKQotCQlyZXR1cm4gZmFsc2U7Ci0KLQkvKgot CSAqIFJlbW92ZSB0aGUgZGlydHkgYnVmZmVyIGZyb20gdGhlIHJpbmc7IG5lY2Vzc2FyeSB0 byBwcmV2ZW50IGluZmluaXRlCi0JICogbG9vcCBpZiBhbGwgcmluZyBtZW1iZXJzIGFyZSBk aXJ0eS4KLQkgKi8KLQlzdHJhdGVneS0+YnVmZmVyc1tzdHJhdGVneS0+Y3VycmVudF0gPSBJ bnZhbGlkQnVmZmVyOwotCi0JcmV0dXJuIHRydWU7Ci19CmRpZmYgLS1naXQgYS9zcmMvYmFj a2VuZC9zdG9yYWdlL2ZyZWVzcGFjZS9mcmVlc3BhY2UuYyBiL3NyYy9iYWNrZW5kL3N0b3Jh Z2UvZnJlZXNwYWNlL2ZyZWVzcGFjZS5jCmluZGV4IDAwNmVkYWI5ZDc3Li4yOWNiMmQ3MGY2 NiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9mcmVlc3BhY2UvZnJlZXNwYWNl LmMKKysrIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9mcmVlc3BhY2UvZnJlZXNwYWNlLmMKQEAg LTYwMyw3ICs2MDMsNyBAQCBmc21fcmVhZGJ1ZihSZWxhdGlvbiByZWwsIEZTTUFkZHJlc3Mg YWRkciwgYm9vbCBleHRlbmQpCiAJCQlyZXR1cm4gSW52YWxpZEJ1ZmZlcjsKIAl9CiAJZWxz ZQotCQlidWYgPSBSZWFkQnVmZmVyRXh0ZW5kZWQocmVsLCBGU01fRk9SS05VTSwgYmxrbm8s IFJCTV9aRVJPX09OX0VSUk9SLCBOVUxMKTsKKwkJYnVmID0gUmVhZEJ1ZmZlckV4dGVuZGVk KHJlbCwgRlNNX0ZPUktOVU0sIGJsa25vLCBSQk1fWkVST19PTl9FUlJPUik7CiAKIAkvKgog CSAqIEluaXRpYWxpemluZyB0aGUgcGFnZSB3aGVuIG5lZWRlZCBpcyB0cmlja2llciB0aGFu IGl0IGxvb2tzLCBiZWNhdXNlIG9mCkBAIC02MzgsNyArNjM4LDcgQEAgZnNtX3JlYWRidWYo UmVsYXRpb24gcmVsLCBGU01BZGRyZXNzIGFkZHIsIGJvb2wgZXh0ZW5kKQogc3RhdGljIEJ1 ZmZlcgogZnNtX2V4dGVuZChSZWxhdGlvbiByZWwsIEJsb2NrTnVtYmVyIGZzbV9uYmxvY2tz KQogewotCXJldHVybiBFeHRlbmRCdWZmZXJlZFJlbFRvKEJNUl9SRUwocmVsKSwgRlNNX0ZP UktOVU0sIE5VTEwsCisJcmV0dXJuIEV4dGVuZEJ1ZmZlcmVkUmVsVG8oQk1SX1JFTChyZWwp LCBGU01fRk9SS05VTSwKIAkJCQkJCQkgICBFQl9DUkVBVEVfRk9SS19JRl9ORUVERUQgfAog CQkJCQkJCSAgIEVCX0NMRUFSX1NJWkVfQ0FDSEUsCiAJCQkJCQkJICAgZnNtX25ibG9ja3Ms CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9zdG9yYWdlL3NtZ3IvbWQuYyBiL3NyYy9iYWNr ZW5kL3N0b3JhZ2Uvc21nci9tZC5jCmluZGV4IDcxOGMxY2ZjMGY5Li4zYzNlMzVhYjhhOCAx MDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9zbWdyL21kLmMKKysrIGIvc3JjL2Jh Y2tlbmQvc3RvcmFnZS9zbWdyL21kLmMKQEAgLTE1NDAsMTUgKzE1NDAsOCBAQCByZWdpc3Rl cl9kaXJ0eV9zZWdtZW50KFNNZ3JSZWxhdGlvbiByZWxuLCBGb3JrTnVtYmVyIGZvcmtudW0s IE1kZmRWZWMgKnNlZykKIAkJCQkJCQlGaWxlUGF0aE5hbWUoc2VnLT5tZGZkX3ZmZCkpKSk7 CiAKIAkJLyoKLQkJICogV2UgaGF2ZSBubyB3YXkgb2Yga25vd2luZyBpZiB0aGUgY3VycmVu dCBJT0NvbnRleHQgaXMKLQkJICogSU9DT05URVhUX05PUk1BTCBvciBJT0NPTlRFWFRfW0JV TEtSRUFELCBCVUxLV1JJVEUsIFZBQ1VVTV0gYXQgdGhpcwotCQkgKiBwb2ludCwgc28gY291 bnQgdGhlIGZzeW5jIGFzIGJlaW5nIGluIHRoZSBJT0NPTlRFWFRfTk9STUFMCi0JCSAqIElP Q29udGV4dC4gVGhpcyBpcyBwcm9iYWJseSBva2F5LCBiZWNhdXNlIHRoZSBudW1iZXIgb2Yg YmFja2VuZAotCQkgKiBmc3luY3MgZG9lc24ndCBzYXkgYW55dGhpbmcgYWJvdXQgdGhlIGVm ZmljYWN5IG9mIHRoZQotCQkgKiBCdWZmZXJBY2Nlc3NTdHJhdGVneS4gQW5kIGNvdW50aW5n IGJvdGggZnN5bmNzIGRvbmUgaW4KLQkJICogSU9DT05URVhUX05PUk1BTCBhbmQgSU9DT05U RVhUX1tCVUxLUkVBRCwgQlVMS1dSSVRFLCBWQUNVVU1dIHVuZGVyCi0JCSAqIElPQ09OVEVY VF9OT1JNQUwgaXMgbGlrZWx5IGNsZWFyZXIgd2hlbiBpbnZlc3RpZ2F0aW5nIHRoZSBudW1i ZXIgb2YKLQkJICogYmFja2VuZCBmc3luY3MuCisJCSAqIENvdW50IHRoZSBmc3luYyBpbiB0 aGUgSU9DT05URVhUX05PUk1BTCBJT0NvbnRleHQsIHRoZSBvbmx5CisJCSAqIElPQ29udGV4 dCByZWxhdGlvbnMgYXJlIHJlYWQvd3JpdHRlbiB1bmRlci4KIAkJICovCiAJCXBnc3RhdF9j b3VudF9pb19vcF90aW1lKElPT0JKRUNUX1JFTEFUSU9OLCBJT0NPTlRFWFRfTk9STUFMLAog CQkJCQkJCQlJT09QX0ZTWU5DLCBpb19zdGFydCwgMSwgMCk7CmRpZmYgLS1naXQgYS9zcmMv YmFja2VuZC91dGlscy9hY3Rpdml0eS9wZ3N0YXRfaW8uYyBiL3NyYy9iYWNrZW5kL3V0aWxz L2FjdGl2aXR5L3Bnc3RhdF9pby5jCmluZGV4IDM4YmFlN2IxNWQyLi5kNjZhMjM3NDlkNSAx MDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvYWN0aXZpdHkvcGdzdGF0X2lvLmMKKysr IGIvc3JjL2JhY2tlbmQvdXRpbHMvYWN0aXZpdHkvcGdzdGF0X2lvLmMKQEAgLTI0MSwxNiAr MjQxLDEwIEBAIHBnc3RhdF9nZXRfaW9fY29udGV4dF9uYW1lKElPQ29udGV4dCBpb19jb250 ZXh0KQogewogCXN3aXRjaCAoaW9fY29udGV4dCkKIAl7Ci0JCWNhc2UgSU9DT05URVhUX0JV TEtSRUFEOgotCQkJcmV0dXJuICJidWxrcmVhZCI7Ci0JCWNhc2UgSU9DT05URVhUX0JVTEtX UklURToKLQkJCXJldHVybiAiYnVsa3dyaXRlIjsKIAkJY2FzZSBJT0NPTlRFWFRfSU5JVDoK IAkJCXJldHVybiAiaW5pdCI7CiAJCWNhc2UgSU9DT05URVhUX05PUk1BTDoKIAkJCXJldHVy biAibm9ybWFsIjsKLQkJY2FzZSBJT0NPTlRFWFRfVkFDVVVNOgotCQkJcmV0dXJuICJ2YWN1 dW0iOwogCX0KIAogCWVsb2coRVJST1IsICJ1bnJlY29nbml6ZWQgSU9Db250ZXh0IHZhbHVl OiAlZCIsIGlvX2NvbnRleHQpOwpAQCAtNDUxLDE4ICs0NDUsNiBAQCBwZ3N0YXRfdHJhY2tz X2lvX29iamVjdChCYWNrZW5kVHlwZSBia3R5cGUsIElPT2JqZWN0IGlvX29iamVjdCwKIAkg KiBJT0NvbnRleHRzLCBhbmQsIHdoaWxlIGl0IG1heSBub3QgYmUgaW5oZXJlbnRseSBpbmNv cnJlY3QgZm9yIHRoZW0gdG8KIAkgKiBkbyBzbywgZXhjbHVkaW5nIHRob3NlIHJvd3MgZnJv bSB0aGUgdmlldyBtYWtlcyB0aGUgdmlldyBlYXNpZXIgdG8gdXNlLgogCSAqLwotCWlmICgo Ymt0eXBlID09IEJfQ0hFQ0tQT0lOVEVSIHx8IGJrdHlwZSA9PSBCX0JHX1dSSVRFUikgJiYK LQkJKGlvX2NvbnRleHQgPT0gSU9DT05URVhUX0JVTEtSRUFEIHx8Ci0JCSBpb19jb250ZXh0 ID09IElPQ09OVEVYVF9CVUxLV1JJVEUgfHwKLQkJIGlvX2NvbnRleHQgPT0gSU9DT05URVhU X1ZBQ1VVTSkpCi0JCXJldHVybiBmYWxzZTsKLQotCWlmIChia3R5cGUgPT0gQl9BVVRPVkFD X0xBVU5DSEVSICYmIGlvX2NvbnRleHQgPT0gSU9DT05URVhUX1ZBQ1VVTSkKLQkJcmV0dXJu IGZhbHNlOwotCi0JaWYgKChia3R5cGUgPT0gQl9BVVRPVkFDX1dPUktFUiB8fCBia3R5cGUg PT0gQl9BVVRPVkFDX0xBVU5DSEVSKSAmJgotCQlpb19jb250ZXh0ID09IElPQ09OVEVYVF9C VUxLV1JJVEUpCi0JCXJldHVybiBmYWxzZTsKIAogCXJldHVybiB0cnVlOwogfQpAQCAtNDc5 LDggKzQ2MSw2IEBAIGJvb2wKIHBnc3RhdF90cmFja3NfaW9fb3AoQmFja2VuZFR5cGUgYmt0 eXBlLCBJT09iamVjdCBpb19vYmplY3QsCiAJCQkJCUlPQ29udGV4dCBpb19jb250ZXh0LCBJ T09wIGlvX29wKQogewotCWJvb2wJCXN0cmF0ZWd5X2lvX2NvbnRleHQ7Ci0KIAkvKiBpZiAo aW9fY29udGV4dCwgaW9fb2JqZWN0KSB3aWxsIG5ldmVyIGNvbGxlY3Qgc3RhdHMsIHdlJ3Jl IGRvbmUgKi8KIAlpZiAoIXBnc3RhdF90cmFja3NfaW9fb2JqZWN0KGJrdHlwZSwgaW9fb2Jq ZWN0LCBpb19jb250ZXh0KSkKIAkJcmV0dXJuIGZhbHNlOwpAQCAtNTIxLDE3ICs1MDEsMTMg QEAgcGdzdGF0X3RyYWNrc19pb19vcChCYWNrZW5kVHlwZSBia3R5cGUsIElPT2JqZWN0IGlv X29iamVjdCwKIAkvKgogCSAqIFNvbWUgSU9PcHMgYXJlIG5vdCB2YWxpZCBpbiBjZXJ0YWlu IElPQ29udGV4dHMgYW5kIHNvbWUgSU9PcHMgYXJlIG9ubHkKIAkgKiB2YWxpZCBpbiBjZXJ0 YWluIGNvbnRleHRzLgorCSAqCisJICogSU9PUF9SRVVTRSB3YXMgb25seSByZWxldmFudCB3 aGVuIGEgQnVmZmVyQWNjZXNzU3RyYXRlZ3kgd2FzIGluIHVzZS4KKwkgKiBCdWZmZXIgYWNj ZXNzIHN0cmF0ZWdpZXMgKHJpbmcgYnVmZmVycykgaGF2ZSBiZWVuIHJlbW92ZWQgLS0gc2Nh bgorCSAqIHJlc2lzdGFuY2UgaXMgbm93IGludHJpbnNpYyB0byB0aGUgY29vbGluZy1zdGFn ZSBjbG9jayBzd2VlcCAtLSBzbworCSAqIElPT1BfUkVVU0UgbmV2ZXIgb2NjdXJzLgogCSAq LwotCWlmIChpb19jb250ZXh0ID09IElPQ09OVEVYVF9CVUxLUkVBRCAmJiBpb19vcCA9PSBJ T09QX0VYVEVORCkKLQkJcmV0dXJuIGZhbHNlOwotCi0Jc3RyYXRlZ3lfaW9fY29udGV4dCA9 IGlvX2NvbnRleHQgPT0gSU9DT05URVhUX0JVTEtSRUFEIHx8Ci0JCWlvX2NvbnRleHQgPT0g SU9DT05URVhUX0JVTEtXUklURSB8fCBpb19jb250ZXh0ID09IElPQ09OVEVYVF9WQUNVVU07 Ci0KLQkvKgotCSAqIElPT1BfUkVVU0UgaXMgb25seSByZWxldmFudCB3aGVuIGEgQnVmZmVy QWNjZXNzU3RyYXRlZ3kgaXMgaW4gdXNlLgotCSAqLwotCWlmICghc3RyYXRlZ3lfaW9fY29u dGV4dCAmJiBpb19vcCA9PSBJT09QX1JFVVNFKQorCWlmIChpb19vcCA9PSBJT09QX1JFVVNF KQogCQlyZXR1cm4gZmFsc2U7CiAKIAkvKgpAQCAtNTQ1LDE0ICs1MjEsNSBAQCBwZ3N0YXRf dHJhY2tzX2lvX29wKEJhY2tlbmRUeXBlIGJrdHlwZSwgSU9PYmplY3QgaW9fb2JqZWN0LAog CQkhKGlvX29wID09IElPT1BfV1JJVEUgfHwgaW9fb3AgPT0gSU9PUF9SRUFEIHx8IGlvX29w ID09IElPT1BfRlNZTkMpKQogCQlyZXR1cm4gZmFsc2U7CiAKLQkvKgotCSAqIElPT1BfRlNZ TkMgSU9PcHMgZG9uZSBieSBhIGJhY2tlbmQgdXNpbmcgYSBCdWZmZXJBY2Nlc3NTdHJhdGVn eSBhcmUKLQkgKiBjb3VudGVkIGluIHRoZSBJT0NPTlRFWFRfTk9STUFMIElPQ29udGV4dC4g U2VlIGNvbW1lbnQgaW4KLQkgKiByZWdpc3Rlcl9kaXJ0eV9zZWdtZW50KCkgZm9yIG1vcmUg ZGV0YWlscy4KLQkgKi8KLQlpZiAoc3RyYXRlZ3lfaW9fY29udGV4dCAmJiBpb19vcCA9PSBJ T09QX0ZTWU5DKQotCQlyZXR1cm4gZmFsc2U7Ci0KLQogCXJldHVybiB0cnVlOwogfQpkaWZm IC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvaW5pdC9nbG9iYWxzLmMgYi9zcmMvYmFja2Vu ZC91dGlscy9pbml0L2dsb2JhbHMuYwppbmRleCBiYmQyOGQxNGQ5OS4uNTU1YzA0MjcyZjUg MTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2luaXQvZ2xvYmFscy5jCisrKyBiL3Ny Yy9iYWNrZW5kL3V0aWxzL2luaXQvZ2xvYmFscy5jCkBAIC0xNDksNyArMTQ5LDYgQEAgaW50 CQkJYXV0b3ZhY3V1bV9tYXhfcGFyYWxsZWxfd29ya2VycyA9IDA7CiBpbnQJCQlNYXhCYWNr ZW5kcyA9IDA7CiAKIC8qIEdVQyBwYXJhbWV0ZXJzIGZvciB2YWN1dW0gKi8KLWludAkJCVZh Y3V1bUJ1ZmZlclVzYWdlTGltaXQgPSAyMDQ4OwogCiBpbnQJCQlWYWN1dW1Db3N0UGFnZUhp dCA9IDE7CiBpbnQJCQlWYWN1dW1Db3N0UGFnZU1pc3MgPSAyOwpkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvdXRpbHMvbWlzYy9ndWNfcGFyYW1ldGVycy5kYXQgYi9zcmMvYmFja2VuZC91 dGlscy9taXNjL2d1Y19wYXJhbWV0ZXJzLmRhdAppbmRleCBkNDIxY2RiZGU3Ni4uYjFlYTgx ZjUzNmMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvZ3VjX3BhcmFtZXRl cnMuZGF0CisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvZ3VjX3BhcmFtZXRlcnMuZGF0 CkBAIC0zMzI2LDE2ICszMzI2LDYgQEAKICAgYm9vdF92YWwgPT4gJ0RFRkFVTFRfVVBEQVRF X1BST0NFU1NfVElUTEUnLAogfSwKIAoteyBuYW1lID0+ICd2YWN1dW1fYnVmZmVyX3VzYWdl X2xpbWl0JywgdHlwZSA9PiAnaW50JywgY29udGV4dCA9PiAnUEdDX1VTRVJTRVQnLCBncm91 cCA9PiAnUkVTT1VSQ0VTX01FTScsCi0gIHNob3J0X2Rlc2MgPT4gJ1NldHMgdGhlIGJ1ZmZl ciBwb29sIHNpemUgZm9yIFZBQ1VVTSwgQU5BTFlaRSwgYW5kIGF1dG92YWN1dW0uJywKLSAg ZmxhZ3MgPT4gJ0dVQ19VTklUX0tCJywKLSAgdmFyaWFibGUgPT4gJ1ZhY3V1bUJ1ZmZlclVz YWdlTGltaXQnLAotICBib290X3ZhbCA9PiAnMjA0OCcsCi0gIG1pbiA9PiAnMCcsCi0gIG1h eCA9PiAnTUFYX0JBU19WQUNfUklOR19TSVpFX0tCJywKLSAgY2hlY2tfaG9vayA9PiAnY2hl Y2tfdmFjdXVtX2J1ZmZlcl91c2FnZV9saW1pdCcsCi19LAotCiB7IG5hbWUgPT4gJ3ZhY3V1 bV9jb3N0X2RlbGF5JywgdHlwZSA9PiAncmVhbCcsIGNvbnRleHQgPT4gJ1BHQ19VU0VSU0VU JywgZ3JvdXAgPT4gJ1ZBQ1VVTV9DT1NUX0RFTEFZJywKICAgc2hvcnRfZGVzYyA9PiAnVmFj dXVtIGNvc3QgZGVsYXkgaW4gbWlsbGlzZWNvbmRzLicsCiAgIGZsYWdzID0+ICdHVUNfVU5J VF9NUycsCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9taXNjL3Bvc3RncmVzcWwu Y29uZi5zYW1wbGUgYi9zcmMvYmFja2VuZC91dGlscy9taXNjL3Bvc3RncmVzcWwuY29uZi5z YW1wbGUKaW5kZXggNzk1ODY1MzA3N2IuLmNiMWViOGVmM2ZmIDEwMDY0NAotLS0gYS9zcmMv YmFja2VuZC91dGlscy9taXNjL3Bvc3RncmVzcWwuY29uZi5zYW1wbGUKKysrIGIvc3JjL2Jh Y2tlbmQvdXRpbHMvbWlzYy9wb3N0Z3Jlc3FsLmNvbmYuc2FtcGxlCkBAIC0xNjQsOSArMTY0 LDYgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgbW1h cAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgKGNoYW5nZSBy ZXF1aXJlcyByZXN0YXJ0KQogI21pbl9keW5hbWljX3NoYXJlZF9tZW1vcnkgPSAwTUIgICAg ICAgICMgKGNoYW5nZSByZXF1aXJlcyByZXN0YXJ0KQotI3ZhY3V1bV9idWZmZXJfdXNhZ2Vf bGltaXQgPSAyTUIgICAgICAgICMgc2l6ZSBvZiB2YWN1dW0gYW5kIGFuYWx5emUgYnVmZmVy IGFjY2VzcyBzdHJhdGVneSByaW5nOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICMgMCB0byBkaXNhYmxlIHZhY3V1bSBidWZmZXIgYWNjZXNzIHN0cmF0ZWd5 OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgcmFuZ2UgMTI4 a0IgdG8gMTZHQgogCiAjIFNMUlUgYnVmZmVycyAoY2hhbmdlIHJlcXVpcmVzIHJlc3RhcnQp CiAjY29tbWl0X3RpbWVzdGFtcF9idWZmZXJzID0gMCAgICAgICAgICAgIyBtZW1vcnkgZm9y IHBnX2NvbW1pdF90cyAoMCA9IGF1dG8pCmRpZmYgLS1naXQgYS9zcmMvYmluL3NjcmlwdHMv dmFjdXVtZGIuYyBiL3NyYy9iaW4vc2NyaXB0cy92YWN1dW1kYi5jCmluZGV4IGY4MTU4Y2E2 YTc4Li5mNzhlNTdmZjJjMyAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9zY3JpcHRzL3ZhY3V1bWRi LmMKKysrIGIvc3JjL2Jpbi9zY3JpcHRzL3ZhY3V1bWRiLmMKQEAgLTU3LDcgKzU3LDYgQEAg bWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQogCQl7Im5vLXRydW5jYXRlIiwgbm9fYXJn dW1lbnQsIE5VTEwsIDEwfSwKIAkJeyJuby1wcm9jZXNzLXRvYXN0Iiwgbm9fYXJndW1lbnQs IE5VTEwsIDExfSwKIAkJeyJuby1wcm9jZXNzLW1haW4iLCBub19hcmd1bWVudCwgTlVMTCwg MTJ9LAotCQl7ImJ1ZmZlci11c2FnZS1saW1pdCIsIHJlcXVpcmVkX2FyZ3VtZW50LCBOVUxM LCAxM30sCiAJCXsibWlzc2luZy1zdGF0cy1vbmx5Iiwgbm9fYXJndW1lbnQsIE5VTEwsIDE0 fSwKIAkJeyJkcnktcnVuIiwgbm9fYXJndW1lbnQsIE5VTEwsIDE1fSwKIAkJe05VTEwsIDAs IE5VTEwsIDB9CkBAIC0yMDIsOSArMjAxLDYgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqYXJn dltdKQogCQkJY2FzZSAxMjoKIAkJCQl2YWNvcHRzLnByb2Nlc3NfbWFpbiA9IGZhbHNlOwog CQkJCWJyZWFrOwotCQkJY2FzZSAxMzoKLQkJCQl2YWNvcHRzLmJ1ZmZlcl91c2FnZV9saW1p dCA9IGVzY2FwZV9xdW90ZXMob3B0YXJnKTsKLQkJCQlicmVhazsKIAkJCWNhc2UgMTQ6CiAJ CQkJdmFjb3B0cy5taXNzaW5nX3N0YXRzX29ubHkgPSB0cnVlOwogCQkJCWJyZWFrOwpAQCAt MjkwLDE0ICsyODYsNiBAQCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCiAJCXBnX2Zh dGFsKCJjYW5ub3QgdXNlIHRoZSBcIiVzXCIgb3B0aW9uIHdpdGggdGhlIFwiJXNcIiBvcHRp b24iLAogCQkJCSAibm8taW5kZXgtY2xlYW51cCIsICJmb3JjZS1pbmRleC1jbGVhbnVwIik7 CiAKLQkvKgotCSAqIGJ1ZmZlci11c2FnZS1saW1pdCBpcyBub3QgYWxsb3dlZCB3aXRoIFZB Q1VVTSBGVUxMIHVubGVzcyBBTkFMWVpFIGlzCi0JICogaW5jbHVkZWQgdG9vLgotCSAqLwot CWlmICh2YWNvcHRzLmJ1ZmZlcl91c2FnZV9saW1pdCAmJiB2YWNvcHRzLmZ1bGwgJiYgIXZh Y29wdHMuYW5kX2FuYWx5emUpCi0JCXBnX2ZhdGFsKCJjYW5ub3QgdXNlIHRoZSBcIiVzXCIg b3B0aW9uIHdpdGggdGhlIFwiJXNcIiBvcHRpb24iLAotCQkJCSAiYnVmZmVyLXVzYWdlLWxp bWl0IiwgImZ1bGwiKTsKLQogCS8qCiAJICogUHJvaGliaXQgLS1taXNzaW5nLXN0YXRzLW9u bHkgd2l0aG91dCAtLWFuYWx5emUtb25seSBvcgogCSAqIC0tYW5hbHl6ZS1pbi1zdGFnZXMu CkBAIC0zNTIsNyArMzQwLDYgQEAgaGVscChjb25zdCBjaGFyICpwcm9nbmFtZSkKIAlwcmlu dGYoXygiICAlcyBbT1BUSU9OXS4uLiBbREJOQU1FXVxuIiksIHByb2duYW1lKTsKIAlwcmlu dGYoXygiXG5PcHRpb25zOlxuIikpOwogCXByaW50ZihfKCIgIC1hLCAtLWFsbCAgICAgICAg ICAgICAgICAgICAgICAgdmFjdXVtIGFsbCBkYXRhYmFzZXNcbiIpKTsKLQlwcmludGYoXygi ICAgICAgLS1idWZmZXItdXNhZ2UtbGltaXQ9U0laRSAgIHNpemUgb2YgcmluZyBidWZmZXIg dXNlZCBmb3IgdmFjdXVtXG4iKSk7CiAJcHJpbnRmKF8oIiAgLWQsIC0tZGJuYW1lPURCTkFN RSAgICAgICAgICAgICBkYXRhYmFzZSB0byB2YWN1dW1cbiIpKTsKIAlwcmludGYoXygiICAg ICAgLS1kaXNhYmxlLXBhZ2Utc2tpcHBpbmcgICAgIGRpc2FibGUgYWxsIHBhZ2Utc2tpcHBp bmcgYmVoYXZpb3JcbiIpKTsKIAlwcmludGYoXygiICAgICAgLS1kcnktcnVuICAgICAgICAg ICAgICAgICAgIHNob3cgdGhlIGNvbW1hbmRzIHRoYXQgd291bGQgYmUgc2VudCB0byB0aGUg c2VydmVyXG4iKSk7CmRpZmYgLS1naXQgYS9zcmMvYmluL3NjcmlwdHMvdmFjdXVtaW5nLmMg Yi9zcmMvYmluL3NjcmlwdHMvdmFjdXVtaW5nLmMKaW5kZXggODU1YTU3NTRjOTguLjA3OGEz YmJiNTE2IDEwMDY0NAotLS0gYS9zcmMvYmluL3NjcmlwdHMvdmFjdXVtaW5nLmMKKysrIGIv c3JjL2Jpbi9zY3JpcHRzL3ZhY3V1bWluZy5jCkBAIC0yNjQsMTMgKzI2NCw2IEBAIHZhY3V1 bV9vbmVfZGF0YWJhc2UoQ29ublBhcmFtcyAqY3BhcmFtcywKIAkJCQkgIi0tcGFyYWxsZWwi LCAiMTMiKTsKIAl9CiAKLQlpZiAodmFjb3B0cy0+YnVmZmVyX3VzYWdlX2xpbWl0ICYmIFBR c2VydmVyVmVyc2lvbihjb25uKSA8IDE2MDAwMCkKLQl7Ci0JCVBRZmluaXNoKGNvbm4pOwot CQlwZ19mYXRhbCgiY2Fubm90IHVzZSB0aGUgXCIlc1wiIG9wdGlvbiBvbiBzZXJ2ZXIgdmVy c2lvbnMgb2xkZXIgdGhhbiBQb3N0Z3JlU1FMICVzIiwKLQkJCQkgIi0tYnVmZmVyLXVzYWdl LWxpbWl0IiwgIjE2Iik7Ci0JfQotCiAJaWYgKHZhY29wdHMtPm1pc3Npbmdfc3RhdHNfb25s eSAmJiBQUXNlcnZlclZlcnNpb24oY29ubikgPCAxNTAwMDApCiAJewogCQlQUWZpbmlzaChj b25uKTsKQEAgLTg2NSwxMyArODU4LDYgQEAgcHJlcGFyZV92YWN1dW1fY29tbWFuZChQR2Nv bm4gKmNvbm4sIFBRRXhwQnVmZmVyIHNxbCwKIAkJCQlhcHBlbmRQUUV4cEJ1ZmZlcihzcWws ICIlc1ZFUkJPU0UiLCBzZXApOwogCQkJCXNlcCA9IGNvbW1hOwogCQkJfQotCQkJaWYgKHZh Y29wdHMtPmJ1ZmZlcl91c2FnZV9saW1pdCkKLQkJCXsKLQkJCQlBc3NlcnQoc2VydmVyVmVy c2lvbiA+PSAxNjAwMDApOwotCQkJCWFwcGVuZFBRRXhwQnVmZmVyKHNxbCwgIiVzQlVGRkVS X1VTQUdFX0xJTUlUICclcyciLCBzZXAsCi0JCQkJCQkJCSAgdmFjb3B0cy0+YnVmZmVyX3Vz YWdlX2xpbWl0KTsKLQkJCQlzZXAgPSBjb21tYTsKLQkJCX0KIAkJCWlmIChzZXAgIT0gcGFy ZW4pCiAJCQkJYXBwZW5kUFFFeHBCdWZmZXJDaGFyKHNxbCwgJyknKTsKIAkJfQpAQCAtOTc0 LDEzICs5NjAsNiBAQCBwcmVwYXJlX3ZhY3V1bV9jb21tYW5kKFBHY29ubiAqY29ubiwgUFFF eHBCdWZmZXIgc3FsLAogCQkJCQkJCQkgIHZhY29wdHMtPnBhcmFsbGVsX3dvcmtlcnMpOwog CQkJCXNlcCA9IGNvbW1hOwogCQkJfQotCQkJaWYgKHZhY29wdHMtPmJ1ZmZlcl91c2FnZV9s aW1pdCkKLQkJCXsKLQkJCQlBc3NlcnQoc2VydmVyVmVyc2lvbiA+PSAxNjAwMDApOwotCQkJ CWFwcGVuZFBRRXhwQnVmZmVyKHNxbCwgIiVzQlVGRkVSX1VTQUdFX0xJTUlUICclcyciLCBz ZXAsCi0JCQkJCQkJCSAgdmFjb3B0cy0+YnVmZmVyX3VzYWdlX2xpbWl0KTsKLQkJCQlzZXAg PSBjb21tYTsKLQkJCX0KIAkJCWlmIChzZXAgIT0gcGFyZW4pCiAJCQkJYXBwZW5kUFFFeHBC dWZmZXJDaGFyKHNxbCwgJyknKTsKIAkJfQpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9zY3JpcHRz L3ZhY3V1bWluZy5oIGIvc3JjL2Jpbi9zY3JpcHRzL3ZhY3V1bWluZy5oCmluZGV4IDVhNDkx ZGIyNTI2Li44M2EyNDY5YTZhYSAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9zY3JpcHRzL3ZhY3V1 bWluZy5oCisrKyBiL3NyYy9iaW4vc2NyaXB0cy92YWN1dW1pbmcuaApAQCAtNDksNyArNDks NiBAQCB0eXBlZGVmIHN0cnVjdCB2YWN1dW1pbmdPcHRpb25zCiAJYm9vbAkJcHJvY2Vzc19t YWluOwogCWJvb2wJCXByb2Nlc3NfdG9hc3Q7CiAJYm9vbAkJc2tpcF9kYXRhYmFzZV9zdGF0 czsKLQljaGFyCSAgICpidWZmZXJfdXNhZ2VfbGltaXQ7CiAJYm9vbAkJbWlzc2luZ19zdGF0 c19vbmx5OwogCWJvb2wJCWVjaG87CiAJYm9vbAkJcXVpZXQ7CmRpZmYgLS1naXQgYS9zcmMv aW5jbHVkZS9hY2Nlc3MvZ2VuYW0uaCBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9nZW5hbS5oCmlu ZGV4IDY4YmZlNDA1ZGIzLi5iYzg3ZjZmN2NjMCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUv YWNjZXNzL2dlbmFtLmgKKysrIGIvc3JjL2luY2x1ZGUvYWNjZXNzL2dlbmFtLmgKQEAgLTU4 LDcgKzU4LDYgQEAgdHlwZWRlZiBzdHJ1Y3QgSW5kZXhWYWN1dW1JbmZvCiAJYm9vbAkJZXN0 aW1hdGVkX2NvdW50OwkvKiBudW1faGVhcF90dXBsZXMgaXMgYW4gZXN0aW1hdGUgKi8KIAlp bnQJCQltZXNzYWdlX2xldmVsOwkvKiBlcmVwb3J0IGxldmVsIGZvciBwcm9ncmVzcyBtZXNz YWdlcyAqLwogCWRvdWJsZQkJbnVtX2hlYXBfdHVwbGVzOwkvKiB0dXBsZXMgcmVtYWluaW5n IGluIGhlYXAgKi8KLQlCdWZmZXJBY2Nlc3NTdHJhdGVneSBzdHJhdGVneTsJLyogYWNjZXNz IHN0cmF0ZWd5IGZvciByZWFkcyAqLwogfSBJbmRleFZhY3V1bUluZm87CiAKIC8qCmRpZmYg LS1naXQgYS9zcmMvaW5jbHVkZS9hY2Nlc3MvaGFzaC5oIGIvc3JjL2luY2x1ZGUvYWNjZXNz L2hhc2guaAppbmRleCBhODcwMmYwZTVlYS4uN2M5MjY4ZmU5NTMgMTAwNjQ0Ci0tLSBhL3Ny Yy9pbmNsdWRlL2FjY2Vzcy9oYXNoLmgKKysrIGIvc3JjL2luY2x1ZGUvYWNjZXNzL2hhc2gu aApAQCAtNDA1LDEyICs0MDUsMTEgQEAgZXh0ZXJuIHZvaWQgX2hhc2hfcGdhZGRtdWx0aXR1 cChSZWxhdGlvbiByZWwsIEJ1ZmZlciBidWYsIEluZGV4VHVwbGUgKml0dXBzLAogZXh0ZXJu IEJ1ZmZlciBfaGFzaF9hZGRvdmZscGFnZShSZWxhdGlvbiByZWwsIEJ1ZmZlciBtZXRhYnVm LCBCdWZmZXIgYnVmLCBib29sIHJldGFpbl9waW4pOwogZXh0ZXJuIEJsb2NrTnVtYmVyIF9o YXNoX2ZyZWVvdmZscGFnZShSZWxhdGlvbiByZWwsIEJ1ZmZlciBidWNrZXRidWYsIEJ1ZmZl ciBvdmZsYnVmLAogCQkJCQkJCQkJICBCdWZmZXIgd2J1ZiwgSW5kZXhUdXBsZSAqaXR1cHMs IE9mZnNldE51bWJlciAqaXR1cF9vZmZzZXRzLAotCQkJCQkJCQkJICBTaXplICp0dXBzX3Np emUsIHVpbnQxNiBuaXR1cHMsIEJ1ZmZlckFjY2Vzc1N0cmF0ZWd5IGJzdHJhdGVneSk7CisJ CQkJCQkJCQkgIFNpemUgKnR1cHNfc2l6ZSwgdWludDE2IG5pdHVwcyk7CiBleHRlcm4gdm9p ZCBfaGFzaF9pbml0Yml0bWFwYnVmZmVyKEJ1ZmZlciBidWYsIHVpbnQxNiBibXNpemUsIGJv b2wgaW5pdHBhZ2UpOwogZXh0ZXJuIHZvaWQgX2hhc2hfc3F1ZWV6ZWJ1Y2tldChSZWxhdGlv biByZWwsCiAJCQkJCQkJCUJ1Y2tldCBidWNrZXQsIEJsb2NrTnVtYmVyIGJ1Y2tldF9ibGtu bywKLQkJCQkJCQkJQnVmZmVyIGJ1Y2tldF9idWYsCi0JCQkJCQkJCUJ1ZmZlckFjY2Vzc1N0 cmF0ZWd5IGJzdHJhdGVneSk7CisJCQkJCQkJCUJ1ZmZlciBidWNrZXRfYnVmKTsKIGV4dGVy biB1aW50MzIgX2hhc2hfb3ZmbGJsa25vX3RvX2JpdG5vKEhhc2hNZXRhUGFnZSBtZXRhcCwg QmxvY2tOdW1iZXIgb3ZmbGJsa25vKTsKIAogLyogaGFzaHBhZ2UuYyAqLwpAQCAtNDI4LDkg KzQyNyw2IEBAIGV4dGVybiB2b2lkIF9oYXNoX2luaXRidWYoQnVmZmVyIGJ1ZiwgdWludDMy IG1heF9idWNrZXQsIHVpbnQzMiBudW1fYnVja2V0LAogCQkJCQkJICB1aW50MzIgZmxhZywg Ym9vbCBpbml0cGFnZSk7CiBleHRlcm4gQnVmZmVyIF9oYXNoX2dldG5ld2J1ZihSZWxhdGlv biByZWwsIEJsb2NrTnVtYmVyIGJsa25vLAogCQkJCQkJCSAgRm9ya051bWJlciBmb3JrTnVt KTsKLWV4dGVybiBCdWZmZXIgX2hhc2hfZ2V0YnVmX3dpdGhfc3RyYXRlZ3koUmVsYXRpb24g cmVsLCBCbG9ja051bWJlciBibGtubywKLQkJCQkJCQkJCQkgaW50IGFjY2VzcywgaW50IGZs YWdzLAotCQkJCQkJCQkJCSBCdWZmZXJBY2Nlc3NTdHJhdGVneSBic3RyYXRlZ3kpOwogZXh0 ZXJuIHZvaWQgX2hhc2hfcmVsYnVmKFJlbGF0aW9uIHJlbCwgQnVmZmVyIGJ1Zik7CiBleHRl cm4gdm9pZCBfaGFzaF9kcm9wYnVmKFJlbGF0aW9uIHJlbCwgQnVmZmVyIGJ1Zik7CiBleHRl cm4gdm9pZCBfaGFzaF9kcm9wc2NhbmJ1ZihSZWxhdGlvbiByZWwsIEhhc2hTY2FuT3BhcXVl IHNvKTsKQEAgLTQ4MSw3ICs0NzcsNiBAQCBleHRlcm4gdm9pZCBfaGFzaF9raWxsX2l0ZW1z KEluZGV4U2NhbkRlc2Mgc2Nhbik7CiAvKiBoYXNoLmMgKi8KIGV4dGVybiB2b2lkIGhhc2hi dWNrZXRjbGVhbnVwKFJlbGF0aW9uIHJlbCwgQnVja2V0IGN1cl9idWNrZXQsCiAJCQkJCQkJ ICBCdWZmZXIgYnVja2V0X2J1ZiwgQmxvY2tOdW1iZXIgYnVja2V0X2Jsa25vLAotCQkJCQkJ CSAgQnVmZmVyQWNjZXNzU3RyYXRlZ3kgYnN0cmF0ZWd5LAogCQkJCQkJCSAgdWludDMyIG1h eGJ1Y2tldCwgdWludDMyIGhpZ2htYXNrLCB1aW50MzIgbG93bWFzaywKIAkJCQkJCQkgIGRv dWJsZSAqdHVwbGVzX3JlbW92ZWQsIGRvdWJsZSAqbnVtX2luZGV4X3R1cGxlcywKIAkJCQkJ CQkgIGJvb2wgc3BsaXRfY2xlYW51cCwKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vz cy9oZWFwYW0uaCBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9oZWFwYW0uaAppbmRleCA1MTc2NDc4 YzI5NS4uMDk2N2I2NTk3OTQgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9oZWFw YW0uaAorKysgYi9zcmMvaW5jbHVkZS9hY2Nlc3MvaGVhcGFtLmgKQEAgLTcyLDggKzcyLDYg QEAgdHlwZWRlZiBzdHJ1Y3QgSGVhcFNjYW5EZXNjRGF0YQogCUJ1ZmZlcgkJcnNfY2J1ZjsJ CS8qIGN1cnJlbnQgYnVmZmVyIGluIHNjYW4sIGlmIGFueSAqLwogCS8qIE5COiBpZiByc19j YnVmIGlzIG5vdCBJbnZhbGlkQnVmZmVyLCB3ZSBob2xkIGEgcGluIG9uIHRoYXQgYnVmZmVy ICovCiAKLQlCdWZmZXJBY2Nlc3NTdHJhdGVneSByc19zdHJhdGVneTsJLyogYWNjZXNzIHN0 cmF0ZWd5IGZvciByZWFkcyAqLwotCiAJSGVhcFR1cGxlRGF0YSByc19jdHVwOwkJLyogY3Vy cmVudCB0dXBsZSBpbiBzY2FuLCBpZiBhbnkgKi8KIAogCS8qIEZvciBzY2FucyB0aGF0IHN0 cmVhbSByZWFkcyAqLwpAQCAtNDY2LDcgKzQ2NCw3IEBAIGV4dGVybiB2b2lkIGxvZ19oZWFw X3BydW5lX2FuZF9mcmVlemUoUmVsYXRpb24gcmVsYXRpb24sIEJ1ZmZlciBidWZmZXIsCiAK IC8qIGluIGhlYXAvdmFjdXVtbGF6eS5jICovCiBleHRlcm4gdm9pZCBoZWFwX3ZhY3V1bV9y ZWwoUmVsYXRpb24gcmVsLAotCQkJCQkJCWNvbnN0IFZhY3V1bVBhcmFtcyAqcGFyYW1zLCBC dWZmZXJBY2Nlc3NTdHJhdGVneSBic3RyYXRlZ3kpOworCQkJCQkJCWNvbnN0IFZhY3V1bVBh cmFtcyAqcGFyYW1zKTsKICNpZmRlZiBVU0VfQVNTRVJUX0NIRUNLSU5HCiBleHRlcm4gYm9v bCBoZWFwX3BhZ2VfaXNfYWxsX3Zpc2libGUoUmVsYXRpb24gcmVsLCBCdWZmZXIgYnVmLAog CQkJCQkJCQkJIEdsb2JhbFZpc1N0YXRlICp2aXN0ZXN0LApkaWZmIC0tZ2l0IGEvc3JjL2lu Y2x1ZGUvYWNjZXNzL2hpby5oIGIvc3JjL2luY2x1ZGUvYWNjZXNzL2hpby5oCmluZGV4IDYw Y2ZjMzc1ZmQ1Li42M2JmY2M4ODRlZSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvYWNjZXNz L2hpby5oCisrKyBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9oaW8uaApAQCAtMjgsNyArMjgsNiBA QAogICovCiB0eXBlZGVmIHN0cnVjdCBCdWxrSW5zZXJ0U3RhdGVEYXRhCiB7Ci0JQnVmZmVy QWNjZXNzU3RyYXRlZ3kgc3RyYXRlZ3k7CS8qIG91ciBCVUxLV1JJVEUgc3RyYXRlZ3kgb2Jq ZWN0ICovCiAJQnVmZmVyCQljdXJyZW50X2J1ZjsJLyogY3VycmVudCBpbnNlcnRpb24gdGFy Z2V0IHBhZ2UgKi8KIAogCS8qCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9hY2Nlc3MvdGFi bGVhbS5oIGIvc3JjL2luY2x1ZGUvYWNjZXNzL3RhYmxlYW0uaAppbmRleCBmMmMzNjY5NmJj YS4uODNiYTBmM2NhNzMgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2FjY2Vzcy90YWJsZWFt LmgKKysrIGIvc3JjL2luY2x1ZGUvYWNjZXNzL3RhYmxlYW0uaApAQCAtNjg5LDggKzY4OSw3 IEBAIHR5cGVkZWYgc3RydWN0IFRhYmxlQW1Sb3V0aW5lCiAJICogaW50ZWdyYXRlIHdpdGgg YXV0b3ZhY3V1bSdzIHNjaGVkdWxpbmcuCiAJICovCiAJdm9pZAkJKCpyZWxhdGlvbl92YWN1 dW0pIChSZWxhdGlvbiByZWwsCi0JCQkJCQkJCQljb25zdCBWYWN1dW1QYXJhbXMgKnBhcmFt cywKLQkJCQkJCQkJCUJ1ZmZlckFjY2Vzc1N0cmF0ZWd5IGJzdHJhdGVneSk7CisJCQkJCQkJ CQljb25zdCBWYWN1dW1QYXJhbXMgKnBhcmFtcyk7CiAKIAkvKgogCSAqIFByZXBhcmUgdG8g YW5hbHl6ZSBibG9jayBgYmxvY2tub2Agb2YgYHNjYW5gLiBUaGUgc2NhbiBoYXMgYmVlbiBz dGFydGVkCkBAIC0xNzc0LDEwICsxNzczLDkgQEAgdGFibGVfcmVsYXRpb25fY29weV9mb3Jf Y2x1c3RlcihSZWxhdGlvbiBPbGRUYWJsZSwgUmVsYXRpb24gTmV3VGFibGUsCiAgKiByb3V0 aW5lLCBldmVuIGlmIChmb3IgQU5BTFlaRSkgaXQgaXMgcGFydCBvZiB0aGUgc2FtZSBWQUNV VU0gY29tbWFuZC4KICAqLwogc3RhdGljIGlubGluZSB2b2lkCi10YWJsZV9yZWxhdGlvbl92 YWN1dW0oUmVsYXRpb24gcmVsLCBjb25zdCBWYWN1dW1QYXJhbXMgKnBhcmFtcywKLQkJCQkJ ICBCdWZmZXJBY2Nlc3NTdHJhdGVneSBic3RyYXRlZ3kpCit0YWJsZV9yZWxhdGlvbl92YWN1 dW0oUmVsYXRpb24gcmVsLCBjb25zdCBWYWN1dW1QYXJhbXMgKnBhcmFtcykKIHsKLQlyZWwt PnJkX3RhYmxlYW0tPnJlbGF0aW9uX3ZhY3V1bShyZWwsIHBhcmFtcywgYnN0cmF0ZWd5KTsK KwlyZWwtPnJkX3RhYmxlYW0tPnJlbGF0aW9uX3ZhY3V1bShyZWwsIHBhcmFtcyk7CiB9CiAK IC8qCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9jb21tYW5kcy92YWN1dW0uaCBiL3NyYy9p bmNsdWRlL2NvbW1hbmRzL3ZhY3V1bS5oCmluZGV4IDk1NmQ5Y2VhMzZkLi4xNGE5YjUzMGJj ZiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvY29tbWFuZHMvdmFjdXVtLmgKKysrIGIvc3Jj L2luY2x1ZGUvY29tbWFuZHMvdmFjdXVtLmgKQEAgLTM2Myw3ICszNjMsNyBAQCBleHRlcm4g UEdETExJTVBPUlQgaW50NjQgcGFyYWxsZWxfdmFjdXVtX3dvcmtlcl9kZWxheV9uczsKIC8q IGluIGNvbW1hbmRzL3ZhY3V1bS5jICovCiBleHRlcm4gdm9pZCBFeGVjVmFjdXVtKFBhcnNl U3RhdGUgKnBzdGF0ZSwgVmFjdXVtU3RtdCAqdmFjc3RtdCwgYm9vbCBpc1RvcExldmVsKTsK IGV4dGVybiB2b2lkIHZhY3V1bShMaXN0ICpyZWxhdGlvbnMsIGNvbnN0IFZhY3V1bVBhcmFt cyAqcGFyYW1zLAotCQkJCSAgIEJ1ZmZlckFjY2Vzc1N0cmF0ZWd5IGJzdHJhdGVneSwgTWVt b3J5Q29udGV4dCB2YWNfY29udGV4dCwKKwkJCQkgICBNZW1vcnlDb250ZXh0IHZhY19jb250 ZXh0LAogCQkJCSAgIGJvb2wgaXNUb3BMZXZlbCk7CiBleHRlcm4gdm9pZCB2YWNfb3Blbl9p bmRleGVzKFJlbGF0aW9uIHJlbGF0aW9uLCBMT0NLTU9ERSBsb2NrbW9kZSwKIAkJCQkJCQkg aW50ICpuaW5kZXhlcywgUmVsYXRpb24gKipJcmVsKTsKQEAgLTQwNyw4ICs0MDcsNyBAQCBl eHRlcm4gdm9pZCBWYWN1dW1VcGRhdGVDb3N0cyh2b2lkKTsKIC8qIGluIGNvbW1hbmRzL3Zh Y3V1bXBhcmFsbGVsLmMgKi8KIGV4dGVybiBQYXJhbGxlbFZhY3V1bVN0YXRlICpwYXJhbGxl bF92YWN1dW1faW5pdChSZWxhdGlvbiByZWwsIFJlbGF0aW9uICppbmRyZWxzLAogCQkJCQkJ CQkJCQkJIGludCBuaW5kZXhlcywgaW50IG5yZXF1ZXN0ZWRfd29ya2VycywKLQkJCQkJCQkJ CQkJCSBpbnQgdmFjX3dvcmtfbWVtLCBpbnQgZWxldmVsLAotCQkJCQkJCQkJCQkJIEJ1ZmZl ckFjY2Vzc1N0cmF0ZWd5IGJzdHJhdGVneSk7CisJCQkJCQkJCQkJCQkgaW50IHZhY193b3Jr X21lbSwgaW50IGVsZXZlbCk7CiBleHRlcm4gdm9pZCBwYXJhbGxlbF92YWN1dW1fZW5kKFBh cmFsbGVsVmFjdXVtU3RhdGUgKnB2cywgSW5kZXhCdWxrRGVsZXRlUmVzdWx0ICoqaXN0YXRz KTsKIGV4dGVybiBUaWRTdG9yZSAqcGFyYWxsZWxfdmFjdXVtX2dldF9kZWFkX2l0ZW1zKFBh cmFsbGVsVmFjdXVtU3RhdGUgKnB2cywKIAkJCQkJCQkJCQkJCVZhY0RlYWRJdGVtc0luZm8g KipkZWFkX2l0ZW1zX2luZm9fcCk7CkBAIC00MjgsOCArNDI3LDcgQEAgZXh0ZXJuIHZvaWQg cGFyYWxsZWxfdmFjdXVtX21haW4oZHNtX3NlZ21lbnQgKnNlZywgc2htX3RvYyAqdG9jKTsK IAogLyogaW4gY29tbWFuZHMvYW5hbHl6ZS5jICovCiBleHRlcm4gdm9pZCBhbmFseXplX3Jl bChPaWQgcmVsaWQsIFJhbmdlVmFyICpyZWxhdGlvbiwKLQkJCQkJCWNvbnN0IFZhY3V1bVBh cmFtcyAqcGFyYW1zLCBMaXN0ICp2YV9jb2xzLCBib29sIGluX291dGVyX3hhY3QsCi0JCQkJ CQlCdWZmZXJBY2Nlc3NTdHJhdGVneSBic3RyYXRlZ3kpOworCQkJCQkJY29uc3QgVmFjdXVt UGFyYW1zICpwYXJhbXMsIExpc3QgKnZhX2NvbHMsIGJvb2wgaW5fb3V0ZXJfeGFjdCk7CiBl eHRlcm4gYm9vbCBhdHRyaWJ1dGVfaXNfYW5hbHl6YWJsZShSZWxhdGlvbiBvbmVyZWwsIGlu dCBhdHRudW0sIEZvcm1fcGdfYXR0cmlidXRlIGF0dHIsCiAJCQkJCQkJCQlpbnQgKnBfYXR0 c3RhdHRhcmdldCk7CiBleHRlcm4gYm9vbCBzdGRfdHlwYW5hbHl6ZShWYWNBdHRyU3RhdHMg KnN0YXRzKTsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL21pc2NhZG1pbi5oIGIvc3JjL2lu Y2x1ZGUvbWlzY2FkbWluLmgKaW5kZXggNzE3MGE0YmZmOTguLmM1ZDU4MmIxNTJiIDEwMDY0 NAotLS0gYS9zcmMvaW5jbHVkZS9taXNjYWRtaW4uaAorKysgYi9zcmMvaW5jbHVkZS9taXNj YWRtaW4uaApAQCAtMjczLDE1ICsyNzMsNiBAQCBleHRlcm4gUEdETExJTVBPUlQgZG91Ymxl IGhhc2hfbWVtX211bHRpcGxpZXI7CiBleHRlcm4gUEdETExJTVBPUlQgaW50IG1haW50ZW5h bmNlX3dvcmtfbWVtOwogZXh0ZXJuIFBHRExMSU1QT1JUIGludCBtYXhfcGFyYWxsZWxfbWFp bnRlbmFuY2Vfd29ya2VyczsKIAotLyoKLSAqIFVwcGVyIGFuZCBsb3dlciBoYXJkIGxpbWl0 cyBmb3IgdGhlIGJ1ZmZlciBhY2Nlc3Mgc3RyYXRlZ3kgcmluZyBzaXplCi0gKiBzcGVjaWZp ZWQgYnkgdGhlIFZhY3V1bUJ1ZmZlclVzYWdlTGltaXQgR1VDIGFuZCBCVUZGRVJfVVNBR0Vf TElNSVQgb3B0aW9uCi0gKiB0byBWQUNVVU0gYW5kIEFOQUxZWkUuCi0gKi8KLSNkZWZpbmUg TUlOX0JBU19WQUNfUklOR19TSVpFX0tCIDEyOAotI2RlZmluZSBNQVhfQkFTX1ZBQ19SSU5H X1NJWkVfS0IgKDE2ICogMTAyNCAqIDEwMjQpCi0KLWV4dGVybiBQR0RMTElNUE9SVCBpbnQg VmFjdXVtQnVmZmVyVXNhZ2VMaW1pdDsKIGV4dGVybiBQR0RMTElNUE9SVCBpbnQgVmFjdXVt Q29zdFBhZ2VIaXQ7CiBleHRlcm4gUEdETExJTVBPUlQgaW50IFZhY3V1bUNvc3RQYWdlTWlz czsKIGV4dGVybiBQR0RMTElNUE9SVCBpbnQgVmFjdXVtQ29zdFBhZ2VEaXJ0eTsKZGlmZiAt LWdpdCBhL3NyYy9pbmNsdWRlL3Bnc3RhdC5oIGIvc3JjL2luY2x1ZGUvcGdzdGF0LmgKaW5k ZXggNThhNDQ4NTdmMTMuLjY4YjRlNTA5M2EyIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9w Z3N0YXQuaAorKysgYi9zcmMvaW5jbHVkZS9wZ3N0YXQuaApAQCAtMjg3LDE0ICsyODcsMTEg QEAgdHlwZWRlZiBlbnVtIElPT2JqZWN0CiAKIHR5cGVkZWYgZW51bSBJT0NvbnRleHQKIHsK LQlJT0NPTlRFWFRfQlVMS1JFQUQsCi0JSU9DT05URVhUX0JVTEtXUklURSwKIAlJT0NPTlRF WFRfSU5JVCwKIAlJT0NPTlRFWFRfTk9STUFMLAotCUlPQ09OVEVYVF9WQUNVVU0sCiB9IElP Q29udGV4dDsKIAotI2RlZmluZSBJT0NPTlRFWFRfTlVNX1RZUEVTIChJT0NPTlRFWFRfVkFD VVVNICsgMSkKKyNkZWZpbmUgSU9DT05URVhUX05VTV9UWVBFUyAoSU9DT05URVhUX05PUk1B TCArIDEpCiAKIC8qCiAgKiBFbnVtZXJhdGlvbiBvZiBJTyBvcGVyYXRpb25zLgpkaWZmIC0t Z2l0IGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9idWYuaCBiL3NyYy9pbmNsdWRlL3N0b3JhZ2Uv YnVmLmgKaW5kZXggYjIxNDQ1NTIyYjEuLmZhOTQyYTY0ZjA1IDEwMDY0NAotLS0gYS9zcmMv aW5jbHVkZS9zdG9yYWdlL2J1Zi5oCisrKyBiL3NyYy9pbmNsdWRlL3N0b3JhZ2UvYnVmLmgK QEAgLTM2LDExICszNiw0IEBAIHR5cGVkZWYgaW50IEJ1ZmZlcjsKICAqLwogI2RlZmluZSBC dWZmZXJJc0xvY2FsKGJ1ZmZlcikJKChidWZmZXIpIDwgMCkKIAotLyoKLSAqIEJ1ZmZlciBh Y2Nlc3Mgc3RyYXRlZ3kgb2JqZWN0cy4KLSAqCi0gKiBCdWZmZXJBY2Nlc3NTdHJhdGVneURh dGEgaXMgcHJpdmF0ZSB0byBmcmVlbGlzdC5jCi0gKi8KLXR5cGVkZWYgc3RydWN0IEJ1ZmZl ckFjY2Vzc1N0cmF0ZWd5RGF0YSAqQnVmZmVyQWNjZXNzU3RyYXRlZ3k7Ci0KICNlbmRpZgkJ CQkJCQkvKiBCVUZfSCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9idWZf aW50ZXJuYWxzLmggYi9zcmMvaW5jbHVkZS9zdG9yYWdlL2J1Zl9pbnRlcm5hbHMuaAppbmRl eCAxMzFkZjEyNmNkYS4uM2I0NGFkM2UwYjYgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3N0 b3JhZ2UvYnVmX2ludGVybmFscy5oCisrKyBiL3NyYy9pbmNsdWRlL3N0b3JhZ2UvYnVmX2lu dGVybmFscy5oCkBAIC02MzIsMTEgKzYzMiw3IEBAIGV4dGVybiB2b2lkIFRlcm1pbmF0ZUJ1 ZmZlcklPKEJ1ZmZlckRlc2MgKmJ1ZiwgYm9vbCBjbGVhcl9kaXJ0eSwgdWludDY0IHNldF9m bGFnCiAKIAogLyogZnJlZWxpc3QuYyAqLwotZXh0ZXJuIElPQ29udGV4dCBJT0NvbnRleHRG b3JTdHJhdGVneShCdWZmZXJBY2Nlc3NTdHJhdGVneSBzdHJhdGVneSk7Ci1leHRlcm4gQnVm ZmVyRGVzYyAqU3RyYXRlZ3lHZXRCdWZmZXIoQnVmZmVyQWNjZXNzU3RyYXRlZ3kgc3RyYXRl Z3ksCi0JCQkJCQkJCQkgdWludDY0ICpidWZfc3RhdGUsIGJvb2wgKmZyb21fcmluZyk7Ci1l eHRlcm4gYm9vbCBTdHJhdGVneVJlamVjdEJ1ZmZlcihCdWZmZXJBY2Nlc3NTdHJhdGVneSBz dHJhdGVneSwKLQkJCQkJCQkJIEJ1ZmZlckRlc2MgKmJ1ZiwgYm9vbCBmcm9tX3JpbmcpOwor ZXh0ZXJuIEJ1ZmZlckRlc2MgKlN0cmF0ZWd5R2V0QnVmZmVyKHVpbnQ2NCAqYnVmX3N0YXRl KTsKIAogZXh0ZXJuIGludAlTdHJhdGVneVN5bmNTdGFydCh1aW50MzIgKmNvbXBsZXRlX3Bh c3NlcywgdWludDMyICpudW1fYnVmX2FsbG9jKTsKIGV4dGVybiB2b2lkIFN0cmF0ZWd5Tm90 aWZ5QmdXcml0ZXIoaW50IGJnd3Byb2Nubyk7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9z dG9yYWdlL2J1Zm1nci5oIGIvc3JjL2luY2x1ZGUvc3RvcmFnZS9idWZtZ3IuaAppbmRleCA2 ODM3YjM1ZmM2ZC4uMzYwMjM3OTJmMzYgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3N0b3Jh Z2UvYnVmbWdyLmgKKysrIGIvc3JjL2luY2x1ZGUvc3RvcmFnZS9idWZtZ3IuaApAQCAtMjUs MjEgKzI1LDYgQEAKIAogdHlwZWRlZiB2b2lkICpCbG9jazsKIAotLyoKLSAqIFBvc3NpYmxl IGFyZ3VtZW50cyBmb3IgR2V0QWNjZXNzU3RyYXRlZ3koKS4KLSAqCi0gKiBJZiBhZGRpbmcg YSBuZXcgQnVmZmVyQWNjZXNzU3RyYXRlZ3lUeXBlLCBhbHNvIGFkZCBhIG5ldyBJT0NvbnRl eHQgc28KLSAqIElPIHN0YXRpc3RpY3MgdXNpbmcgdGhpcyBzdHJhdGVneSBhcmUgdHJhY2tl ZC4KLSAqLwotdHlwZWRlZiBlbnVtIEJ1ZmZlckFjY2Vzc1N0cmF0ZWd5VHlwZQotewotCUJB U19OT1JNQUwsCQkJCQkvKiBOb3JtYWwgcmFuZG9tIGFjY2VzcyAqLwotCUJBU19CVUxLUkVB RCwJCQkJLyogTGFyZ2UgcmVhZC1vbmx5IHNjYW4gKGhpbnQgYml0IHVwZGF0ZXMgYXJlCi0J CQkJCQkJCSAqIG9rKSAqLwotCUJBU19CVUxLV1JJVEUsCQkJCS8qIExhcmdlIG11bHRpLWJs b2NrIHdyaXRlIChlLmcuIENPUFkgSU4pICovCi0JQkFTX1ZBQ1VVTSwJCQkJCS8qIFZBQ1VV TSAqLwotfSBCdWZmZXJBY2Nlc3NTdHJhdGVneVR5cGU7Ci0KIC8qIFBvc3NpYmxlIG1vZGVz IGZvciBSZWFkQnVmZmVyRXh0ZW5kZWQoKSAqLwogdHlwZWRlZiBlbnVtCiB7CkBAIC0xMzUs NyArMTIwLDYgQEAgc3RydWN0IFJlYWRCdWZmZXJzT3BlcmF0aW9uCiAJU01nclJlbGF0aW9u IHNtZ3I7CiAJY2hhcgkJcGVyc2lzdGVuY2U7CiAJRm9ya051bWJlcglmb3JrbnVtOwotCUJ1 ZmZlckFjY2Vzc1N0cmF0ZWd5IHN0cmF0ZWd5OwogCiAJLyoKIAkgKiBUaGUgZm9sbG93aW5n IHByaXZhdGUgbWVtYmVycyBhcmUgcHJpdmF0ZSBzdGF0ZSBmb3IgY29tbXVuaWNhdGlvbgpA QCAtMjM1LDExICsyMTksMTAgQEAgZXh0ZXJuIGJvb2wgUmVhZFJlY2VudEJ1ZmZlcihSZWxG aWxlTG9jYXRvciBybG9jYXRvciwgRm9ya051bWJlciBmb3JrTnVtLAogCQkJCQkJCSBCbG9j a051bWJlciBibG9ja051bSwgQnVmZmVyIHJlY2VudF9idWZmZXIpOwogZXh0ZXJuIEJ1ZmZl ciBSZWFkQnVmZmVyKFJlbGF0aW9uIHJlbG4sIEJsb2NrTnVtYmVyIGJsb2NrTnVtKTsKIGV4 dGVybiBCdWZmZXIgUmVhZEJ1ZmZlckV4dGVuZGVkKFJlbGF0aW9uIHJlbG4sIEZvcmtOdW1i ZXIgZm9ya051bSwKLQkJCQkJCQkJIEJsb2NrTnVtYmVyIGJsb2NrTnVtLCBSZWFkQnVmZmVy TW9kZSBtb2RlLAotCQkJCQkJCQkgQnVmZmVyQWNjZXNzU3RyYXRlZ3kgc3RyYXRlZ3kpOwor CQkJCQkJCQkgQmxvY2tOdW1iZXIgYmxvY2tOdW0sIFJlYWRCdWZmZXJNb2RlIG1vZGUpOwog ZXh0ZXJuIEJ1ZmZlciBSZWFkQnVmZmVyV2l0aG91dFJlbGNhY2hlKFJlbEZpbGVMb2NhdG9y IHJsb2NhdG9yLAogCQkJCQkJCQkJCUZvcmtOdW1iZXIgZm9ya051bSwgQmxvY2tOdW1iZXIg YmxvY2tOdW0sCi0JCQkJCQkJCQkJUmVhZEJ1ZmZlck1vZGUgbW9kZSwgQnVmZmVyQWNjZXNz U3RyYXRlZ3kgc3RyYXRlZ3ksCisJCQkJCQkJCQkJUmVhZEJ1ZmZlck1vZGUgbW9kZSwKIAkJ CQkJCQkJCQlib29sIHBlcm1hbmVudCk7CiAKIGV4dGVybiBib29sIFN0YXJ0UmVhZEJ1ZmZl cihSZWFkQnVmZmVyc09wZXJhdGlvbiAqb3BlcmF0aW9uLApAQCAtMjY2LDE4ICsyNDksMTUg QEAgZXh0ZXJuIEJ1ZmZlciBSZWxlYXNlQW5kUmVhZEJ1ZmZlcihCdWZmZXIgYnVmZmVyLCBS ZWxhdGlvbiByZWxhdGlvbiwKIAogZXh0ZXJuIEJ1ZmZlciBFeHRlbmRCdWZmZXJlZFJlbChC dWZmZXJNYW5hZ2VyUmVsYXRpb24gYm1yLAogCQkJCQkJCQlGb3JrTnVtYmVyIGZvcmtOdW0s Ci0JCQkJCQkJCUJ1ZmZlckFjY2Vzc1N0cmF0ZWd5IHN0cmF0ZWd5LAogCQkJCQkJCQl1aW50 MzIgZmxhZ3MpOwogZXh0ZXJuIEJsb2NrTnVtYmVyIEV4dGVuZEJ1ZmZlcmVkUmVsQnkoQnVm ZmVyTWFuYWdlclJlbGF0aW9uIGJtciwKIAkJCQkJCQkJCSAgIEZvcmtOdW1iZXIgZm9yaywK LQkJCQkJCQkJCSAgIEJ1ZmZlckFjY2Vzc1N0cmF0ZWd5IHN0cmF0ZWd5LAogCQkJCQkJCQkJ ICAgdWludDMyIGZsYWdzLAogCQkJCQkJCQkJICAgdWludDMyIGV4dGVuZF9ieSwKIAkJCQkJ CQkJCSAgIEJ1ZmZlciAqYnVmZmVycywKIAkJCQkJCQkJCSAgIHVpbnQzMiAqZXh0ZW5kZWRf YnkpOwogZXh0ZXJuIEJ1ZmZlciBFeHRlbmRCdWZmZXJlZFJlbFRvKEJ1ZmZlck1hbmFnZXJS ZWxhdGlvbiBibXIsCiAJCQkJCQkJCSAgRm9ya051bWJlciBmb3JrLAotCQkJCQkJCQkgIEJ1 ZmZlckFjY2Vzc1N0cmF0ZWd5IHN0cmF0ZWd5LAogCQkJCQkJCQkgIHVpbnQzMiBmbGFncywK IAkJCQkJCQkJICBCbG9ja051bWJlciBleHRlbmRfdG8sCiAJCQkJCQkJCSAgUmVhZEJ1ZmZl ck1vZGUgbW9kZSk7CkBAIC0zNzYsMTQgKzM1Niw2IEBAIGV4dGVybiB2b2lkIEF0UHJvY0V4 aXRfTG9jYWxCdWZmZXJzKHZvaWQpOwogCiAvKiBpbiBmcmVlbGlzdC5jICovCiAKLWV4dGVy biBCdWZmZXJBY2Nlc3NTdHJhdGVneSBHZXRBY2Nlc3NTdHJhdGVneShCdWZmZXJBY2Nlc3NT dHJhdGVneVR5cGUgYnR5cGUpOwotZXh0ZXJuIEJ1ZmZlckFjY2Vzc1N0cmF0ZWd5IEdldEFj Y2Vzc1N0cmF0ZWd5V2l0aFNpemUoQnVmZmVyQWNjZXNzU3RyYXRlZ3lUeXBlIGJ0eXBlLAot CQkJCQkJCQkJCQkJCSAgaW50IHJpbmdfc2l6ZV9rYik7Ci1leHRlcm4gaW50CUdldEFjY2Vz c1N0cmF0ZWd5QnVmZmVyQ291bnQoQnVmZmVyQWNjZXNzU3RyYXRlZ3kgc3RyYXRlZ3kpOwot ZXh0ZXJuIGludAlHZXRBY2Nlc3NTdHJhdGVneVBpbkxpbWl0KEJ1ZmZlckFjY2Vzc1N0cmF0 ZWd5IHN0cmF0ZWd5KTsKLQotZXh0ZXJuIHZvaWQgRnJlZUFjY2Vzc1N0cmF0ZWd5KEJ1ZmZl ckFjY2Vzc1N0cmF0ZWd5IHN0cmF0ZWd5KTsKLQogCiAvKiBpbmxpbmUgZnVuY3Rpb25zICov CiAKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3N0b3JhZ2UvcmVhZF9zdHJlYW0uaCBiL3Ny Yy9pbmNsdWRlL3N0b3JhZ2UvcmVhZF9zdHJlYW0uaAppbmRleCA0ODk5NWM2ZDUzNC4uOWU1 ZmJiZWQ5ZTggMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3N0b3JhZ2UvcmVhZF9zdHJlYW0u aAorKysgYi9zcmMvaW5jbHVkZS9zdG9yYWdlL3JlYWRfc3RyZWFtLmgKQEAgLTgzLDE3ICs4 MywxNCBAQCBleHRlcm4gQmxvY2tOdW1iZXIgYmxvY2tfcmFuZ2VfcmVhZF9zdHJlYW1fY2Io UmVhZFN0cmVhbSAqc3RyZWFtLAogCQkJCQkJCQkJCQkgIHZvaWQgKmNhbGxiYWNrX3ByaXZh dGVfZGF0YSwKIAkJCQkJCQkJCQkJICB2b2lkICpwZXJfYnVmZmVyX2RhdGEpOwogZXh0ZXJu IFJlYWRTdHJlYW0gKnJlYWRfc3RyZWFtX2JlZ2luX3JlbGF0aW9uKGludCBmbGFncywKLQkJ CQkJCQkJCQkJICBCdWZmZXJBY2Nlc3NTdHJhdGVneSBzdHJhdGVneSwKIAkJCQkJCQkJCQkJ ICBSZWxhdGlvbiByZWwsCiAJCQkJCQkJCQkJCSAgRm9ya051bWJlciBmb3JrbnVtLAogCQkJ CQkJCQkJCQkgIFJlYWRTdHJlYW1CbG9ja051bWJlckNCIGNhbGxiYWNrLAogCQkJCQkJCQkJ CQkgIHZvaWQgKmNhbGxiYWNrX3ByaXZhdGVfZGF0YSwKIAkJCQkJCQkJCQkJICBzaXplX3Qg cGVyX2J1ZmZlcl9kYXRhX3NpemUpOwogZXh0ZXJuIEJ1ZmZlciByZWFkX3N0cmVhbV9uZXh0 X2J1ZmZlcihSZWFkU3RyZWFtICpzdHJlYW0sIHZvaWQgKipwZXJfYnVmZmVyX2RhdGEpOwot ZXh0ZXJuIEJsb2NrTnVtYmVyIHJlYWRfc3RyZWFtX25leHRfYmxvY2soUmVhZFN0cmVhbSAq c3RyZWFtLAotCQkJCQkJCQkJCSAgQnVmZmVyQWNjZXNzU3RyYXRlZ3kgKnN0cmF0ZWd5KTsK K2V4dGVybiBCbG9ja051bWJlciByZWFkX3N0cmVhbV9uZXh0X2Jsb2NrKFJlYWRTdHJlYW0g KnN0cmVhbSk7CiBleHRlcm4gUmVhZFN0cmVhbSAqcmVhZF9zdHJlYW1fYmVnaW5fc21ncl9y ZWxhdGlvbihpbnQgZmxhZ3MsCi0JCQkJCQkJCQkJCQkgICBCdWZmZXJBY2Nlc3NTdHJhdGVn eSBzdHJhdGVneSwKIAkJCQkJCQkJCQkJCSAgIFNNZ3JSZWxhdGlvbiBzbWdyLAogCQkJCQkJ CQkJCQkJICAgY2hhciBzbWdyX3BlcnNpc3RlbmNlLAogCQkJCQkJCQkJCQkJICAgRm9ya051 bWJlciBmb3JrbnVtLApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvdXRpbHMvZ3VjX2hvb2tz LmggYi9zcmMvaW5jbHVkZS91dGlscy9ndWNfaG9va3MuaAppbmRleCAzMDdmNGZiYWVmZS4u M2YyODU1OGQ0N2MgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3V0aWxzL2d1Y19ob29rcy5o CisrKyBiL3NyYy9pbmNsdWRlL3V0aWxzL2d1Y19ob29rcy5oCkBAIC0zMSw4ICszMSw2IEBA IGV4dGVybiB2b2lkIGFzc2lnbl9hcHBsaWNhdGlvbl9uYW1lKGNvbnN0IGNoYXIgKm5ld3Zh bCwgdm9pZCAqZXh0cmEpOwogZXh0ZXJuIGNvbnN0IGNoYXIgKnNob3dfYXJjaGl2ZV9jb21t YW5kKHZvaWQpOwogZXh0ZXJuIGJvb2wgY2hlY2tfYXV0b3ZhY3V1bV93b3JrX21lbShpbnQg Km5ld3ZhbCwgdm9pZCAqKmV4dHJhLAogCQkJCQkJCQkJICBHdWNTb3VyY2Ugc291cmNlKTsK LWV4dGVybiBib29sIGNoZWNrX3ZhY3V1bV9idWZmZXJfdXNhZ2VfbGltaXQoaW50ICpuZXd2 YWwsIHZvaWQgKipleHRyYSwKLQkJCQkJCQkJCQkJR3VjU291cmNlIHNvdXJjZSk7CiBleHRl cm4gYm9vbCBjaGVja19iYWNrdHJhY2VfZnVuY3Rpb25zKGNoYXIgKipuZXd2YWwsIHZvaWQg KipleHRyYSwKIAkJCQkJCQkJCSAgR3VjU291cmNlIHNvdXJjZSk7CiBleHRlcm4gdm9pZCBh c3NpZ25fYmFja3RyYWNlX2Z1bmN0aW9ucyhjb25zdCBjaGFyICpuZXd2YWwsIHZvaWQgKmV4 dHJhKTsKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9haW8vdGVzdF9haW8u YyBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9haW8vdGVzdF9haW8uYwppbmRleCA2MjcwNzc1 YWY3Yy4uOGQ3YjJhNzI4ZDYgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9h aW8vdGVzdF9haW8uYworKysgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfYWlvL3Rlc3RfYWlv LmMKQEAgLTE5NCw3ICsxOTQsNiBAQCBncm93X3JlbChQR19GVU5DVElPTl9BUkdTKQogCiAJ CUV4dGVuZEJ1ZmZlcmVkUmVsQnkoQk1SX1JFTChyZWwpLAogCQkJCQkJCU1BSU5fRk9SS05V TSwKLQkJCQkJCQlOVUxMLAogCQkJCQkJCTAsCiAJCQkJCQkJZXh0ZW5kX2J5X3BhZ2VzLAog CQkJCQkJCXZpY3RpbV9idWZmZXJzLApAQCAtMjMxLDcgKzIzMCw3IEBAIG1vZGlmeV9yZWxf YmxvY2soUEdfRlVOQ1RJT05fQVJHUykKIAlyZWwgPSByZWxhdGlvbl9vcGVuKHJlbGlkLCBB Y2Nlc3NFeGNsdXNpdmVMb2NrKTsKIAogCWJ1ZiA9IFJlYWRCdWZmZXJFeHRlbmRlZChyZWws IE1BSU5fRk9SS05VTSwgYmxrbm8sCi0JCQkJCQkJIFJCTV9aRVJPX09OX0VSUk9SLCBOVUxM KTsKKwkJCQkJCQkgUkJNX1pFUk9fT05fRVJST1IpOwogCiAJTG9ja0J1ZmZlcihidWYsIEJV RkZFUl9MT0NLX0VYQ0xVU0lWRSk7CiAKQEAgLTMzMSw3ICszMzAsNyBAQCBjcmVhdGVfdG95 X2J1ZmZlcihSZWxhdGlvbiByZWwsIEJsb2NrTnVtYmVyIGJsa25vKQogCXVpbnQ2NAkJdW5z ZXRfYml0cyA9IDA7CiAKIAkvKiBwbGFjZSBidWZmZXIgaW4gc2hhcmVkIGJ1ZmZlcnMgd2l0 aG91dCBlcnJvcmluZyBvdXQgKi8KLQlidWYgPSBSZWFkQnVmZmVyRXh0ZW5kZWQocmVsLCBN QUlOX0ZPUktOVU0sIGJsa25vLCBSQk1fWkVST19BTkRfTE9DSywgTlVMTCk7CisJYnVmID0g UmVhZEJ1ZmZlckV4dGVuZGVkKHJlbCwgTUFJTl9GT1JLTlVNLCBibGtubywgUkJNX1pFUk9f QU5EX0xPQ0spOwogCUxvY2tCdWZmZXIoYnVmLCBCVUZGRVJfTE9DS19VTkxPQ0spOwogCiAJ aWYgKFJlbGF0aW9uVXNlc0xvY2FsQnVmZmVycyhyZWwpKQpAQCAtNzM3LDcgKzczNiw2IEBA IHJlYWRfYnVmZmVycyhQR19GVU5DVElPTl9BUkdTKQogCQlvcGVyYXRpb24tPnJlbCA9IHJl bDsKIAkJb3BlcmF0aW9uLT5zbWdyID0gc21ncjsKIAkJb3BlcmF0aW9uLT5wZXJzaXN0ZW5j ZSA9IHJlbC0+cmRfcmVsLT5yZWxwZXJzaXN0ZW5jZTsKLQkJb3BlcmF0aW9uLT5zdHJhdGVn eSA9IE5VTEw7CiAJCW9wZXJhdGlvbi0+Zm9ya251bSA9IE1BSU5fRk9SS05VTTsKIAogCQlp b19yZXFkc1tuaW9zXSA9IFN0YXJ0UmVhZEJ1ZmZlcnMob3BlcmF0aW9uLApAQCAtODc5LDcg Kzg3Nyw2IEBAIHJlYWRfc3RyZWFtX2Zvcl9ibG9ja3MoUEdfRlVOQ1RJT05fQVJHUykKIAly ZWwgPSByZWxhdGlvbl9vcGVuKHJlbGlkLCBBY2Nlc3NTaGFyZUxvY2spOwogCiAJc3RyZWFt ID0gcmVhZF9zdHJlYW1fYmVnaW5fcmVsYXRpb24oUkVBRF9TVFJFQU1fRlVMTCwKLQkJCQkJ CQkJCQlOVUxMLAogCQkJCQkJCQkJCXJlbCwKIAkJCQkJCQkJCQlNQUlOX0ZPUktOVU0sCiAJ CQkJCQkJCQkJcmVhZF9zdHJlYW1fZm9yX2Jsb2Nrc19jYiwKZGlmZiAtLWdpdCBhL3NyYy90 ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvc3RhdHMub3V0IGIvc3JjL3Rlc3QvcmVncmVzcy9leHBl Y3RlZC9zdGF0cy5vdXQKaW5kZXggMDNjYmMxY2RlZjUuLmU0YjlkZTBiNGE4IDEwMDY0NAot LS0gYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3N0YXRzLm91dAorKysgYi9zcmMvdGVz dC9yZWdyZXNzL2V4cGVjdGVkL3N0YXRzLm91dApAQCAtMTYsMjIgKzE2LDE2IEBAIFNIT1cg dHJhY2tfY291bnRzOyAgLS0gbXVzdCBiZSBvbgogU0VMRUNUIGJhY2tlbmRfdHlwZSwgb2Jq ZWN0LCBjb250ZXh0IEZST00gcGdfc3RhdF9pbwogICBPUkRFUiBCWSBiYWNrZW5kX3R5cGUg Q09MTEFURSAiQyIsIG9iamVjdCBDT0xMQVRFICJDIiwgY29udGV4dCBDT0xMQVRFICJDIjsK IGJhY2tlbmRfdHlwZXxvYmplY3R8Y29udGV4dAotYXV0b3ZhY3V1bSBsYXVuY2hlcnxyZWxh dGlvbnxidWxrcmVhZAogYXV0b3ZhY3V1bSBsYXVuY2hlcnxyZWxhdGlvbnxpbml0CiBhdXRv dmFjdXVtIGxhdW5jaGVyfHJlbGF0aW9ufG5vcm1hbAogYXV0b3ZhY3V1bSBsYXVuY2hlcnx3 YWx8aW5pdAogYXV0b3ZhY3V1bSBsYXVuY2hlcnx3YWx8bm9ybWFsCi1hdXRvdmFjdXVtIHdv cmtlcnxyZWxhdGlvbnxidWxrcmVhZAogYXV0b3ZhY3V1bSB3b3JrZXJ8cmVsYXRpb258aW5p dAogYXV0b3ZhY3V1bSB3b3JrZXJ8cmVsYXRpb258bm9ybWFsCi1hdXRvdmFjdXVtIHdvcmtl cnxyZWxhdGlvbnx2YWN1dW0KIGF1dG92YWN1dW0gd29ya2VyfHdhbHxpbml0CiBhdXRvdmFj dXVtIHdvcmtlcnx3YWx8bm9ybWFsCi1iYWNrZ3JvdW5kIHdvcmtlcnxyZWxhdGlvbnxidWxr cmVhZAotYmFja2dyb3VuZCB3b3JrZXJ8cmVsYXRpb258YnVsa3dyaXRlCiBiYWNrZ3JvdW5k IHdvcmtlcnxyZWxhdGlvbnxpbml0CiBiYWNrZ3JvdW5kIHdvcmtlcnxyZWxhdGlvbnxub3Jt YWwKLWJhY2tncm91bmQgd29ya2VyfHJlbGF0aW9ufHZhY3V1bQogYmFja2dyb3VuZCB3b3Jr ZXJ8dGVtcCByZWxhdGlvbnxub3JtYWwKIGJhY2tncm91bmQgd29ya2VyfHdhbHxpbml0CiBi YWNrZ3JvdW5kIHdvcmtlcnx3YWx8bm9ybWFsCkBAIC00Myw2NyArMzcsNDMgQEAgY2hlY2tw b2ludGVyfHJlbGF0aW9ufGluaXQKIGNoZWNrcG9pbnRlcnxyZWxhdGlvbnxub3JtYWwKIGNo ZWNrcG9pbnRlcnx3YWx8aW5pdAogY2hlY2twb2ludGVyfHdhbHxub3JtYWwKLWNsaWVudCBi YWNrZW5kfHJlbGF0aW9ufGJ1bGtyZWFkCi1jbGllbnQgYmFja2VuZHxyZWxhdGlvbnxidWxr d3JpdGUKIGNsaWVudCBiYWNrZW5kfHJlbGF0aW9ufGluaXQKIGNsaWVudCBiYWNrZW5kfHJl bGF0aW9ufG5vcm1hbAotY2xpZW50IGJhY2tlbmR8cmVsYXRpb258dmFjdXVtCiBjbGllbnQg YmFja2VuZHx0ZW1wIHJlbGF0aW9ufG5vcm1hbAogY2xpZW50IGJhY2tlbmR8d2FsfGluaXQK IGNsaWVudCBiYWNrZW5kfHdhbHxub3JtYWwKLWRhdGFjaGVja3N1bXMgbGF1bmNoZXJ8cmVs YXRpb258YnVsa3JlYWQKLWRhdGFjaGVja3N1bXMgbGF1bmNoZXJ8cmVsYXRpb258YnVsa3dy aXRlCiBkYXRhY2hlY2tzdW1zIGxhdW5jaGVyfHJlbGF0aW9ufGluaXQKIGRhdGFjaGVja3N1 bXMgbGF1bmNoZXJ8cmVsYXRpb258bm9ybWFsCi1kYXRhY2hlY2tzdW1zIGxhdW5jaGVyfHJl bGF0aW9ufHZhY3V1bQogZGF0YWNoZWNrc3VtcyBsYXVuY2hlcnx0ZW1wIHJlbGF0aW9ufG5v cm1hbAogZGF0YWNoZWNrc3VtcyBsYXVuY2hlcnx3YWx8aW5pdAogZGF0YWNoZWNrc3VtcyBs YXVuY2hlcnx3YWx8bm9ybWFsCi1kYXRhY2hlY2tzdW1zIHdvcmtlcnxyZWxhdGlvbnxidWxr cmVhZAotZGF0YWNoZWNrc3VtcyB3b3JrZXJ8cmVsYXRpb258YnVsa3dyaXRlCiBkYXRhY2hl Y2tzdW1zIHdvcmtlcnxyZWxhdGlvbnxpbml0CiBkYXRhY2hlY2tzdW1zIHdvcmtlcnxyZWxh dGlvbnxub3JtYWwKLWRhdGFjaGVja3N1bXMgd29ya2VyfHJlbGF0aW9ufHZhY3V1bQogZGF0 YWNoZWNrc3VtcyB3b3JrZXJ8dGVtcCByZWxhdGlvbnxub3JtYWwKIGRhdGFjaGVja3N1bXMg d29ya2VyfHdhbHxpbml0CiBkYXRhY2hlY2tzdW1zIHdvcmtlcnx3YWx8bm9ybWFsCi1pbyB3 b3JrZXJ8cmVsYXRpb258YnVsa3JlYWQKLWlvIHdvcmtlcnxyZWxhdGlvbnxidWxrd3JpdGUK IGlvIHdvcmtlcnxyZWxhdGlvbnxpbml0CiBpbyB3b3JrZXJ8cmVsYXRpb258bm9ybWFsCi1p byB3b3JrZXJ8cmVsYXRpb258dmFjdXVtCiBpbyB3b3JrZXJ8dGVtcCByZWxhdGlvbnxub3Jt YWwKIGlvIHdvcmtlcnx3YWx8aW5pdAogaW8gd29ya2VyfHdhbHxub3JtYWwKLXNsb3RzeW5j IHdvcmtlcnxyZWxhdGlvbnxidWxrcmVhZAotc2xvdHN5bmMgd29ya2VyfHJlbGF0aW9ufGJ1 bGt3cml0ZQogc2xvdHN5bmMgd29ya2VyfHJlbGF0aW9ufGluaXQKIHNsb3RzeW5jIHdvcmtl cnxyZWxhdGlvbnxub3JtYWwKLXNsb3RzeW5jIHdvcmtlcnxyZWxhdGlvbnx2YWN1dW0KIHNs b3RzeW5jIHdvcmtlcnx0ZW1wIHJlbGF0aW9ufG5vcm1hbAogc2xvdHN5bmMgd29ya2VyfHdh bHxpbml0CiBzbG90c3luYyB3b3JrZXJ8d2FsfG5vcm1hbAotc3RhbmRhbG9uZSBiYWNrZW5k fHJlbGF0aW9ufGJ1bGtyZWFkCi1zdGFuZGFsb25lIGJhY2tlbmR8cmVsYXRpb258YnVsa3dy aXRlCiBzdGFuZGFsb25lIGJhY2tlbmR8cmVsYXRpb258aW5pdAogc3RhbmRhbG9uZSBiYWNr ZW5kfHJlbGF0aW9ufG5vcm1hbAotc3RhbmRhbG9uZSBiYWNrZW5kfHJlbGF0aW9ufHZhY3V1 bQogc3RhbmRhbG9uZSBiYWNrZW5kfHdhbHxpbml0CiBzdGFuZGFsb25lIGJhY2tlbmR8d2Fs fG5vcm1hbAotc3RhcnR1cHxyZWxhdGlvbnxidWxrcmVhZAotc3RhcnR1cHxyZWxhdGlvbnxi dWxrd3JpdGUKIHN0YXJ0dXB8cmVsYXRpb258aW5pdAogc3RhcnR1cHxyZWxhdGlvbnxub3Jt YWwKLXN0YXJ0dXB8cmVsYXRpb258dmFjdXVtCiBzdGFydHVwfHdhbHxpbml0CiBzdGFydHVw fHdhbHxub3JtYWwKIHdhbHJlY2VpdmVyfHdhbHxpbml0CiB3YWxyZWNlaXZlcnx3YWx8bm9y bWFsCi13YWxzZW5kZXJ8cmVsYXRpb258YnVsa3JlYWQKLXdhbHNlbmRlcnxyZWxhdGlvbnxi dWxrd3JpdGUKIHdhbHNlbmRlcnxyZWxhdGlvbnxpbml0CiB3YWxzZW5kZXJ8cmVsYXRpb258 bm9ybWFsCi13YWxzZW5kZXJ8cmVsYXRpb258dmFjdXVtCiB3YWxzZW5kZXJ8dGVtcCByZWxh dGlvbnxub3JtYWwKIHdhbHNlbmRlcnx3YWx8aW5pdAogd2Fsc2VuZGVyfHdhbHxub3JtYWwK QEAgLTExMSw3ICs4MSw3IEBAIHdhbHN1bW1hcml6ZXJ8d2FsfGluaXQKIHdhbHN1bW1hcml6 ZXJ8d2FsfG5vcm1hbAogd2Fsd3JpdGVyfHdhbHxpbml0CiB3YWx3cml0ZXJ8d2FsfG5vcm1h bAotKDk1IHJvd3MpCisoNjUgcm93cykKIFxhCiAtLSBMaXN0IG9mIHJlZ2lzdGVyZWQgc3Rh dGlzdGljcyBraW5kcy4KIFNFTEVDVCBpZCwgbmFtZSwgZml4ZWRfYW1vdW50LApAQCAtMTc1 Nyw3MCArMTcyNyw2IEBAIFNFTEVDVCA6aW9fc3VtX2xvY2FsX25ld190YmxzcGNfd3JpdGVz ID4gOmlvX3N1bV9sb2NhbF9hZnRlcl93cml0ZXM7CiAoMSByb3cpCiAKIFJFU0VUIHRlbXBf YnVmZmVyczsKLS0tIFRlc3QgdGhhdCByZXVzZSBvZiBzdHJhdGVneSBidWZmZXJzIGFuZCBy ZWFkcyBvZiBibG9ja3MgaW50byB0aGVzZSByZXVzZWQKLS0tIGJ1ZmZlcnMgd2hpbGUgVkFD VVVNaW5nIGFyZSB0cmFja2VkIGluIHBnX3N0YXRfaW8uIElmIHRoZXJlIGlzIHN1ZmZpY2ll bnQKLS0tIGRlbWFuZCBmb3Igc2hhcmVkIGJ1ZmZlcnMgZnJvbSBjb25jdXJyZW50IHF1ZXJp ZXMsIHNvbWUgYnVmZmVycyBtYXkgYmUKLS0tIHBpbm5lZCBieSBvdGhlciBiYWNrZW5kcyBi ZWZvcmUgdGhleSBjYW4gYmUgcmV1c2VkLiBJbiBzdWNoIGNhc2VzLCB0aGUKLS0tIGJhY2tl bmQgd2lsbCBldmljdCBhIGJ1ZmZlciBmcm9tIG91dHNpZGUgdGhlIHJpbmcgYW5kIGFkZCBp dCB0byB0aGUKLS0tIHJpbmcuIFRoaXMgaXMgY29uc2lkZXJlZCBhbiBldmljdGlvbiBhbmQg bm90IGEgcmV1c2UuCi0tLSBTZXQgd2FsX3NraXBfdGhyZXNob2xkIHNtYWxsZXIgdGhhbiB0 aGUgZXhwZWN0ZWQgc2l6ZSBvZgotLS0gdGVzdF9pb192YWNfc3RyYXRlZ3kgc28gdGhhdCwg ZXZlbiBpZiB3YWxfbGV2ZWwgaXMgbWluaW1hbCwgVkFDVVVNIEZVTEwgd2lsbAotLS0gZnN5 bmMgdGhlIG5ld2x5IHJld3JpdHRlbiB0ZXN0X2lvX3ZhY19zdHJhdGVneSBpbnN0ZWFkIG9m IHdyaXRpbmcgaXQgdG8gV0FMLgotLS0gV3JpdGluZyBpdCB0byBXQUwgd2lsbCByZXN1bHQg aW4gdGhlIG5ld2x5IHdyaXR0ZW4gcmVsYXRpb24gcGFnZXMgYmVpbmcgaW4KLS0tIHNoYXJl ZCBidWZmZXJzIC0tIHByZXZlbnRpbmcgdXMgZnJvbSB0ZXN0aW5nIEJBU19WQUNVVU0gQnVm ZmVyQWNjZXNzU3RyYXRlZ3kKLS0tIHJlYWRzLgotU0VUIHdhbF9za2lwX3RocmVzaG9sZCA9 ICcxIGtCJzsKLVNFTEVDVCBzdW0ocmV1c2VzKSBBUyByZXVzZXMsIHN1bShyZWFkcykgQVMg cmVhZHMsIHN1bShldmljdGlvbnMpIEFTIGV2aWN0aW9ucwotICBGUk9NIHBnX3N0YXRfaW8g V0hFUkUgY29udGV4dCA9ICd2YWN1dW0nIFxnc2V0IGlvX3N1bV92YWNfc3RyYXRlZ3lfYmVm b3JlXwotQ1JFQVRFIFRBQkxFIHRlc3RfaW9fdmFjX3N0cmF0ZWd5KGEgaW50LCBiIGludCkg V0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVkID0gJ2ZhbHNlJyk7Ci1JTlNFUlQgSU5UTyB0ZXN0 X2lvX3ZhY19zdHJhdGVneSBTRUxFQ1QgaSwgaSBmcm9tIGdlbmVyYXRlX3NlcmllcygxLCA0 NTAwKWk7Ci0tLSBFbnN1cmUgdGhhdCB0aGUgbmV4dCBWQUNVVU0gd2lsbCBuZWVkIHRvIHBl cmZvcm0gSU8gYnkgcmV3cml0aW5nIHRoZSB0YWJsZQotLS0gZmlyc3Qgd2l0aCBWQUNVVU0g KEZVTEwpLgotVkFDVVVNIChGVUxMKSB0ZXN0X2lvX3ZhY19zdHJhdGVneTsKLS0tIFVzZSB0 aGUgbWluaW11bSBCVUZGRVJfVVNBR0VfTElNSVQgdG8gY2F1c2UgcmV1c2VzIG9yIGV2aWN0 aW9ucyB3aXRoIHRoZQotLS0gc21hbGxlc3QgdGFibGUgcG9zc2libGUuCi1WQUNVVU0gKFBB UkFMTEVMIDAsIEJVRkZFUl9VU0FHRV9MSU1JVCAxMjgpIHRlc3RfaW9fdmFjX3N0cmF0ZWd5 OwotU0VMRUNUIHBnX3N0YXRfZm9yY2VfbmV4dF9mbHVzaCgpOwotIHBnX3N0YXRfZm9yY2Vf bmV4dF9mbHVzaCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gCi0oMSByb3cpCi0K LVNFTEVDVCBzdW0ocmV1c2VzKSBBUyByZXVzZXMsIHN1bShyZWFkcykgQVMgcmVhZHMsIHN1 bShldmljdGlvbnMpIEFTIGV2aWN0aW9ucwotICBGUk9NIHBnX3N0YXRfaW8gV0hFUkUgY29u dGV4dCA9ICd2YWN1dW0nIFxnc2V0IGlvX3N1bV92YWNfc3RyYXRlZ3lfYWZ0ZXJfCi1TRUxF Q1QgOmlvX3N1bV92YWNfc3RyYXRlZ3lfYWZ0ZXJfcmVhZHMgPiA6aW9fc3VtX3ZhY19zdHJh dGVneV9iZWZvcmVfcmVhZHM7Ci0gP2NvbHVtbj8gCi0tLS0tLS0tLS0tCi0gdAotKDEgcm93 KQotCi1TRUxFQ1QgKDppb19zdW1fdmFjX3N0cmF0ZWd5X2FmdGVyX3JldXNlcyArIDppb19z dW1fdmFjX3N0cmF0ZWd5X2FmdGVyX2V2aWN0aW9ucykgPgotICAoOmlvX3N1bV92YWNfc3Ry YXRlZ3lfYmVmb3JlX3JldXNlcyArIDppb19zdW1fdmFjX3N0cmF0ZWd5X2JlZm9yZV9ldmlj dGlvbnMpOwotID9jb2x1bW4/IAotLS0tLS0tLS0tLQotIHQKLSgxIHJvdykKLQotUkVTRVQg d2FsX3NraXBfdGhyZXNob2xkOwotLS0gVGVzdCB0aGF0IGV4dGVuZHMgZG9uZSBieSBhIENU QVMsIHdoaWNoIHVzZXMgYSBCQVNfQlVMS1dSSVRFCi0tLSBCdWZmZXJBY2Nlc3NTdHJhdGVn eSwgYXJlIHRyYWNrZWQgaW4gcGdfc3RhdF9pby4KLVNFTEVDVCBzdW0oZXh0ZW5kcykgQVMg aW9fc3VtX2J1bGt3cml0ZV9zdHJhdGVneV9leHRlbmRzX2JlZm9yZQotICBGUk9NIHBnX3N0 YXRfaW8gV0hFUkUgY29udGV4dCA9ICdidWxrd3JpdGUnIFxnc2V0Ci1DUkVBVEUgVEFCTEUg dGVzdF9pb19idWxrd3JpdGVfc3RyYXRlZ3kgQVMgU0VMRUNUIGkgRlJPTSBnZW5lcmF0ZV9z ZXJpZXMoMSwxMDApaTsKLVNFTEVDVCBwZ19zdGF0X2ZvcmNlX25leHRfZmx1c2goKTsKLSBw Z19zdGF0X2ZvcmNlX25leHRfZmx1c2ggCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQot IAotKDEgcm93KQotCi1TRUxFQ1Qgc3VtKGV4dGVuZHMpIEFTIGlvX3N1bV9idWxrd3JpdGVf c3RyYXRlZ3lfZXh0ZW5kc19hZnRlcgotICBGUk9NIHBnX3N0YXRfaW8gV0hFUkUgY29udGV4 dCA9ICdidWxrd3JpdGUnIFxnc2V0Ci1TRUxFQ1QgOmlvX3N1bV9idWxrd3JpdGVfc3RyYXRl Z3lfZXh0ZW5kc19hZnRlciA+IDppb19zdW1fYnVsa3dyaXRlX3N0cmF0ZWd5X2V4dGVuZHNf YmVmb3JlOwotID9jb2x1bW4/IAotLS0tLS0tLS0tLQotIHQKLSgxIHJvdykKLQogLS0gVGVz dCBJTyBzdGF0cyByZXNldAogU0VMRUNUIHBnX3N0YXRfaGF2ZV9zdGF0cygnaW8nLCAwLCAw KTsKICBwZ19zdGF0X2hhdmVfc3RhdHMgCkBAIC0xODQxLDIwICsxNzQ3LDE2IEBAIFNFTEVD VCBwZ19zdGF0X3Jlc2V0X3NoYXJlZCgnaW8nKTsKIFNFTEVDVCBzdW0oZXZpY3Rpb25zKSAr IHN1bShyZXVzZXMpICsgc3VtKGV4dGVuZHMpICsgc3VtKGZzeW5jcykgKyBzdW0ocmVhZHMp ICsgc3VtKHdyaXRlcykgKyBzdW0od3JpdGViYWNrcykgKyBzdW0oaGl0cykgQVMgaW9fc3Rh dHNfcG9zdF9yZXNldAogICBGUk9NIHBnX3N0YXRfaW8gXGdzZXQKIFNFTEVDVCA6aW9fc3Rh dHNfcG9zdF9yZXNldCA8IDppb19zdGF0c19wcmVfcmVzZXQ7Ci0gP2NvbHVtbj8gCi0tLS0t LS0tLS0tCi0gdAotKDEgcm93KQotCitFUlJPUjogIHN5bnRheCBlcnJvciBhdCBvciBuZWFy ICI6IgorTElORSAxOiBTRUxFQ1QgOmlvX3N0YXRzX3Bvc3RfcmVzZXQgPCA6aW9fc3RhdHNf cHJlX3Jlc2V0OworICAgICAgICAgICAgICAgXgogU0VMRUNUIHN1bShldmljdGlvbnMpICsg c3VtKHJldXNlcykgKyBzdW0oZXh0ZW5kcykgKyBzdW0oZnN5bmNzKSArIHN1bShyZWFkcykg KyBzdW0od3JpdGVzKSArIHN1bSh3cml0ZWJhY2tzKSArIHN1bShoaXRzKSBBUyBteV9pb19z dGF0c19wb3N0X3Jlc2V0CiAgIEZST00gcGdfc3RhdF9nZXRfYmFja2VuZF9pbyhwZ19iYWNr ZW5kX3BpZCgpKSBcZ3NldAogLS0gcGdfc3RhdF9yZXNldF9zaGFyZWQoKSBkaWQgbm90IHJl c2V0IGJhY2tlbmQgSU8gc3RhdHMKIFNFTEVDVCA6bXlfaW9fc3RhdHNfcHJlX3Jlc2V0IDw9 IDpteV9pb19zdGF0c19wb3N0X3Jlc2V0OwotID9jb2x1bW4/IAotLS0tLS0tLS0tLQotIHQK LSgxIHJvdykKLQorRVJST1I6ICBzeW50YXggZXJyb3IgYXQgb3IgbmVhciAiOiIKK0xJTkUg MTogU0VMRUNUIDpteV9pb19zdGF0c19wcmVfcmVzZXQgPD0gOm15X2lvX3N0YXRzX3Bvc3Rf cmVzZXQ7CisgICAgICAgICAgICAgICBeCiAtLSBidXQgcGdfc3RhdF9yZXNldF9iYWNrZW5k X3N0YXRzKCkgZG9lcwogU0VMRUNUIHBnX3N0YXRfcmVzZXRfYmFja2VuZF9zdGF0cyhwZ19i YWNrZW5kX3BpZCgpKTsKICBwZ19zdGF0X3Jlc2V0X2JhY2tlbmRfc3RhdHMgCkBAIC0xODY1 LDExICsxNzY3LDkgQEAgU0VMRUNUIHBnX3N0YXRfcmVzZXRfYmFja2VuZF9zdGF0cyhwZ19i YWNrZW5kX3BpZCgpKTsKIFNFTEVDVCBzdW0oZXZpY3Rpb25zKSArIHN1bShyZXVzZXMpICsg c3VtKGV4dGVuZHMpICsgc3VtKGZzeW5jcykgKyBzdW0ocmVhZHMpICsgc3VtKHdyaXRlcykg KyBzdW0od3JpdGViYWNrcykgKyBzdW0oaGl0cykgQVMgbXlfaW9fc3RhdHNfcG9zdF9iYWNr ZW5kX3Jlc2V0CiAgIEZST00gcGdfc3RhdF9nZXRfYmFja2VuZF9pbyhwZ19iYWNrZW5kX3Bp ZCgpKSBcZ3NldAogU0VMRUNUIDpteV9pb19zdGF0c19wcmVfcmVzZXQgPiA6bXlfaW9fc3Rh dHNfcG9zdF9iYWNrZW5kX3Jlc2V0OwotID9jb2x1bW4/IAotLS0tLS0tLS0tLQotIHQKLSgx IHJvdykKLQorRVJST1I6ICBzeW50YXggZXJyb3IgYXQgb3IgbmVhciAiOiIKK0xJTkUgMTog U0VMRUNUIDpteV9pb19zdGF0c19wcmVfcmVzZXQgPiA6bXlfaW9fc3RhdHNfcG9zdF9iYWNr ZW5kX3JlLi4uCisgICAgICAgICAgICAgICBeCiAtLSBDaGVjayBpbnZhbGlkIGlucHV0IGZv ciBwZ19zdGF0X2dldF9iYWNrZW5kX2lvKCkKIFNFTEVDVCBwZ19zdGF0X2dldF9iYWNrZW5k X2lvKE5VTEwpOwogIHBnX3N0YXRfZ2V0X2JhY2tlbmRfaW8gCmRpZmYgLS1naXQgYS9zcmMv dGVzdC9yZWdyZXNzL2V4cGVjdGVkL3ZhY3V1bS5vdXQgYi9zcmMvdGVzdC9yZWdyZXNzL2V4 cGVjdGVkL3ZhY3V1bS5vdXQKaW5kZXggZDQ2OTZiYzMzMjUuLjg1ZDA2OTA3Y2VjIDEwMDY0 NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3ZhY3V1bS5vdXQKKysrIGIvc3Jj L3Rlc3QvcmVncmVzcy9leHBlY3RlZC92YWN1dW0ub3V0CkBAIC01MjYsMjUgKzUyNiw2IEBA IFNFTEVDVCB0LnJlbGZpbGVub2RlID0gOnRvYXN0X2ZpbGVub2RlIEFTIGlzX3NhbWVfdG9h c3RfZmlsZW5vZGUKICBmCiAoMSByb3cpCiAKLS0tIEJVRkZFUl9VU0FHRV9MSU1JVCBvcHRp b24KLVZBQ1VVTSAoQlVGRkVSX1VTQUdFX0xJTUlUICc1MTIga0InKSB2YWNfb3B0aW9uX3Rh YjsKLUFOQUxZWkUgKEJVRkZFUl9VU0FHRV9MSU1JVCAnNTEyIGtCJykgdmFjX29wdGlvbl90 YWI7Ci0tLSB0cnkgZGlzYWJsaW5nIHRoZSBidWZmZXIgdXNhZ2UgbGltaXQKLVZBQ1VVTSAo QlVGRkVSX1VTQUdFX0xJTUlUIDApIHZhY19vcHRpb25fdGFiOwotQU5BTFlaRSAoQlVGRkVS X1VTQUdFX0xJTUlUIDApIHZhY19vcHRpb25fdGFiOwotLS0gdmFsdWUgZXhjZWVkcyBtYXgg c2l6ZSBlcnJvcgotVkFDVVVNIChCVUZGRVJfVVNBR0VfTElNSVQgMTY3NzcyMjApIHZhY19v cHRpb25fdGFiOwotRVJST1I6ICBCVUZGRVJfVVNBR0VfTElNSVQgb3B0aW9uIG11c3QgYmUg MCBvciBiZXR3ZWVuIDEyOCBrQiBhbmQgMTY3NzcyMTYga0IKLS0tIHZhbHVlIGlzIGxlc3Mg dGhhbiBtaW4gc2l6ZSBlcnJvcgotVkFDVVVNIChCVUZGRVJfVVNBR0VfTElNSVQgMTIwKSB2 YWNfb3B0aW9uX3RhYjsKLUVSUk9SOiAgQlVGRkVSX1VTQUdFX0xJTUlUIG9wdGlvbiBtdXN0 IGJlIDAgb3IgYmV0d2VlbiAxMjgga0IgYW5kIDE2Nzc3MjE2IGtCCi0tLSBpbnRlZ2VyIG92 ZXJmbG93IGVycm9yCi1WQUNVVU0gKEJVRkZFUl9VU0FHRV9MSU1JVCAxMDAwMDAwMDAwMCkg dmFjX29wdGlvbl90YWI7Ci1FUlJPUjogIEJVRkZFUl9VU0FHRV9MSU1JVCBvcHRpb24gbXVz dCBiZSAwIG9yIGJldHdlZW4gMTI4IGtCIGFuZCAxNjc3NzIxNiBrQgotSElOVDogIFZhbHVl IGV4Y2VlZHMgaW50ZWdlciByYW5nZS4KLS0tIGluY29tcGF0aWJsZSB3aXRoIFZBQ1VVTSBG VUxMIGVycm9yCi1WQUNVVU0gKEJVRkZFUl9VU0FHRV9MSU1JVCAnNTEyIGtCJywgRlVMTCkg dmFjX29wdGlvbl90YWI7Ci1FUlJPUjogIEJVRkZFUl9VU0FHRV9MSU1JVCBjYW5ub3QgYmUg c3BlY2lmaWVkIGZvciBWQUNVVU0gRlVMTAogLS0gU0tJUF9EQVRBQkFTRV9TVEFUUyBvcHRp b24KIFZBQ1VVTSAoU0tJUF9EQVRBQkFTRV9TVEFUUykgdmFjdHN0OwogLS0gT05MWV9EQVRB QkFTRV9TVEFUUyBvcHRpb24KZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3N0 YXRzLnNxbCBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3N0YXRzLnNxbAppbmRleCA0YzI2NWQx MjQ1Yy4uN2EwNDlkODhhNzcgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3N0 YXRzLnNxbAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9zdGF0cy5zcWwKQEAgLTgxNCw0 OCArODE0LDYgQEAgU0VMRUNUIHN1bSh3cml0ZXMpIEFTIGlvX3N1bV9sb2NhbF9uZXdfdGJs c3BjX3dyaXRlcwogU0VMRUNUIDppb19zdW1fbG9jYWxfbmV3X3RibHNwY193cml0ZXMgPiA6 aW9fc3VtX2xvY2FsX2FmdGVyX3dyaXRlczsKIFJFU0VUIHRlbXBfYnVmZmVyczsKIAotLS0g VGVzdCB0aGF0IHJldXNlIG9mIHN0cmF0ZWd5IGJ1ZmZlcnMgYW5kIHJlYWRzIG9mIGJsb2Nr cyBpbnRvIHRoZXNlIHJldXNlZAotLS0gYnVmZmVycyB3aGlsZSBWQUNVVU1pbmcgYXJlIHRy YWNrZWQgaW4gcGdfc3RhdF9pby4gSWYgdGhlcmUgaXMgc3VmZmljaWVudAotLS0gZGVtYW5k IGZvciBzaGFyZWQgYnVmZmVycyBmcm9tIGNvbmN1cnJlbnQgcXVlcmllcywgc29tZSBidWZm ZXJzIG1heSBiZQotLS0gcGlubmVkIGJ5IG90aGVyIGJhY2tlbmRzIGJlZm9yZSB0aGV5IGNh biBiZSByZXVzZWQuIEluIHN1Y2ggY2FzZXMsIHRoZQotLS0gYmFja2VuZCB3aWxsIGV2aWN0 IGEgYnVmZmVyIGZyb20gb3V0c2lkZSB0aGUgcmluZyBhbmQgYWRkIGl0IHRvIHRoZQotLS0g cmluZy4gVGhpcyBpcyBjb25zaWRlcmVkIGFuIGV2aWN0aW9uIGFuZCBub3QgYSByZXVzZS4K LQotLS0gU2V0IHdhbF9za2lwX3RocmVzaG9sZCBzbWFsbGVyIHRoYW4gdGhlIGV4cGVjdGVk IHNpemUgb2YKLS0tIHRlc3RfaW9fdmFjX3N0cmF0ZWd5IHNvIHRoYXQsIGV2ZW4gaWYgd2Fs X2xldmVsIGlzIG1pbmltYWwsIFZBQ1VVTSBGVUxMIHdpbGwKLS0tIGZzeW5jIHRoZSBuZXds eSByZXdyaXR0ZW4gdGVzdF9pb192YWNfc3RyYXRlZ3kgaW5zdGVhZCBvZiB3cml0aW5nIGl0 IHRvIFdBTC4KLS0tIFdyaXRpbmcgaXQgdG8gV0FMIHdpbGwgcmVzdWx0IGluIHRoZSBuZXds eSB3cml0dGVuIHJlbGF0aW9uIHBhZ2VzIGJlaW5nIGluCi0tLSBzaGFyZWQgYnVmZmVycyAt LSBwcmV2ZW50aW5nIHVzIGZyb20gdGVzdGluZyBCQVNfVkFDVVVNIEJ1ZmZlckFjY2Vzc1N0 cmF0ZWd5Ci0tLSByZWFkcy4KLVNFVCB3YWxfc2tpcF90aHJlc2hvbGQgPSAnMSBrQic7Ci1T RUxFQ1Qgc3VtKHJldXNlcykgQVMgcmV1c2VzLCBzdW0ocmVhZHMpIEFTIHJlYWRzLCBzdW0o ZXZpY3Rpb25zKSBBUyBldmljdGlvbnMKLSAgRlJPTSBwZ19zdGF0X2lvIFdIRVJFIGNvbnRl eHQgPSAndmFjdXVtJyBcZ3NldCBpb19zdW1fdmFjX3N0cmF0ZWd5X2JlZm9yZV8KLUNSRUFU RSBUQUJMRSB0ZXN0X2lvX3ZhY19zdHJhdGVneShhIGludCwgYiBpbnQpIFdJVEggKGF1dG92 YWN1dW1fZW5hYmxlZCA9ICdmYWxzZScpOwotSU5TRVJUIElOVE8gdGVzdF9pb192YWNfc3Ry YXRlZ3kgU0VMRUNUIGksIGkgZnJvbSBnZW5lcmF0ZV9zZXJpZXMoMSwgNDUwMClpOwotLS0g RW5zdXJlIHRoYXQgdGhlIG5leHQgVkFDVVVNIHdpbGwgbmVlZCB0byBwZXJmb3JtIElPIGJ5 IHJld3JpdGluZyB0aGUgdGFibGUKLS0tIGZpcnN0IHdpdGggVkFDVVVNIChGVUxMKS4KLVZB Q1VVTSAoRlVMTCkgdGVzdF9pb192YWNfc3RyYXRlZ3k7Ci0tLSBVc2UgdGhlIG1pbmltdW0g QlVGRkVSX1VTQUdFX0xJTUlUIHRvIGNhdXNlIHJldXNlcyBvciBldmljdGlvbnMgd2l0aCB0 aGUKLS0tIHNtYWxsZXN0IHRhYmxlIHBvc3NpYmxlLgotVkFDVVVNIChQQVJBTExFTCAwLCBC VUZGRVJfVVNBR0VfTElNSVQgMTI4KSB0ZXN0X2lvX3ZhY19zdHJhdGVneTsKLVNFTEVDVCBw Z19zdGF0X2ZvcmNlX25leHRfZmx1c2goKTsKLVNFTEVDVCBzdW0ocmV1c2VzKSBBUyByZXVz ZXMsIHN1bShyZWFkcykgQVMgcmVhZHMsIHN1bShldmljdGlvbnMpIEFTIGV2aWN0aW9ucwot ICBGUk9NIHBnX3N0YXRfaW8gV0hFUkUgY29udGV4dCA9ICd2YWN1dW0nIFxnc2V0IGlvX3N1 bV92YWNfc3RyYXRlZ3lfYWZ0ZXJfCi1TRUxFQ1QgOmlvX3N1bV92YWNfc3RyYXRlZ3lfYWZ0 ZXJfcmVhZHMgPiA6aW9fc3VtX3ZhY19zdHJhdGVneV9iZWZvcmVfcmVhZHM7Ci1TRUxFQ1Qg KDppb19zdW1fdmFjX3N0cmF0ZWd5X2FmdGVyX3JldXNlcyArIDppb19zdW1fdmFjX3N0cmF0 ZWd5X2FmdGVyX2V2aWN0aW9ucykgPgotICAoOmlvX3N1bV92YWNfc3RyYXRlZ3lfYmVmb3Jl X3JldXNlcyArIDppb19zdW1fdmFjX3N0cmF0ZWd5X2JlZm9yZV9ldmljdGlvbnMpOwotUkVT RVQgd2FsX3NraXBfdGhyZXNob2xkOwotCi0tLSBUZXN0IHRoYXQgZXh0ZW5kcyBkb25lIGJ5 IGEgQ1RBUywgd2hpY2ggdXNlcyBhIEJBU19CVUxLV1JJVEUKLS0tIEJ1ZmZlckFjY2Vzc1N0 cmF0ZWd5LCBhcmUgdHJhY2tlZCBpbiBwZ19zdGF0X2lvLgotU0VMRUNUIHN1bShleHRlbmRz KSBBUyBpb19zdW1fYnVsa3dyaXRlX3N0cmF0ZWd5X2V4dGVuZHNfYmVmb3JlCi0gIEZST00g cGdfc3RhdF9pbyBXSEVSRSBjb250ZXh0ID0gJ2J1bGt3cml0ZScgXGdzZXQKLUNSRUFURSBU QUJMRSB0ZXN0X2lvX2J1bGt3cml0ZV9zdHJhdGVneSBBUyBTRUxFQ1QgaSBGUk9NIGdlbmVy YXRlX3NlcmllcygxLDEwMClpOwotU0VMRUNUIHBnX3N0YXRfZm9yY2VfbmV4dF9mbHVzaCgp OwotU0VMRUNUIHN1bShleHRlbmRzKSBBUyBpb19zdW1fYnVsa3dyaXRlX3N0cmF0ZWd5X2V4 dGVuZHNfYWZ0ZXIKLSAgRlJPTSBwZ19zdGF0X2lvIFdIRVJFIGNvbnRleHQgPSAnYnVsa3dy aXRlJyBcZ3NldAotU0VMRUNUIDppb19zdW1fYnVsa3dyaXRlX3N0cmF0ZWd5X2V4dGVuZHNf YWZ0ZXIgPiA6aW9fc3VtX2J1bGt3cml0ZV9zdHJhdGVneV9leHRlbmRzX2JlZm9yZTsKLQog LS0gVGVzdCBJTyBzdGF0cyByZXNldAogU0VMRUNUIHBnX3N0YXRfaGF2ZV9zdGF0cygnaW8n LCAwLCAwKTsKIFNFTEVDVCBzdW0oZXZpY3Rpb25zKSArIHN1bShyZXVzZXMpICsgc3VtKGV4 dGVuZHMpICsgc3VtKGZzeW5jcykgKyBzdW0ocmVhZHMpICsgc3VtKHdyaXRlcykgKyBzdW0o d3JpdGViYWNrcykgKyBzdW0oaGl0cykgQVMgaW9fc3RhdHNfcHJlX3Jlc2V0CmRpZmYgLS1n aXQgYS9zcmMvdGVzdC9yZWdyZXNzL3NxbC92YWN1dW0uc3FsIGIvc3JjL3Rlc3QvcmVncmVz cy9zcWwvdmFjdXVtLnNxbAppbmRleCAyNDdiOGUyM2IyMy4uNTA2YzQzODk3NjUgMTAwNjQ0 Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3ZhY3V1bS5zcWwKKysrIGIvc3JjL3Rlc3Qv cmVncmVzcy9zcWwvdmFjdXVtLnNxbApAQCAtMzkwLDIxICszOTAsNiBAQCBTRUxFQ1QgdC5y ZWxmaWxlbm9kZSA9IDp0b2FzdF9maWxlbm9kZSBBUyBpc19zYW1lX3RvYXN0X2ZpbGVub2Rl CiAgIEZST00gcGdfY2xhc3MgYywgcGdfY2xhc3MgdAogICBXSEVSRSBjLnJlbHRvYXN0cmVs aWQgPSB0Lm9pZCBBTkQgYy5yZWxuYW1lID0gJ3ZhY19vcHRpb25fdGFiJzsKIAotLS0gQlVG RkVSX1VTQUdFX0xJTUlUIG9wdGlvbgotVkFDVVVNIChCVUZGRVJfVVNBR0VfTElNSVQgJzUx MiBrQicpIHZhY19vcHRpb25fdGFiOwotQU5BTFlaRSAoQlVGRkVSX1VTQUdFX0xJTUlUICc1 MTIga0InKSB2YWNfb3B0aW9uX3RhYjsKLS0tIHRyeSBkaXNhYmxpbmcgdGhlIGJ1ZmZlciB1 c2FnZSBsaW1pdAotVkFDVVVNIChCVUZGRVJfVVNBR0VfTElNSVQgMCkgdmFjX29wdGlvbl90 YWI7Ci1BTkFMWVpFIChCVUZGRVJfVVNBR0VfTElNSVQgMCkgdmFjX29wdGlvbl90YWI7Ci0t LSB2YWx1ZSBleGNlZWRzIG1heCBzaXplIGVycm9yCi1WQUNVVU0gKEJVRkZFUl9VU0FHRV9M SU1JVCAxNjc3NzIyMCkgdmFjX29wdGlvbl90YWI7Ci0tLSB2YWx1ZSBpcyBsZXNzIHRoYW4g bWluIHNpemUgZXJyb3IKLVZBQ1VVTSAoQlVGRkVSX1VTQUdFX0xJTUlUIDEyMCkgdmFjX29w dGlvbl90YWI7Ci0tLSBpbnRlZ2VyIG92ZXJmbG93IGVycm9yCi1WQUNVVU0gKEJVRkZFUl9V U0FHRV9MSU1JVCAxMDAwMDAwMDAwMCkgdmFjX29wdGlvbl90YWI7Ci0tLSBpbmNvbXBhdGli bGUgd2l0aCBWQUNVVU0gRlVMTCBlcnJvcgotVkFDVVVNIChCVUZGRVJfVVNBR0VfTElNSVQg JzUxMiBrQicsIEZVTEwpIHZhY19vcHRpb25fdGFiOwotCiAtLSBTS0lQX0RBVEFCQVNFX1NU QVRTIG9wdGlvbgogVkFDVVVNIChTS0lQX0RBVEFCQVNFX1NUQVRTKSB2YWN0c3Q7CiAKZGlm ZiAtLWdpdCBhL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0IGIvc3JjL3Rvb2xz L3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKaW5kZXggNTZjMWY5OTdmODguLjA2NGE5ODc4ZTcy IDEwMDY0NAotLS0gYS9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdAorKysgYi9z cmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdApAQCAtMzU1LDggKzM1NSw2IEBAIEJ0 cmVlTGV2ZWwKIEJ1Y2tldAogQnVmRmlsZQogQnVmZmVyCi1CdWZmZXJBY2Nlc3NTdHJhdGVn eQotQnVmZmVyQWNjZXNzU3RyYXRlZ3lUeXBlCiBCdWZmZXJDYWNoZU9zUGFnZXNDb250ZXh0 CiBCdWZmZXJDYWNoZU9zUGFnZXNSZWMKIEJ1ZmZlckRlc2MKLS0gCjIuNTEuMgoK --eb6ebdb126a89898ab85d3de614c44896735dbb9--