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 1vvjXL-00GY9H-2v for pgsql-hackers@arkaria.postgresql.org; Thu, 26 Feb 2026 22:08:48 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vvjXK-00FqJC-1V for pgsql-hackers@arkaria.postgresql.org; Thu, 26 Feb 2026 22:08:46 +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 1vvjXJ-00FqIs-0j for pgsql-hackers@lists.postgresql.org; Thu, 26 Feb 2026 22:08:46 +0000 Received: from fhigh-a8-smtp.messagingengine.com ([103.168.172.159]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.98.2) (envelope-from ) id 1vvjXC-00000001N6s-31JW for pgsql-hackers@postgresql.org; Thu, 26 Feb 2026 22:08:44 +0000 Received: from phl-compute-02.internal (phl-compute-02.internal [10.202.2.42]) by mailfhigh.phl.internal (Postfix) with ESMTP id 8D9561400209; Thu, 26 Feb 2026 17:08:38 -0500 (EST) Received: from phl-imap-14 ([10.202.2.87]) by phl-compute-02.internal (MEProxy); Thu, 26 Feb 2026 17:08:38 -0500 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=fm1; t=1772143718; x=1772230118; bh=YH2fgZhAkz rjDaghKlVZU5LdxtM3GQrfFHjOVbATaYk=; b=T23EsryMR18XsNBcagQSFireHb w7n+HN9V95dCZxAMFfX5cV40UXEXTm74kAaFqKvu+SJPYDu22fP2EQ+4QMLtdyfC EJawnMBgBjbhB9FnN+vkeGZ4LiARZcGCyhXQm40L8K7dNLJZPruFx2+CwaAjCvl5 zwm8f+Pgm3NgR+KbHlqwgxFMZpnhT+zfsc0Fxy+j9CBr39igzkdRgFJlgkzDLzu9 X7Ch7NRs8WQ+eatEGAKb8uAZ2FkrqpeKuGPsRkAVD5FKGZSvFYXtpJYqi7mOtU3D cKUuhkUbX6/48CMW44WlsQOLlQbT6XBoIjp8vfFgCJGQeVmdnvLgk561t5UQ== 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=fm3; t= 1772143718; x=1772230118; bh=YH2fgZhAkzrjDaghKlVZU5LdxtM3GQrfFHj OVbATaYk=; b=VgSpAHUQwHtt11z0Oq0II1LjvbaxAtLiapEm56eVoLWsmSk7ISR V9ICcp29YfWUykIZvRSWQh2fxNazJA+81Xw7MssRyd45gmpKPioxp5y+2qhF8IHO 8PFD9+lKKMHyDQiXY4e6Mq8ChIYCWBzKNPNKgCblYr9NmhA2HoUZtuIAlYLu35GE oOX4eQjMqkTNk8rH76/Rr9jY0jDDT0+zrlvKDIVSttBogmWCYFmOwfWK+kVKe5/K 5EAohuVIwbB6k8bNmVv/NAlKeChu09fZ1GsSgmkMgbCD9Jlm7MY0DDgrL9KnQZ6I rgX7lgD/SSjbm4mAX8G5QTVSeyW68535+Mw== X-ME-Sender: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgeefgedrtddtgddvgeejvdehucetufdoteggodetrf dotffvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfurfetoffkrfgpnffqhgenuceu rghilhhouhhtmecufedttdenucenucfjughrpefoggffhffvvefkjghfufgtsehmtderre ertdejnecuhfhrohhmpedfifhrvghguceuuhhrugdfuceoghhrvghgsegsuhhrugdrmhgv qeenucggtffrrghtthgvrhhnpeefvdeigfefveffleefgeeikeeuleffieekvdelhedtve dvledutdeifeejgfejjeenucevlhhushhtvghrufhiiigvpedtnecurfgrrhgrmhepmhgr ihhlfhhrohhmpehgrhgvghessghurhgurdhmvgdpnhgspghrtghpthhtohepvddpmhhoug gvpehsmhhtphhouhhtpdhrtghpthhtohepphhgshhqlhesjhdquggrvhhishdrtghomhdp rhgtphhtthhopehpghhsqhhlqdhhrggtkhgvrhhssehpohhsthhgrhgvshhqlhdrohhrgh X-ME-Proxy: Feedback-ID: i675e48f3:Fastmail Received: by mailuser.phl.internal (Postfix, from userid 501) id 17D56C40075; Thu, 26 Feb 2026 17:08:38 -0500 (EST) X-Mailer: MessagingEngine.com Webmail Interface MIME-Version: 1.0 X-ThreadId: A1gxZgRQNkgk Date: Thu, 26 Feb 2026 17:08:17 -0500 From: "Greg Burd" To: "Jeff Davis" Cc: pgsql-hackers Message-Id: <9bb9bdd6-e1fe-48fe-837d-4d0289396f1c@app.fastmail.com> In-Reply-To: References: <5165C147-B476-4E3D-AAA9-11C0B966FC4D@greg.burd.me> <9394564A-5764-4DCA-8845-8AE102DE61DC@greg.burd.me> <97769442-2ed7-4fe0-a393-7e2b5ff7ff58@app.fastmail.com> <3e1b9075c92808a7356e79087ba51910e5db5a30.camel@j-davis.com> Subject: Re: Expanding HOT updates for expression and partial indexes Content-Type: multipart/mixed; boundary=f893d3fc92324816820a9ab769f8f3a7 List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --f893d3fc92324816820a9ab769f8f3a7 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable On Wed, Feb 25, 2026, at 4:03 PM, Jeff Davis wrote: > On Mon, 2026-02-23 at 14:23 -0500, Greg Burd wrote: >> Hello. >>=20 >> Attached is a new patch set that fixes a few issues identified in the >> last set. >>=20 >> 0001 - creates a new way to identify the set of attributes both >> modified by the update and referenced by one or more indexes on the >> target relation being updated.=C2=A0 This patch keeps the >> HeapDetermineColumnsInfo() path within heap_update() for calls from >> simple_heap_update() when modified_attrs_valid is set to false.=C2=A0= I'm >> not a huge fan of this, but it does serve as a way to illustrate a >> minimal set of changes easing review a bit. >>=20 >> 0002 - splits out the top portion of heap_update() into both >> heapam_tuple_update() and simple_heap_update(), adds a few helper >> functions and tries to reduce repeated code.=C2=A0 The goal here was = to >> remove some of the mess related to the various bitmaps used to make >> decisions during the update. > > IIUC, a minimal version of this patch set might be: > > * add 'mix_attrs' bitmap to API for table_tuple_update > * have executor calculate the bitmap, using the old slot to see if > expression results have changed > * have simple_heap_update calculate the bitmap using heap_fetch to get > the old tuple (would be a redundant pin, but not sure if that's a > problem or not) > > And leave the rest mostly unchanged. > > Did I miss something? If not, it would be nice to see such a minimal > patch and/or understand why we don't follow that approach. Hey Jeff, thanks for sticking with me on this journey. :) I think your approach makes sense, here's a summary of what's attached (= v30) and at the bottom of this email are some early performance measurem= ents. * in the executor * identify the mix_attrs * one new argument to table_tuple_update( ..., mix_attrs, ...) * heapam_tuple_update( ..., mix_attrs, ...) * calculates hot_allowed using mix_attrs * calculates lockmode using key_attrs and mix_attrs * two new arguments to heap_update(..., mix_attrs, hot_allowed, ...) * on return determines what to do with TU_UpdateIndexes * heap_update( ..., mix_attrs, hot_allowed, ... ) * takes buffer lock * calculates rep_id_key_req, passes that to ExtractReplicaId() * if newbuf=3D=3Dbuffer && hot_allowed -> HOT * releases buffer lock * simple_heap_update( ... no changes to API ... ) * now needs to compare old/new tuples *BEFORE* calling heap_update() * uses heap_fetch() to turn otid -> oldtuple * calls HeapUpdateModIdxAttrs() * calculates lockmode * calculates if hot is allowed * calls into heap_update(..., mix_attrs, hot_allowed, ...) * on return determines what to do with TU_UpdateIndexes * renamed HeapDetermineColumnsInfo() to HeapUpdateModIdxAttrs() * removed logic related to rep_id_key_req, that is in heap_update() > Regards, > Jeff Davis There are a pair of functions now for finding "mix_attrs" that replace t= he singular HeapDetermineColumnsInfo() function: ExecUpdateModIdxAttrs() HeapUpdateModIdxAttrs() These do essentially the same thing, only with different available infor= mation and where the latter is called within the context of a buffer loc= k. In ExecUpdateModIdxAttrs() we compare two TupleTableSlots, the existing = and the plan slot, using a new helper function ExecCompareSlotAttrs(). = This gives us the "mix_attrs" (modified indexed attributes) bitmap. In = this function we have the ResultRelInfo and EState so it is possible to = use the ExecGetAllUpdatedCols() function to potentially reduce the set o= f attributes we need to check for changes. The function only reviews in= dexed attributes that also exist in that set, which led to an interestin= g discovery... see below. In HeapUpdateModIdxAttrs() we start with an old TID and a HeapTuple, so = first we need to fetch that old HeapTuple so we can compare old/new datu= m and find any modified indexed attributes. A new function HeapUpdateHotAllowable() is used in heapam_tuple_update()= and simple_heap_update() encapsulating that logic in one place includin= g the "only summarized" test. Heap will use the HOT path if that functi= on returns true and the tuple fits on the same buffer page. No logic ch= anges, just moved the decision making around a bit. A new function HeapUpdateDetermineLockMode() is used to choose exclusive= or shared lock mode ahead of calling into heap_update(). Again, same l= ogic as before. It turns out that ExecGetAllUpdatedCols() doesn't get all updated column= s as the name advertises. It finds all the attributes (columns) that we= re mentioned in the UPDATE statement or any triggers that will fire duri= ng the update, but that overlooks any attributes changed within before-r= ow triggers that invoke functions which call heap_modify_tuple(). This = happens when tsvector_update_trigger() is called in tsearch.sql, the cod= e modifies an indexed attribute not mentioned in the UPDATE or triggers.= I've fixed this oversight and to me this makes sense, but tell me if y= ou disagree. generated_virtual.sql and updatable_views.sql had tests where the scan o= rder of the tuples on the pages seems to now be non-deterministic. I've= updated those tests to ensure stability. AFAICT my changes in this pat= ch should not change any HOT decision or any replica identity key WAL lo= gging decision, but somehow they uncovered this instability. Or there i= s a bug, but I've not spotted that as yet. Feel free to point out the o= bvious if you do. :) Just to be clear, this patch doesn't include any of $subject. In tests = I've not measured any performance regressions, and that's not surprising= as the sum total computational effort is nearly identical before/after = the patch. Yes, the patch moves some computation outside the buffer loc= k on the heap page and that might open the door to more concurrency or s= lightly different behavior when updates are highly contentious. There m= ay be more occasions where TU_Updated is returned, or some speed improve= ments when updating more than one row at a time. My hope is to get this into a shape where we're comfortable with these c= hanges and it can be committed even though none of $subject is achieved = because it does lay some ground work for those future HOT expanding and = WARM/PHOT enabling ideas I've been working on. Things on my TODO list, short term: * Re-introduce the index AM's new function to allow indexes to play a ro= le in when they require new index entries * I'm not a fan of TU_UpdateIndexes, it's *very* heap-specific, I'd like= to eliminate this Longer term, so as to return to working on $subject: * Allow types to indicate that they maintain "sub-attributes" that might= be used to form index key datum * Identify in the executor for each attribute SET if a) it has sub-attri= butes, and if so b) does the new value for the attribute change any sub-= attribute that is used to form index keys * With the previous two ideas I think we can safely re-introduce HOT for= expressions without re-evaluating the expressions and comparing index d= atum (read: without the overhead I've measured in the past) * PHOT or WARM or , teach heap how to only update= changed indexes (rather than the all or nothing approach we have today)=20 I look forward to community feedback. best. -greg ----------------- PERFORMANCE TEST RESULTS DISCLAIMER: "claude" and I worked on the perf-cf5556-v30.sh script, as I= 'm sure is apparent. I think people call it "vibe coding" when you try = to contain the enthusiasm of your friendly LLM and direct it toward some= goal. IME it's like trying to control a room full of dangerously knowl= edgeable and overly eager to please kindergarten-aged parrots. I admit = to needing more time to review the script, the test cases, and the resul= ts to fully explore these changes and validate that they actually measur= e something meaningful. If you find something silly or a glaring mistak= e, go easy on me (and "claude") but do let me (us?) know. $ ./perf-cf5556-v30.sh Checking for running PostgreSQL instances... =E2=9C=93 No other PostgreSQL instances running =E2=95=94=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90= =E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90= =E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90= =E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90= =E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90= =E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90= =E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90= =E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90= =E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=97 =E2=95=91 CF-5556 PERFORMANCE TEST SUITE =E2=95=9A=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90= =E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90= =E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90= =E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90= =E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90= =E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90= =E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90= =E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90= =E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=9D Configuration: Test duration : 60s Clients / Jobs : 8 / 4 Results directory : /tmp/cf5556-perf-results/20260226_150623 Setup extensions : NO Test extensions : NO =E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81= =E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81= =E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81= =E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81= =E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81= =E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81= =E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81= =E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81= =E2=94=81=E2=94=81 BUILDING AND TESTING =E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81= =E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81= =E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81= =E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81= =E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81= =E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81= =E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81= =E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81= =E2=94=81=E2=94=81 Baseline: d0833fdae7e (origin/master) Patches: 1 patch(es) to test cumulatively =E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81= =E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81= =E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81= =E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81= =E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81= =E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81= =E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81= =E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81= =E2=94=81=E2=94=81 VERSION: baseline (d0833fdae7e) =E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81= =E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81= =E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81= =E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81= =E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81= =E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81= =E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81= =E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81= =E2=94=81=E2=94=81 Building PostgreSQL... =E2=9C=93 PostgreSQL built Starting server... =E2=9C=93 Server started shared_preload_libraries: pg_stat_statements Setting up test databases... Creating driver_license table (100k rows, 5 BTREE indexes)... =E2=9C=93 driver_license ready (100000 rows) Creating t_jsonb table (10k rows, 3 BTREE expression indexes)... =E2=9C=93 t_jsonb ready (10k rows) Creating t_gin table (10k rows, GIN index =E2=80=94 control)... =E2=9C=93 t_gin ready (10k rows, GIN =E2=80=94 control) Running isolated tests (60s each)... license_write_single TPS: 69816.475176 Lat: 0.11= 5ms jsonb_write_single TPS: 56571.238721 Lat: 0.14= 1ms jsonb_write_batch TPS: 3606.918699 Lat: 2.218= ms gin_write_single TPS: 64040.989986 Lat: 0.12= 5ms pgbench_tpcb-like TPS: 20133.238199 Lat: 0.39= 7ms pgbench_simple-update TPS: 19219.239741 Lat: 0.41= 6ms Running concurrent read/write tests... Running concurrent test: 2 writers + 6 readers... jsonb_2w_6r Write: 14776.018733 TPS Re= ad: 80627.112253 TPS Write: 0.135 ms Read: = 0.074 ms Running concurrent test: 4 writers + 4 readers... jsonb_4w_4r Write: 29399.436764 TPS Re= ad: 52688.734439 TPS Write: 0.136 ms Read: = 0.076 ms Running concurrent test: 6 writers + 2 readers... jsonb_6w_2r Write: 43151.037340 TPS Re= ad: 25295.378828 TPS Write: 0.139 ms Read: = 0.079 ms Running concurrent test: 2 writers + 6 readers... license_2w_6r Write: 18891.968944 TPS Re= ad: 74113.652071 TPS Write: 0.106 ms Read: = 0.081 ms Running concurrent test: 4 writers + 4 readers... license_4w_4r Write: 37305.015382 TPS Re= ad: 48489.296785 TPS Write: 0.107 ms Read: = 0.082 ms Running concurrent test: 6 writers + 2 readers... license_6w_2r Write: 54403.687584 TPS Re= ad: 23519.461792 TPS Write: 0.110 ms Read: = 0.085 ms Stopping server... =E2=9C=93 Server stopped fatal: a branch named 'cf-5556-test-all-patches' already exists Applying all 1 patches cumulatively... Applying v20260226b-0001-Idenfity-modified-indexed-attributes-in-t.p= atch... =E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81= =E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81= =E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81= =E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81= =E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81= =E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81= =E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81= =E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81= =E2=94=81=E2=94=81 VERSION: patched (526c2a8733d) =E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81= =E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81= =E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81= =E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81= =E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81= =E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81= =E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81= =E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81= =E2=94=81=E2=94=81 Building PostgreSQL... =E2=9C=93 PostgreSQL built Starting server... =E2=9C=93 Server started shared_preload_libraries: pg_stat_statements Setting up test databases... Creating driver_license table (100k rows, 5 BTREE indexes)... =E2=9C=93 driver_license ready (100000 rows) Creating t_jsonb table (10k rows, 3 BTREE expression indexes)... =E2=9C=93 t_jsonb ready (10k rows) Creating t_gin table (10k rows, GIN index =E2=80=94 control)... =E2=9C=93 t_gin ready (10k rows, GIN =E2=80=94 control) Running isolated tests (60s each)... license_write_single TPS: 70093.895595 Lat: 0.11= 4ms jsonb_write_single TPS: 56751.907107 Lat: 0.14= 1ms jsonb_write_batch TPS: 4141.086856 Lat: 1.932= ms gin_write_single TPS: 63845.491951 Lat: 0.12= 5ms pgbench_tpcb-like TPS: 19911.229480 Lat: 0.40= 2ms pgbench_simple-update TPS: 19840.566625 Lat: 0.40= 3ms Running concurrent read/write tests... Running concurrent test: 2 writers + 6 readers... jsonb_2w_6r Write: 14821.571968 TPS Re= ad: 81057.390470 TPS Write: 0.135 ms Read: = 0.074 ms Running concurrent test: 4 writers + 4 readers... jsonb_4w_4r Write: 29428.063408 TPS Re= ad: 52533.626129 TPS Write: 0.136 ms Read: = 0.076 ms Running concurrent test: 6 writers + 2 readers... jsonb_6w_2r Write: 43204.958598 TPS Re= ad: 25301.939523 TPS Write: 0.139 ms Read: = 0.079 ms Running concurrent test: 2 writers + 6 readers... license_2w_6r Write: 18958.924353 TPS Re= ad: 74548.095482 TPS Write: 0.105 ms Read: = 0.080 ms Running concurrent test: 4 writers + 4 readers... license_4w_4r Write: 37185.369146 TPS Re= ad: 48580.299936 TPS Write: 0.108 ms Read: = 0.082 ms Running concurrent test: 6 writers + 2 readers... license_6w_2r Write: 54461.228141 TPS Re= ad: 23692.388873 TPS Write: 0.110 ms Read: = 0.084 ms Stopping server... =E2=9C=93 Server stopped =E2=95=94=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90= =E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90= =E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90= =E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90= =E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90= =E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90= =E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90= =E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90= =E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=97 =E2=95=91 RESULTS SUMMARY =E2=95=9A=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90= =E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90= =E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90= =E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90= =E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90= =E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90= =E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90= =E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90= =E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=9D =E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90= =E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90= =E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90= =E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90= =E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90= =E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90= =E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90= =E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90= =E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90= =E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90= =E2=95=90=E2=95=90=E2=95=90 ISOLATED WORKLOAD COMPARISON (Patched vs Baseline) =E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90= =E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90= =E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90= =E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90= =E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90= =E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90= =E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90= =E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90= =E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90= =E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90= =E2=95=90=E2=95=90=E2=95=90 Table Workload Baseline TPS Patche= d TPS =CE=94% =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80= =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80= =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80= =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80= =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80= =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80= =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80= =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80= =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80= =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80= =E2=94=80=E2=94=80=E2=94=80 gin write_single 64041.0 63= 845.5 -0.3% jsonb write_batch 3606.9 4= 141.1 +14.8% jsonb write_single 56571.2 56= 751.9 +0.3% license write_single 69816.5 70= 093.9 +0.4% pgbench simple-update 19219.2 19= 840.6 +3.2% pgbench tpcb-like 20133.2 19= 911.2 -1.1% =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80= =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80= =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80= =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80= =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80= =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80= =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80= =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80= =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80= =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80= =E2=94=80=E2=94=80=E2=94=80 =E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90= =E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90= =E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90= =E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90= =E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90= =E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90= =E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90= =E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90= =E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90= =E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90= =E2=95=90=E2=95=90=E2=95=90 CONCURRENT WORKLOAD ANALYSIS (Write Pressure Impact on Reads) =E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90= =E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90= =E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90= =E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90= =E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90= =E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90= =E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90= =E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90= =E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90= =E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90= =E2=95=90=E2=95=90=E2=95=90 Table Write:Read Base Write Patch Write= Base Read Patch Read =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80= =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80= =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80= =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80= =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80= =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80= =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80= =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80= =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80= =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80= =E2=94=80=E2=94=80=E2=94=80 jsonb 2w_6r 14776.0 14821.6= 80627.1 81057.4 license 2w_6r 18892.0 18958.9= 74113.7 74548.1 jsonb 4w_4r 29399.4 29428.1= 52688.7 52533.6 license 4w_4r 37305.0 37185.4= 48489.3 48580.3 jsonb 6w_2r 43151.0 43205.0= 25295.4 25301.9 license 6w_2r 54403.7 54461.2= 23519.5 23692.4 =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80= =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80= =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80= =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80= =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80= =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80= =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80= =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80= =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80= =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80= =E2=94=80=E2=94=80=E2=94=80 Output files: /tmp/cf5556-perf-results/20260226_150623/results.txt (raw results) /tmp/cf5556-perf-results/20260226_150623/*_server.log (server startup/= error logs) /tmp/cf5556-perf-results/20260226_150623/*_setup.log (database setup l= ogs) /tmp/cf5556-perf-results/20260226_150623/*_build.log (build logs) /tmp/cf5556-perf-results/20260226_150623/*_*.txt (pgbench output) /tmp/cf5556-perf-results/20260226_150623/*_*.sql (test queries) Cleaning up... =E2=9C=93 Cleanup complete --f893d3fc92324816820a9ab769f8f3a7 Content-Disposition: attachment; filename*0="v30-0001-Idenfity-modified-indexed-attributes-in-t.patch" Content-Type: text/x-patch; name="=?UTF-8?Q?v30-0001-Idenfity-modified-indexed-attributes-in-t.patch?=" Content-Transfer-Encoding: base64 RnJvbSA0NGVkNzViZDJiMjJmMDc0MDFjYTUyNzA5MTFmNzkzNDI2OTI2ZjQxIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBHcmVnIEJ1cmQgPGdyZWdAYnVyZC5tZT4KRGF0ZTog U3VuLCAyIE5vdiAyMDI1IDExOjM2OjIwIC0wNTAwClN1YmplY3Q6IFtQQVRDSCB2MzBdIElk ZW5maXR5IG1vZGlmaWVkIGluZGV4ZWQgYXR0cmlidXRlcyBpbiB0aGUKIGV4ZWN1dG9yIG9u IFVQREFURQoKUmVmYWN0b3IgZXhlY3V0b3IgdXBkYXRlIGxvZ2ljIHRvIGRldGVybWluZSB3 aGljaCBpbmRleGVkIGNvbHVtbnMgaGF2ZQphY3R1YWxseSBjaGFuZ2VkIGR1cmluZyBhbiBV UERBVEUgb3BlcmF0aW9uIHJhdGhlciB0aGFuIGxlYXZpbmcgdGhpcyB1cAp0byBIZWFwRGV0 ZXJtaW5lQ29sdW1uc0luZm8oKSBpbiBoZWFwX3VwZGF0ZSgpLiAgRmluZGluZyB0aGlzIHNl dCBvZgphdHRyaWJ1dGVzIGlzIG5vdCBoZWFwLXNwZWNpZmljLCBidXQgbW9yZSBnZW5lcmFs IHRvIGFsbCB0YWJsZSBBTXMgYW5kCmhhdmluZyB0aGlzIGluZm9ybWF0aW9uIGluIHRoZSBl eGVjdXRvciBjb3VsZCBpbmZvcm0gb3RoZXIgZGVjaXNpb25zCmFib3V0IHdoZW4gaW5kZXgg aW5zZXJ0cyBhcmUgcmVxdWlyZWQgYW5kIHdoZW4gdGhleSBhcmUgbm90IHJlZ2FyZGxlc3MK b2YgdGhlIHRhYmxlIEFNJ3MgTVZDQyBpbXBsZW1lbnRhdGlvbiBzdHJhdGVneS4KClRoZSBo ZWFwLW9ubHkgdHVwbGUgZGVjaXNpb24gKEhPVCkgaW4gaGVhcCBmdW5jdGlvbnMgYXMgaXQg YWx3YXlzIGhhcywKYnV0IHRoZSBkZXRlcm1pbmF0aW9uIG9mIHRoZSAibW9kaWZpZWQgaW5k ZXhlZCBhdHRyaWJ1dGVzIiAobWl4X2F0dHJzLAp3YXMga25vd24gYXMgbW9kaWZpZWRfYXR0 cnMpIG5vdyBoYXBwZW5zIG91dHNpZGUgdGhlIGJ1ZmZlciBsb2NrIGFuZCBjYW4KaW5mb3Jt IG90aGVyIGRlY2lzaW9ucyB1bnJlbGF0ZWQgdG8gaGVhcC4KCkV4ZWNVcGRhdGVNb2RJZHhB dHRycygpIHJlcGxhY2VzIEhlYXBEZXRlcm1pbmVzQ29sdW1uc0luZm8oKSBhbmQgaXMKY2Fs bGVkIGJlZm9yZSB0YWJsZV90dXBsZV91cGRhdGUoKSBjcnVjaWFsbHkgd2l0aG91dCB0aGUg bmVlZCBmb3IgYW4KZXhjbHVzaXZlIGJ1ZmZlciBsb2NrIG9uIHRoZSBwYWdlIHRoYXQgaG9s ZHMgdGhlIHR1cGxlIGJlaW5nIHVwZGF0ZWQuClRoaXMgcmVkdWNlcyB0aGUgdGltZSB0aGUg bG9jayBpcyBoZWxkIGxhdGVyIHdpdGhpbgpoZWFwYW1fdHVwbGVfdXBkYXRlKCkgYW5kIGhl YXBfdXBkYXRlKCkuCgpFeGVjVXBkYXRlTW9kSWR4QXR0cnMoKSBpbiB0dXJuIHVzZXMgRXhl Y0NvbXBhcmVTbG90QXR0cnMoKSB0byBpZGVudGlmeQp3aGljaCBhdHRyaWJ1dGVzIGhhdmUg Y2hhbmdlZCBhbmQgdGhlbiBpbnRlcnNlY3RzIHRoYXQgd2l0aCB0aGUgc2V0IG9mCmluZGV4 ZWQgYXR0cmlidXRlcyB0byBpZGVudGlmeSB0aGUgbW9kaWZpZWQgaW5kZXhlZCBzZXQsIHRo ZSBtaXhfYXR0cnMuCgpCZXNpZGVzIGlkZW50aWZ5aW5nIHRoZSBzZXQgb2YgbW9kaWZpZWQg aW5kZXhlZCBhdHRyaWJ1dGVzCkhlYXBEZXRlcm1pbmVDb2x1bW5zSW5mbygpIHdhcyBhbHNv IHJlc3BvbnNpYmxlIGZvciBwYXJ0IG9mIHRoZSBsb2dpYwppbnZvbHZlZCBpbiB0aGUgZGVj aXNpb24gdG8gaW5jbHVkZSB0aGUgcmVwbGljYSBpZGVudGl0eSBrZXkgb3Igbm90LgpUaGlz IG1vdmVkIGludG8gaGVhcF91cGRhdGUoKSBhbmQgb3V0IG9mIEhlYXBEZXRlcm1pbmVDb2x1 bW5zSW5mbygpCndoaWNoIGhhcyBiZWVuIHJlbmFtZWQgdG8gSGVhcFVwZGF0ZU1vZElkeEF0 dHJzKCkgYXMgaXQgaXMgc3RpbGwKcmVxdWlyZWQgd2l0aGluIHNpbXBsZV9oZWFwX3VwZGF0 ZSgpIHRvIGJlIGFibGUgdG8gaWRlbnRpZnkgbWl4X2F0dHJzCmdpdmVuIG9ubHkgYW4gb2xk IFRJRCBhbmQgYSBuZXcgSGVhcFR1cGxlLgoKVXBkYXRlcyBzdGVtbWluZyBmcm9tIGxvZ2lj YWwgcmVwbGljYXRpb24gYWxzbyB1c2UgdGhlIG5ldwpFeGVjVXBkYXRlTW9kSWR4QXR0cnMo KSBpbiBFeGVjU2ltcGxlUmVsYXRpb25VcGRhdGUoKS4KClRoaXMgcGF0Y2ggYWxzbyBpbnRy b2R1Y2VzIGEgZmV3IGhlbHBlciBmdW5jdGlvbnM6IEhlYXBVcGRhdGVIb3RBbGxvd2FibGUo KSwKSGVhcFVwZGF0ZURldGVybWluZUxvY2ttb2RlKCkuICBUaGVzZSBhcmUgdXNlZCBpbiBi b3RoIGhlYXBfdXBkYXRlKCkgYW5kCnNpbXBsZV9oZWFwX3VwZGF0ZSgpLgoKVGhlIGhlYXBf dXBkYXRlKCkgZnVuY3Rpb24gaXMgY2FsbGVkIG5vdyB3aXRoIGxvY2ttb2RlIHByZS1kZXRl cm1pbmVkCmFuZCBhIGJvb2xlYW4gaW5kaWNhdGluZyBpZiB0aGUgdXBkYXRlIGNhbiBwZXJt aXQgSE9UIG9yIG5vdC4gSWYgZHVyaW5nCmhlYXBfdXBkYXRlKCkgdGhlIG5ldyB0dXBsZSB3 aWxsIGZpdCBvbiB0aGUgc2FtZSBwYWdlIGFuZCB0aGF0IGJvb2xlYW4KaXMgdHJ1ZSwgdGhl IHVwZGF0ZSBpcyBIT1QuICBOb25lIG9mIHRoZSBsb2dpYyByZWxhdGVkIHRvIHdoZW4gSE9U IGlzCmFsbG93ZWQgaGFzIGNoYW5nZWQuCgpUcmlnZ2VycyBhcmUgZnJlZSB0byB1c2UgaGVh cF9tb2RpZnlfdHVwbGUoKSBhbmQgdXBkYXRlIGF0dHJpYnV0ZXMgbm90CmZvdW5kIGluIHRo ZSBVUERBVEUgc3RhdGVtZW50IG9yIHRyaWdnZXJzIHRoYXQgZmlyZSBkdWUgdG8gYW4gVVBE QVRFLgpXaGVuIHRoYXQgaGFwcGVucyB0aGUgZXhlY3V0b3IgaGFzIG5vIGtub3dsZWRnZSBv ZiB0aG9zZSBjaGFuZ2VzLiAgVGhpcwpmb3JjZWQgSGVhcERldGVybWluZUNvbHVtbnNJbmZv KCkgdG8gc2NhbiBhbGwgaW5kZXhlZCBhdHRyaWJ1dGVzIG9uIGEKcmVsYXRpb24gcmF0aGVy IHRoYW4gb25seSB0aGUgaW50ZXJzZWN0aW9uIG9mIGluZGV4ZWQgYW5kIHRob3NlCmlkZW50 aWZpZWQgYnkgRXhlY0dldEFsbFVwZGF0ZWRDb2xzKCkuICBUaGlzIG9jY3VycyBpbiBhdCBs ZWFzdCBvbmUgdGVzdAp0aGF0IHVzZXMgdGhlIHRzdmVjdG9yX3VwZGF0ZV90cmlnZ2VyKCkg ZnVuY3Rpb24gKHRzZWFyY2guc3FsKS4KRXhlY0JSVXBkYXRlVHJpZ2dlcnMoKSBoYXMgYmVl biBjaGFuZ2VkIHRvIGlkZW50aWZ5IGNoYW5nZXMgdG8gaW5kZXhlZApjb2x1bW5zIG5vdCBm b3VuZCBieSBFeGVjR2V0QWxsVXBkYXRlQ29scygpIGFuZCBhZGQgdGhvc2UgYXR0cmlidXRl cyB0bwpyaV9leHRyYVVwZGF0ZWRDb2xzLgoKVGhyZWUgdGVzdHMgd2VyZSBhZGp1c3RlZCB0 byBhdm9pZCBpbnN0YWJpbGl0eSBkdWUgdG8gdHVwbGUgb3JkZXJpbmcKZHVyaW5nIGhlYXAg cGFnZSBzY2Fucy4gIFRoaXMgYXZvaWRzIG5vbi1kZXRlcm1pbmlzdGljIHJlc3VsdHMuCi0t LQogc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtLmMgICAgICAgICAgICAgIHwgNDgx ICsrKysrKysrKysrLS0tLS0tLQogc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtX2hh bmRsZXIuYyAgICAgIHwgIDMyICstCiBzcmMvYmFja2VuZC9hY2Nlc3MvdGFibGUvdGFibGVh bS5jICAgICAgICAgICAgfCAgIDUgKy0KIHNyYy9iYWNrZW5kL2NvbW1hbmRzL3RyaWdnZXIu YyAgICAgICAgICAgICAgICB8ICAyMCArLQogc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY1Jl cGxpY2F0aW9uLmMgICAgICAgIHwgICA3ICstCiBzcmMvYmFja2VuZC9leGVjdXRvci9leGVj VHVwbGVzLmMgICAgICAgICAgICAgfCAgNzggKysrCiBzcmMvYmFja2VuZC9leGVjdXRvci9u b2RlTW9kaWZ5VGFibGUuYyAgICAgICAgfCAgOTMgKysrLQogc3JjL2JhY2tlbmQvdXRpbHMv Y2FjaGUvcmVsY2FjaGUuYyAgICAgICAgICAgIHwgIDQ0ICstCiBzcmMvaW5jbHVkZS9hY2Nl c3MvaGVhcGFtLmggICAgICAgICAgICAgICAgICAgfCAgMTMgKy0KIHNyYy9pbmNsdWRlL2Fj Y2Vzcy90YWJsZWFtLmggICAgICAgICAgICAgICAgICB8ICAgOCArLQogc3JjL2luY2x1ZGUv ZXhlY3V0b3IvZXhlY3V0b3IuaCAgICAgICAgICAgICAgIHwgICA5ICsKIHNyYy9pbmNsdWRl L3V0aWxzL3JlbC5oICAgICAgICAgICAgICAgICAgICAgICB8ICAgMiArLQogc3JjL2luY2x1 ZGUvdXRpbHMvcmVsY2FjaGUuaCAgICAgICAgICAgICAgICAgIHwgICAyICstCiAuLi4vcmVn cmVzcy9leHBlY3RlZC9nZW5lcmF0ZWRfdmlydHVhbC5vdXQgICAgfCAgIDIgKy0KIHNyYy90 ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvdXBkYXRhYmxlX3ZpZXdzLm91dCB8ICAgNCArLQogc3Jj L3Rlc3QvcmVncmVzcy9zcWwvZ2VuZXJhdGVkX3ZpcnR1YWwuc3FsICAgIHwgICAyICstCiBz cmMvdGVzdC9yZWdyZXNzL3NxbC91cGRhdGFibGVfdmlld3Muc3FsICAgICAgfCAgIDIgKy0K IDE3IGZpbGVzIGNoYW5nZWQsIDU3NiBpbnNlcnRpb25zKCspLCAyMjggZGVsZXRpb25zKC0p CgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtLmMgYi9zcmMv YmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW0uYwppbmRleCA5OGQ1M2NhZWVhOC4uOGFjZmVl OTQyZTggMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbS5jCisr KyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbS5jCkBAIC0zNywyMCArMzcsMjYg QEAKICNpbmNsdWRlICJhY2Nlc3MvbXVsdGl4YWN0LmgiCiAjaW5jbHVkZSAiYWNjZXNzL3N1 YnRyYW5zLmgiCiAjaW5jbHVkZSAiYWNjZXNzL3N5bmNzY2FuLmgiCisjaW5jbHVkZSAiYWNj ZXNzL3N5c2F0dHIuaCIKKyNpbmNsdWRlICJhY2Nlc3MvdGFibGVhbS5oIgogI2luY2x1ZGUg ImFjY2Vzcy92YWxpZC5oIgogI2luY2x1ZGUgImFjY2Vzcy92aXNpYmlsaXR5bWFwLmgiCiAj aW5jbHVkZSAiYWNjZXNzL3hsb2dpbnNlcnQuaCIKICNpbmNsdWRlICJjYXRhbG9nL3BnX2Rh dGFiYXNlLmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19kYXRhYmFzZV9kLmgiCiAjaW5jbHVk ZSAiY29tbWFuZHMvdmFjdXVtLmgiCisjaW5jbHVkZSAiZXhlY3V0b3IvdHVwdGFibGUuaCIK KyNpbmNsdWRlICJub2Rlcy9sb2Nrb3B0aW9ucy5oIgogI2luY2x1ZGUgInBnc3RhdC5oIgog I2luY2x1ZGUgInBvcnQvcGdfYml0dXRpbHMuaCIKKyNpbmNsdWRlICJzdG9yYWdlL2J1Zi5o IgogI2luY2x1ZGUgInN0b3JhZ2UvbG1nci5oIgogI2luY2x1ZGUgInN0b3JhZ2UvcHJlZGlj YXRlLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9wcm9jYXJyYXkuaCIKICNpbmNsdWRlICJ1dGls cy9kYXR1bS5oIgogI2luY2x1ZGUgInV0aWxzL2luamVjdGlvbl9wb2ludC5oIgogI2luY2x1 ZGUgInV0aWxzL2ludmFsLmgiCisjaW5jbHVkZSAidXRpbHMvcmVsY2FjaGUuaCIKICNpbmNs dWRlICJ1dGlscy9zcGNjYWNoZS5oIgogI2luY2x1ZGUgInV0aWxzL3N5c2NhY2hlLmgiCgpA QCAtNjcsMTEgKzczLDggQEAgc3RhdGljIHZvaWQgY2hlY2tfbG9ja19pZl9pbnBsYWNlX3Vw ZGF0ZWFibGVfcmVsKFJlbGF0aW9uIHJlbGF0aW9uLAogCQkJCQkJCQkJCQkJIEhlYXBUdXBs ZSBuZXd0dXApOwogc3RhdGljIHZvaWQgY2hlY2tfaW5wbGFjZV9yZWxfbG9jayhIZWFwVHVw bGUgb2xkdHVwKTsKICNlbmRpZgotc3RhdGljIEJpdG1hcHNldCAqSGVhcERldGVybWluZUNv bHVtbnNJbmZvKFJlbGF0aW9uIHJlbGF0aW9uLAotCQkJCQkJCQkJCSAgIEJpdG1hcHNldCAq aW50ZXJlc3RpbmdfY29scywKLQkJCQkJCQkJCQkgICBCaXRtYXBzZXQgKmV4dGVybmFsX2Nv bHMsCi0JCQkJCQkJCQkJICAgSGVhcFR1cGxlIG9sZHR1cCwgSGVhcFR1cGxlIG5ld3R1cCwK LQkJCQkJCQkJCQkgICBib29sICpoYXNfZXh0ZXJuYWwpOworc3RhdGljIEJpdG1hcHNldCAq SGVhcFVwZGF0ZU1vZElkeEF0dHJzKFJlbGF0aW9uIHJlbGF0aW9uLAorCQkJCQkJCQkJCUhl YXBUdXBsZSBvbGR0dXAsIEhlYXBUdXBsZSBuZXd0dXApOwogc3RhdGljIGJvb2wgaGVhcF9h Y3F1aXJlX3R1cGxvY2soUmVsYXRpb24gcmVsYXRpb24sIGNvbnN0IEl0ZW1Qb2ludGVyRGF0 YSAqdGlkLAogCQkJCQkJCQkgTG9ja1R1cGxlTW9kZSBtb2RlLCBMb2NrV2FpdFBvbGljeSB3 YWl0X3BvbGljeSwKIAkJCQkJCQkJIGJvb2wgKmhhdmVfdHVwbGVfbG9jayk7CkBAIC0zMzAw LDcgKzMzMDMsNyBAQCBzaW1wbGVfaGVhcF9kZWxldGUoUmVsYXRpb24gcmVsYXRpb24sIGNv bnN0IEl0ZW1Qb2ludGVyRGF0YSAqdGlkKQogICoJaGVhcF91cGRhdGUgLSByZXBsYWNlIGEg dHVwbGUKICAqCiAgKiBTZWUgdGFibGVfdHVwbGVfdXBkYXRlKCkgZm9yIGFuIGV4cGxhbmF0 aW9uIG9mIHRoZSBwYXJhbWV0ZXJzLCBleGNlcHQgdGhhdAotICogdGhpcyByb3V0aW5lIGRp cmVjdGx5IHRha2VzIGEgdHVwbGUgcmF0aGVyIHRoYW4gYSBzbG90LgorICogdGhpcyByb3V0 aW5lIGRpcmVjdGx5IHRha2VzIGEgaGVhcCB0dXBsZSByYXRoZXIgdGhhbiBhIHNsb3QuCiAg KgogICogSW4gdGhlIGZhaWx1cmUgY2FzZXMsIHRoZSByb3V0aW5lIGZpbGxzICp0bWZkIHdp dGggdGhlIHR1cGxlJ3MgdF9jdGlkLAogICogdF94bWF4IChyZXNvbHZpbmcgYSBwb3NzaWJs ZSBNdWx0aVhhY3QsIGlmIG5lY2Vzc2FyeSksIGFuZCB0X2NtYXggKHRoZSBsYXN0CkBAIC0z MzEwLDE3ICszMzEzLDEzIEBAIHNpbXBsZV9oZWFwX2RlbGV0ZShSZWxhdGlvbiByZWxhdGlv biwgY29uc3QgSXRlbVBvaW50ZXJEYXRhICp0aWQpCiBUTV9SZXN1bHQKIGhlYXBfdXBkYXRl KFJlbGF0aW9uIHJlbGF0aW9uLCBjb25zdCBJdGVtUG9pbnRlckRhdGEgKm90aWQsIEhlYXBU dXBsZSBuZXd0dXAsCiAJCQlDb21tYW5kSWQgY2lkLCBTbmFwc2hvdCBjcm9zc2NoZWNrLCBi b29sIHdhaXQsCi0JCQlUTV9GYWlsdXJlRGF0YSAqdG1mZCwgTG9ja1R1cGxlTW9kZSAqbG9j a21vZGUsCi0JCQlUVV9VcGRhdGVJbmRleGVzICp1cGRhdGVfaW5kZXhlcykKKwkJCVRNX0Zh aWx1cmVEYXRhICp0bWZkLCBjb25zdCBMb2NrVHVwbGVNb2RlIGxvY2ttb2RlLAorCQkJY29u c3QgQml0bWFwc2V0ICptaXhfYXR0cnMsIGNvbnN0IGJvb2wgaG90X2FsbG93ZWQpCiB7CiAJ VE1fUmVzdWx0CXJlc3VsdDsKIAlUcmFuc2FjdGlvbklkIHhpZCA9IEdldEN1cnJlbnRUcmFu c2FjdGlvbklkKCk7Ci0JQml0bWFwc2V0ICAqaG90X2F0dHJzOwotCUJpdG1hcHNldCAgKnN1 bV9hdHRyczsKLQlCaXRtYXBzZXQgICprZXlfYXR0cnM7Ci0JQml0bWFwc2V0ICAqaWRfYXR0 cnM7Ci0JQml0bWFwc2V0ICAqaW50ZXJlc3RpbmdfYXR0cnM7Ci0JQml0bWFwc2V0ICAqbW9k aWZpZWRfYXR0cnM7CisJQml0bWFwc2V0ICAqaWR4X2F0dHJzLAorCQkJICAgKnJpZF9hdHRy czsKIAlJdGVtSWQJCWxwOwogCUhlYXBUdXBsZURhdGEgb2xkdHVwOwogCUhlYXBUdXBsZQlo ZWFwdHVwOwpAQCAtMzMzOSwxMyArMzMzOCwxMiBAQCBoZWFwX3VwZGF0ZShSZWxhdGlvbiBy ZWxhdGlvbiwgY29uc3QgSXRlbVBvaW50ZXJEYXRhICpvdGlkLCBIZWFwVHVwbGUgbmV3dHVw LAogCWJvb2wJCWhhdmVfdHVwbGVfbG9jayA9IGZhbHNlOwogCWJvb2wJCWlzY29tYm87CiAJ Ym9vbAkJdXNlX2hvdF91cGRhdGUgPSBmYWxzZTsKLQlib29sCQlzdW1tYXJpemVkX3VwZGF0 ZSA9IGZhbHNlOwogCWJvb2wJCWtleV9pbnRhY3Q7CiAJYm9vbAkJYWxsX3Zpc2libGVfY2xl YXJlZCA9IGZhbHNlOwogCWJvb2wJCWFsbF92aXNpYmxlX2NsZWFyZWRfbmV3ID0gZmFsc2U7 CiAJYm9vbAkJY2hlY2tlZF9sb2NrZXJzOwogCWJvb2wJCWxvY2tlcl9yZW1haW5zOwotCWJv b2wJCWlkX2hhc19leHRlcm5hbCA9IGZhbHNlOworCWJvb2wJCXJlcF9pZF9rZXlfcmVxdWly ZWQgPSBmYWxzZTsKIAlUcmFuc2FjdGlvbklkIHhtYXhfbmV3X3R1cGxlLAogCQkJCXhtYXhf b2xkX3R1cGxlOwogCXVpbnQxNgkJaW5mb21hc2tfb2xkX3R1cGxlLApAQCAtMzM3NiwzMyAr MzM3NCwxNCBAQCBoZWFwX3VwZGF0ZShSZWxhdGlvbiByZWxhdGlvbiwgY29uc3QgSXRlbVBv aW50ZXJEYXRhICpvdGlkLCBIZWFwVHVwbGUgbmV3dHVwLAogI2VuZGlmCgogCS8qCi0JICog RmV0Y2ggdGhlIGxpc3Qgb2YgYXR0cmlidXRlcyB0byBiZSBjaGVja2VkIGZvciB2YXJpb3Vz IG9wZXJhdGlvbnMuCi0JICoKLQkgKiBGb3IgSE9UIGNvbnNpZGVyYXRpb25zLCB0aGlzIGlz IHdhc3RlZCBlZmZvcnQgaWYgd2UgZmFpbCB0byB1cGRhdGUgb3IKLQkgKiBoYXZlIHRvIHB1 dCB0aGUgbmV3IHR1cGxlIG9uIGEgZGlmZmVyZW50IHBhZ2UuICBCdXQgd2UgbXVzdCBjb21w dXRlIHRoZQotCSAqIGxpc3QgYmVmb3JlIG9idGFpbmluZyBidWZmZXIgbG9jayAtLS0gaW4g dGhlIHdvcnN0IGNhc2UsIGlmIHdlIGFyZQotCSAqIGRvaW5nIGFuIHVwZGF0ZSBvbiBvbmUg b2YgdGhlIHJlbGV2YW50IHN5c3RlbSBjYXRhbG9ncywgd2UgY291bGQKLQkgKiBkZWFkbG9j ayBpZiB3ZSB0cnkgdG8gZmV0Y2ggdGhlIGxpc3QgbGF0ZXIuICBJbiBhbnkgY2FzZSwgdGhl IHJlbGNhY2hlCi0JICogY2FjaGVzIHRoZSBkYXRhIHNvIHRoaXMgaXMgdXN1YWxseSBwcmV0 dHkgY2hlYXAuCi0JICoKLQkgKiBXZSBhbHNvIG5lZWQgY29sdW1ucyB1c2VkIGJ5IHRoZSBy ZXBsaWNhIGlkZW50aXR5IGFuZCBjb2x1bW5zIHRoYXQgYXJlCi0JICogY29uc2lkZXJlZCB0 aGUgImtleSIgb2Ygcm93cyBpbiB0aGUgdGFibGUuCisJICogRmV0Y2ggdGhlIGF0dHJpYnV0 ZXMgdXNlZCBhY3Jvc3MgYWxsIGluZGV4ZXMgb24gdGhpcyByZWxhdGlvbiBhcyB3ZWxsCisJ ICogYXMgdGhlIHJlcGxpY2EgaWRlbnRpdHkgYW5kIGNvbHVtbnMuCiAJICoKLQkgKiBOb3Rl IHRoYXQgd2UgZ2V0IGNvcGllcyBvZiBlYWNoIGJpdG1hcCwgc28gd2UgbmVlZCBub3Qgd29y cnkgYWJvdXQKLQkgKiByZWxjYWNoZSBmbHVzaCBoYXBwZW5pbmcgbWlkd2F5IHRocm91Z2gu Ci0JICovCi0JaG90X2F0dHJzID0gUmVsYXRpb25HZXRJbmRleEF0dHJCaXRtYXAocmVsYXRp b24sCi0JCQkJCQkJCQkJICAgSU5ERVhfQVRUUl9CSVRNQVBfSE9UX0JMT0NLSU5HKTsKLQlz dW1fYXR0cnMgPSBSZWxhdGlvbkdldEluZGV4QXR0ckJpdG1hcChyZWxhdGlvbiwKLQkJCQkJ CQkJCQkgICBJTkRFWF9BVFRSX0JJVE1BUF9TVU1NQVJJWkVEKTsKLQlrZXlfYXR0cnMgPSBS ZWxhdGlvbkdldEluZGV4QXR0ckJpdG1hcChyZWxhdGlvbiwgSU5ERVhfQVRUUl9CSVRNQVBf S0VZKTsKLQlpZF9hdHRycyA9IFJlbGF0aW9uR2V0SW5kZXhBdHRyQml0bWFwKHJlbGF0aW9u LAotCQkJCQkJCQkJCSAgSU5ERVhfQVRUUl9CSVRNQVBfSURFTlRJVFlfS0VZKTsKLQlpbnRl cmVzdGluZ19hdHRycyA9IE5VTEw7Ci0JaW50ZXJlc3RpbmdfYXR0cnMgPSBibXNfYWRkX21l bWJlcnMoaW50ZXJlc3RpbmdfYXR0cnMsIGhvdF9hdHRycyk7Ci0JaW50ZXJlc3RpbmdfYXR0 cnMgPSBibXNfYWRkX21lbWJlcnMoaW50ZXJlc3RpbmdfYXR0cnMsIHN1bV9hdHRycyk7Ci0J aW50ZXJlc3RpbmdfYXR0cnMgPSBibXNfYWRkX21lbWJlcnMoaW50ZXJlc3RpbmdfYXR0cnMs IGtleV9hdHRycyk7Ci0JaW50ZXJlc3RpbmdfYXR0cnMgPSBibXNfYWRkX21lbWJlcnMoaW50 ZXJlc3RpbmdfYXR0cnMsIGlkX2F0dHJzKTsKKwkgKiBOT1RFOiByZWxjYWNoZSByZXR1cm5z IGNvcGllcyBvZiBlYWNoIGJpdG1hcCwgc28gd2UgbmVlZCBub3Qgd29ycnkKKwkgKiBhYm91 dCByZWxjYWNoZSBmbHVzaCBoYXBwZW5pbmcgbWlkd2F5IHRocm91Z2guCisJICovCisJaWR4 X2F0dHJzID0gUmVsYXRpb25HZXRJbmRleEF0dHJCaXRtYXAocmVsYXRpb24sIElOREVYX0FU VFJfQklUTUFQX0lOREVYRUQpOworCXJpZF9hdHRycyA9IFJlbGF0aW9uR2V0SW5kZXhBdHRy Qml0bWFwKHJlbGF0aW9uLCBJTkRFWF9BVFRSX0JJVE1BUF9JREVOVElUWV9LRVkpOwoKIAli bG9jayA9IEl0ZW1Qb2ludGVyR2V0QmxvY2tOdW1iZXIob3RpZCk7CiAJSU5KRUNUSU9OX1BP SU5UKCJoZWFwX3VwZGF0ZS1iZWZvcmUtcGluIiwgTlVMTCk7CkBAIC0zNDU2LDIwICszNDM1 LDE3IEBAIGhlYXBfdXBkYXRlKFJlbGF0aW9uIHJlbGF0aW9uLCBjb25zdCBJdGVtUG9pbnRl ckRhdGEgKm90aWQsIEhlYXBUdXBsZSBuZXd0dXAsCiAJCXRtZmQtPmN0aWQgPSAqb3RpZDsK IAkJdG1mZC0+eG1heCA9IEludmFsaWRUcmFuc2FjdGlvbklkOwogCQl0bWZkLT5jbWF4ID0g SW52YWxpZENvbW1hbmRJZDsKLQkJKnVwZGF0ZV9pbmRleGVzID0gVFVfTm9uZTsKCi0JCWJt c19mcmVlKGhvdF9hdHRycyk7Ci0JCWJtc19mcmVlKHN1bV9hdHRycyk7Ci0JCWJtc19mcmVl KGtleV9hdHRycyk7Ci0JCWJtc19mcmVlKGlkX2F0dHJzKTsKLQkJLyogbW9kaWZpZWRfYXR0 cnMgbm90IHlldCBpbml0aWFsaXplZCAqLwotCQlibXNfZnJlZShpbnRlcmVzdGluZ19hdHRy cyk7CisJCWJtc19mcmVlKHJpZF9hdHRycyk7CisJCWJtc19mcmVlKGlkeF9hdHRycyk7CisJ CS8qIG1peF9hdHRycyBpcyBvd25lZCBieSB0aGUgY2FsbGVyLCBkb24ndCBmcmVlIGl0ICov CisKIAkJcmV0dXJuIFRNX0RlbGV0ZWQ7CiAJfQoKIAkvKgotCSAqIEZpbGwgaW4gZW5vdWdo IGRhdGEgaW4gb2xkdHVwIGZvciBIZWFwRGV0ZXJtaW5lQ29sdW1uc0luZm8gdG8gd29yawot CSAqIHByb3Blcmx5LgorCSAqIEZpbGwgaW4gZW5vdWdoIGRhdGEgaW4gb2xkdHVwIHRvIGRl dGVybWluZSByZXBsaWNhIGlkZW50aXR5IGF0dHJpYnV0ZQorCSAqIHJlcXVpcmVtZW50cy4K IAkgKi8KIAlvbGR0dXAudF90YWJsZU9pZCA9IFJlbGF0aW9uR2V0UmVsaWQocmVsYXRpb24p OwogCW9sZHR1cC50X2RhdGEgPSAoSGVhcFR1cGxlSGVhZGVyKSBQYWdlR2V0SXRlbShwYWdl LCBscCk7CkBAIC0zNDgwLDE2ICszNDU2LDU5IEBAIGhlYXBfdXBkYXRlKFJlbGF0aW9uIHJl bGF0aW9uLCBjb25zdCBJdGVtUG9pbnRlckRhdGEgKm90aWQsIEhlYXBUdXBsZSBuZXd0dXAs CiAJbmV3dHVwLT50X3RhYmxlT2lkID0gUmVsYXRpb25HZXRSZWxpZChyZWxhdGlvbik7Cgog CS8qCi0JICogRGV0ZXJtaW5lIGNvbHVtbnMgbW9kaWZpZWQgYnkgdGhlIHVwZGF0ZS4gIEFk ZGl0aW9uYWxseSwgaWRlbnRpZnkKLQkgKiB3aGV0aGVyIGFueSBvZiB0aGUgdW5tb2RpZmll ZCByZXBsaWNhIGlkZW50aXR5IGtleSBhdHRyaWJ1dGVzIGluIHRoZQotCSAqIG9sZCB0dXBs ZSBpcyBleHRlcm5hbGx5IHN0b3JlZCBvciBub3QuICBUaGlzIGlzIHJlcXVpcmVkIGJlY2F1 c2UgZm9yCi0JICogc3VjaCBhdHRyaWJ1dGVzIHRoZSBmbGF0dGVuZWQgdmFsdWUgd29uJ3Qg YmUgV0FMIGxvZ2dlZCBhcyBwYXJ0IG9mIHRoZQotCSAqIG5ldyB0dXBsZSBzbyB3ZSBtdXN0 IGluY2x1ZGUgaXQgYXMgcGFydCBvZiB0aGUgb2xkX2tleV90dXBsZS4gIFNlZQotCSAqIEV4 dHJhY3RSZXBsaWNhSWRlbnRpdHkuCisJICogRXh0cmFjdFJlcGxpY2F0SWRlbnRpdHkoKSBu ZWVkcyB0byBrbm93IGlmIGEgbW9kaWZpZWQgaW5kZXhlZCBhdHRyYnV0ZQorCSAqIGlzIHVz ZWQgYXMgYSByZXBsaWNhIGluZGVudGl0eSBvciBpZiBhbnkgb2YgdGhlIHJlcGxpY2EgaWRl bnRpdHkKKwkgKiBhdHRyaWJ1dGVzIGFyZSByZWZlcmVuY2VkIGluIGFuIGluZGV4LCB1bm1v ZGlmaWVkLCBhbmQgYXJlIHN0b3JlZAorCSAqIGV4dGVybmFsbHkgaW4gdGhlIG9sZCB0dXBs ZSBiZWluZyByZXBsYWNlZC4gIEluIHRob3NlIGNhc2VzIGl0IG1heSBiZQorCSAqIG5lY2Vz c2FyeSB0byBXQUwgbG9nIHRoZW0gdG8gc28gdGhleSBhcmUgYXZhaWxhYmxlIHRvIHJlcGxp Y2FzLgogCSAqLwotCW1vZGlmaWVkX2F0dHJzID0gSGVhcERldGVybWluZUNvbHVtbnNJbmZv KHJlbGF0aW9uLCBpbnRlcmVzdGluZ19hdHRycywKLQkJCQkJCQkJCQkJICBpZF9hdHRycywg Jm9sZHR1cCwKLQkJCQkJCQkJCQkJICBuZXd0dXAsICZpZF9oYXNfZXh0ZXJuYWwpOworCXJl cF9pZF9rZXlfcmVxdWlyZWQgPSBibXNfb3ZlcmxhcChtaXhfYXR0cnMsIHJpZF9hdHRycyk7 CisJaWYgKCFyZXBfaWRfa2V5X3JlcXVpcmVkKQorCXsKKwkJQml0bWFwc2V0ICAqYXR0cnM7 CisJCVR1cGxlRGVzYwl0dXBkZXNjID0gUmVsYXRpb25HZXREZXNjcihyZWxhdGlvbik7CisJ CWludAkJCWF0dGlkeCA9IC0xOworCisJCS8qCisJCSAqIFJlZHVjZSB0aGUgc2V0IHVuZGVy IHJldmlldyB0byBvbmx5IHRoZSB1bm1vZGlmaWVkIGluZGV4ZWQgcmVwbGljYQorCQkgKiBp ZGVudGl0eSBrZXkgYXR0cmlidXRlcy4gIGlkeF9hdHRycyBpcyBjb3BpZWQgKGJ5IGJtc19k aWZmZXJlbmNlKCkpCisJCSAqIG5vdCBtb2RpZmllZCBoZXJlLgorCQkgKi8KKwkJYXR0cnMg PSBibXNfZGlmZmVyZW5jZShpZHhfYXR0cnMsIG1peF9hdHRycyk7CisJCWF0dHJzID0gYm1z X2ludF9tZW1iZXJzKGF0dHJzLCByaWRfYXR0cnMpOworCisJCXdoaWxlICgoYXR0aWR4ID0g Ym1zX25leHRfbWVtYmVyKGF0dHJzLCBhdHRpZHgpKSA+PSAwKQorCQl7CisJCQkvKgorCQkJ ICogYXR0aWR4IGlzIHplcm8tYmFzZWQsIGF0dHJudW0gaXMgdGhlIG5vcm1hbCBhdHRyaWJ1 dGUgbnVtYmVyCisJCQkgKi8KKwkJCUF0dHJOdW1iZXIJYXR0cm51bSA9IGF0dGlkeCArIEZp cnN0TG93SW52YWxpZEhlYXBBdHRyaWJ1dGVOdW1iZXI7CisJCQlEYXR1bQkJdmFsdWU7CisJ CQlib29sCQlpc251bGw7CisKKwkJCS8qCisJCQkgKiBTeXN0ZW0gYXR0cmlidXRlcyBhcmUg bm90IGFkZGVkIGludG8gSU5ERVhfQVRUUl9CSVRNQVBfSU5ERVhFRAorCQkJICogYml0bWFw IGJ5IHJlbGNhY2hlLgorCQkJICovCisJCQlBc3NlcnQoYXR0cm51bSA+IDApOworCisJCQl2 YWx1ZSA9IGhlYXBfZ2V0YXR0cigmb2xkdHVwLCBhdHRybnVtLCB0dXBkZXNjLCAmaXNudWxs KTsKKworCQkJLyogTm8gbmVlZCB0byBjaGVjayBhdHRyaWJ1dGVzIHRoYXQgY2FuJ3QgYmUg c3RvcmVkIGV4dGVybmFsbHkgKi8KKwkJCWlmIChpc251bGwgfHwKKwkJCQlUdXBsZURlc2ND b21wYWN0QXR0cih0dXBkZXNjLCBhdHRybnVtIC0gMSktPmF0dGxlbiAhPSAtMSkKKwkJCQlj b250aW51ZTsKKworCQkJLyogQ2hlY2sgaWYgdGhlIG9sZCB0dXBsZSdzIGF0dHJpYnV0ZSBp cyBzdG9yZWQgZXh0ZXJuYWxseSAqLworCQkJaWYgKFZBUkFUVF9JU19FWFRFUk5BTCgoc3Ry dWN0IHZhcmxlbmEgKikgRGF0dW1HZXRQb2ludGVyKHZhbHVlKSkpCisJCQl7CisJCQkJcmVw X2lkX2tleV9yZXF1aXJlZCA9IHRydWU7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKworCQli bXNfZnJlZShhdHRycyk7CisJfQoKIAkvKgogCSAqIElmIHdlJ3JlIG5vdCB1cGRhdGluZyBh bnkgImtleSIgY29sdW1uLCB3ZSBjYW4gZ3JhYiBhIHdlYWtlciBsb2NrIHR5cGUuCkBAIC0z NTAyLDkgKzM1MjEsOCBAQCBoZWFwX3VwZGF0ZShSZWxhdGlvbiByZWxhdGlvbiwgY29uc3Qg SXRlbVBvaW50ZXJEYXRhICpvdGlkLCBIZWFwVHVwbGUgbmV3dHVwLAogCSAqIGlzIHVwZGF0 ZXMgdGhhdCBkb24ndCBtYW5pcHVsYXRlIGtleSBjb2x1bW5zLCBub3QgdGhvc2UgdGhhdAog CSAqIHNlcmVuZGlwaXRvdXNseSBhcnJpdmUgYXQgdGhlIHNhbWUga2V5IHZhbHVlcy4KIAkg Ki8KLQlpZiAoIWJtc19vdmVybGFwKG1vZGlmaWVkX2F0dHJzLCBrZXlfYXR0cnMpKQorCWlm IChsb2NrbW9kZSA9PSBMb2NrVHVwbGVOb0tleUV4Y2x1c2l2ZSkKIAl7Ci0JCSpsb2NrbW9k ZSA9IExvY2tUdXBsZU5vS2V5RXhjbHVzaXZlOwogCQlteGFjdF9zdGF0dXMgPSBNdWx0aVhh Y3RTdGF0dXNOb0tleVVwZGF0ZTsKIAkJa2V5X2ludGFjdCA9IHRydWU7CgpAQCAtMzUyMSw3 ICszNTM5LDcgQEAgaGVhcF91cGRhdGUoUmVsYXRpb24gcmVsYXRpb24sIGNvbnN0IEl0ZW1Q b2ludGVyRGF0YSAqb3RpZCwgSGVhcFR1cGxlIG5ld3R1cCwKIAl9CiAJZWxzZQogCXsKLQkJ KmxvY2ttb2RlID0gTG9ja1R1cGxlRXhjbHVzaXZlOworCQlBc3NlcnQobG9ja21vZGUgPT0g TG9ja1R1cGxlRXhjbHVzaXZlKTsKIAkJbXhhY3Rfc3RhdHVzID0gTXVsdGlYYWN0U3RhdHVz VXBkYXRlOwogCQlrZXlfaW50YWN0ID0gZmFsc2U7CiAJfQpAQCAtMzUzMiw3ICszNTUwLDYg QEAgaGVhcF91cGRhdGUoUmVsYXRpb24gcmVsYXRpb24sIGNvbnN0IEl0ZW1Qb2ludGVyRGF0 YSAqb3RpZCwgSGVhcFR1cGxlIG5ld3R1cCwKIAkgKiB3aXRoIHRoZSBuZXcgdHVwbGUncyBs b2NhdGlvbiwgc28gdGhlcmUncyBncmVhdCByaXNrIG9mIGNvbmZ1c2lvbiBpZiB3ZQogCSAq IHVzZSBvdGlkIGFueW1vcmUuCiAJICovCi0KIGwyOgogCWNoZWNrZWRfbG9ja2VycyA9IGZh bHNlOwogCWxvY2tlcl9yZW1haW5zID0gZmFsc2U7CkBAIC0zNjAwLDcgKzM2MTcsNyBAQCBs MjoKIAkJCWJvb2wJCWN1cnJlbnRfaXNfbWVtYmVyID0gZmFsc2U7CgogCQkJaWYgKERvZXNN dWx0aVhhY3RJZENvbmZsaWN0KChNdWx0aVhhY3RJZCkgeHdhaXQsIGluZm9tYXNrLAotCQkJ CQkJCQkJCSpsb2NrbW9kZSwgJmN1cnJlbnRfaXNfbWVtYmVyKSkKKwkJCQkJCQkJCQlsb2Nr bW9kZSwgJmN1cnJlbnRfaXNfbWVtYmVyKSkKIAkJCXsKIAkJCQlMb2NrQnVmZmVyKGJ1ZmZl ciwgQlVGRkVSX0xPQ0tfVU5MT0NLKTsKCkBAIC0zNjA5LDcgKzM2MjYsNyBAQCBsMjoKIAkJ CQkgKiByZXF1ZXN0aW5nIGEgbG9jayBhbmQgYWxyZWFkeSBoYXZlIG9uZTsgYXZvaWRzIGRl YWRsb2NrKS4KIAkJCQkgKi8KIAkJCQlpZiAoIWN1cnJlbnRfaXNfbWVtYmVyKQotCQkJCQlo ZWFwX2FjcXVpcmVfdHVwbG9jayhyZWxhdGlvbiwgJihvbGR0dXAudF9zZWxmKSwgKmxvY2tt b2RlLAorCQkJCQloZWFwX2FjcXVpcmVfdHVwbG9jayhyZWxhdGlvbiwgJihvbGR0dXAudF9z ZWxmKSwgbG9ja21vZGUsCiAJCQkJCQkJCQkJIExvY2tXYWl0QmxvY2ssICZoYXZlX3R1cGxl X2xvY2spOwoKIAkJCQkvKiB3YWl0IGZvciBtdWx0aXhhY3QgKi8KQEAgLTM2OTQsNyArMzcx MSw3IEBAIGwyOgogCQkJICogbG9jay4KIAkJCSAqLwogCQkJTG9ja0J1ZmZlcihidWZmZXIs IEJVRkZFUl9MT0NLX1VOTE9DSyk7Ci0JCQloZWFwX2FjcXVpcmVfdHVwbG9jayhyZWxhdGlv biwgJihvbGR0dXAudF9zZWxmKSwgKmxvY2ttb2RlLAorCQkJaGVhcF9hY3F1aXJlX3R1cGxv Y2socmVsYXRpb24sICYob2xkdHVwLnRfc2VsZiksIGxvY2ttb2RlLAogCQkJCQkJCQkgTG9j a1dhaXRCbG9jaywgJmhhdmVfdHVwbGVfbG9jayk7CiAJCQlYYWN0TG9ja1RhYmxlV2FpdCh4 d2FpdCwgcmVsYXRpb24sICZvbGR0dXAudF9zZWxmLAogCQkJCQkJCSAgWExUV19VcGRhdGUp OwpAQCAtMzc1NCwxNyArMzc3MSwxNCBAQCBsMjoKIAkJCXRtZmQtPmNtYXggPSBJbnZhbGlk Q29tbWFuZElkOwogCQlVbmxvY2tSZWxlYXNlQnVmZmVyKGJ1ZmZlcik7CiAJCWlmIChoYXZl X3R1cGxlX2xvY2spCi0JCQlVbmxvY2tUdXBsZVR1cGxvY2socmVsYXRpb24sICYob2xkdHVw LnRfc2VsZiksICpsb2NrbW9kZSk7CisJCQlVbmxvY2tUdXBsZVR1cGxvY2socmVsYXRpb24s ICYob2xkdHVwLnRfc2VsZiksIGxvY2ttb2RlKTsKIAkJaWYgKHZtYnVmZmVyICE9IEludmFs aWRCdWZmZXIpCiAJCQlSZWxlYXNlQnVmZmVyKHZtYnVmZmVyKTsKLQkJKnVwZGF0ZV9pbmRl eGVzID0gVFVfTm9uZTsKCi0JCWJtc19mcmVlKGhvdF9hdHRycyk7Ci0JCWJtc19mcmVlKHN1 bV9hdHRycyk7Ci0JCWJtc19mcmVlKGtleV9hdHRycyk7Ci0JCWJtc19mcmVlKGlkX2F0dHJz KTsKLQkJYm1zX2ZyZWUobW9kaWZpZWRfYXR0cnMpOwotCQlibXNfZnJlZShpbnRlcmVzdGlu Z19hdHRycyk7CisJCWJtc19mcmVlKHJpZF9hdHRycyk7CisJCWJtc19mcmVlKGlkeF9hdHRy cyk7CisJCS8qIG1peF9hdHRycyBpcyBvd25lZCBieSB0aGUgY2FsbGVyLCBkb24ndCBmcmVl IGl0ICovCisKIAkJcmV0dXJuIHJlc3VsdDsKIAl9CgpAQCAtMzc5NCw3ICszODA4LDcgQEAg bDI6CiAJY29tcHV0ZV9uZXdfeG1heF9pbmZvbWFzayhIZWFwVHVwbGVIZWFkZXJHZXRSYXdY bWF4KG9sZHR1cC50X2RhdGEpLAogCQkJCQkJCSAgb2xkdHVwLnRfZGF0YS0+dF9pbmZvbWFz aywKIAkJCQkJCQkgIG9sZHR1cC50X2RhdGEtPnRfaW5mb21hc2syLAotCQkJCQkJCSAgeGlk LCAqbG9ja21vZGUsIHRydWUsCisJCQkJCQkJICB4aWQsIGxvY2ttb2RlLCB0cnVlLAogCQkJ CQkJCSAgJnhtYXhfb2xkX3R1cGxlLCAmaW5mb21hc2tfb2xkX3R1cGxlLAogCQkJCQkJCSAg JmluZm9tYXNrMl9vbGRfdHVwbGUpOwoKQEAgLTM5MTEsNyArMzkyNSw3IEBAIGwyOgogCQlj b21wdXRlX25ld194bWF4X2luZm9tYXNrKEhlYXBUdXBsZUhlYWRlckdldFJhd1htYXgob2xk dHVwLnRfZGF0YSksCiAJCQkJCQkJCSAgb2xkdHVwLnRfZGF0YS0+dF9pbmZvbWFzaywKIAkJ CQkJCQkJICBvbGR0dXAudF9kYXRhLT50X2luZm9tYXNrMiwKLQkJCQkJCQkJICB4aWQsICps b2NrbW9kZSwgZmFsc2UsCisJCQkJCQkJCSAgeGlkLCBsb2NrbW9kZSwgZmFsc2UsCiAJCQkJ CQkJCSAgJnhtYXhfbG9ja19vbGRfdHVwbGUsICZpbmZvbWFza19sb2NrX29sZF90dXBsZSwK IAkJCQkJCQkJICAmaW5mb21hc2syX2xvY2tfb2xkX3R1cGxlKTsKCkBAIC00MDcxLDM3ICs0 MDg1LDE2IEBAIGwyOgoKIAkvKgogCSAqIEF0IHRoaXMgcG9pbnQgbmV3YnVmIGFuZCBidWZm ZXIgYXJlIGJvdGggcGlubmVkIGFuZCBsb2NrZWQsIGFuZCBuZXdidWYKLQkgKiBoYXMgZW5v dWdoIHNwYWNlIGZvciB0aGUgbmV3IHR1cGxlLiAgSWYgdGhleSBhcmUgdGhlIHNhbWUgYnVm ZmVyLCBvbmx5Ci0JICogb25lIHBpbiBpcyBoZWxkLgorCSAqIGhhcyBlbm91Z2ggc3BhY2Ug Zm9yIHRoZSBuZXcgdHVwbGUgc28gd2UgY2FuIHVzZSB0aGUgSE9UIHVwZGF0ZSBwYXRoIGlm CisJICogdGhlIGNhbGxlciBkZXRlcm1pbmVkIHRoYXQgaXQgaXMgYWxsb3dhYmxlLgorCSAq CisJICogTk9URTogSWYgbmV3YnVmID09IGJ1ZmZlciB0aGVuIG9ubHkgb25lIHBpbiBpcyBo ZWxkLgogCSAqLwotCi0JaWYgKG5ld2J1ZiA9PSBidWZmZXIpCi0JewotCQkvKgotCQkgKiBT aW5jZSB0aGUgbmV3IHR1cGxlIGlzIGdvaW5nIGludG8gdGhlIHNhbWUgcGFnZSwgd2UgbWln aHQgYmUgYWJsZQotCQkgKiB0byBkbyBhIEhPVCB1cGRhdGUuICBDaGVjayBpZiBhbnkgb2Yg dGhlIGluZGV4IGNvbHVtbnMgaGF2ZSBiZWVuCi0JCSAqIGNoYW5nZWQuCi0JCSAqLwotCQlp ZiAoIWJtc19vdmVybGFwKG1vZGlmaWVkX2F0dHJzLCBob3RfYXR0cnMpKQotCQl7Ci0JCQl1 c2VfaG90X3VwZGF0ZSA9IHRydWU7Ci0KLQkJCS8qCi0JCQkgKiBJZiBub25lIG9mIHRoZSBj b2x1bW5zIHRoYXQgYXJlIHVzZWQgaW4gaG90LWJsb2NraW5nIGluZGV4ZXMKLQkJCSAqIHdl cmUgdXBkYXRlZCwgd2UgY2FuIGFwcGx5IEhPVCwgYnV0IHdlIGRvIHN0aWxsIG5lZWQgdG8g Y2hlY2sKLQkJCSAqIGlmIHdlIG5lZWQgdG8gdXBkYXRlIHRoZSBzdW1tYXJpemluZyBpbmRl eGVzLCBhbmQgdXBkYXRlIHRob3NlCi0JCQkgKiBpbmRleGVzIGlmIHRoZSBjb2x1bW5zIHdl cmUgdXBkYXRlZCwgb3Igd2UgbWF5IGZhaWwgdG8gZGV0ZWN0Ci0JCQkgKiBlLmcuIHZhbHVl IGJvdW5kIGNoYW5nZXMgaW4gQlJJTiBtaW5tYXggaW5kZXhlcy4KLQkJCSAqLwotCQkJaWYg KGJtc19vdmVybGFwKG1vZGlmaWVkX2F0dHJzLCBzdW1fYXR0cnMpKQotCQkJCXN1bW1hcml6 ZWRfdXBkYXRlID0gdHJ1ZTsKLQkJfQotCX0KKwlpZiAoKG5ld2J1ZiA9PSBidWZmZXIpICYm IGhvdF9hbGxvd2VkKQorCQl1c2VfaG90X3VwZGF0ZSA9IHRydWU7CiAJZWxzZQotCXsKIAkJ LyogU2V0IGEgaGludCB0aGF0IHRoZSBvbGQgcGFnZSBjb3VsZCB1c2UgcHJ1bmUvZGVmcmFn ICovCiAJCVBhZ2VTZXRGdWxsKHBhZ2UpOwotCX0KCiAJLyoKIAkgKiBDb21wdXRlIHJlcGxp Y2EgaWRlbnRpdHkgdHVwbGUgYmVmb3JlIGVudGVyaW5nIHRoZSBjcml0aWNhbCBzZWN0aW9u IHNvCkBAIC00MTExLDggKzQxMDQsNyBAQCBsMjoKIAkgKiBjb2x1bW5zIGFyZSBtb2RpZmll ZCBvciBpdCBoYXMgZXh0ZXJuYWwgZGF0YS4KIAkgKi8KIAlvbGRfa2V5X3R1cGxlID0gRXh0 cmFjdFJlcGxpY2FJZGVudGl0eShyZWxhdGlvbiwgJm9sZHR1cCwKLQkJCQkJCQkJCQkgICBi bXNfb3ZlcmxhcChtb2RpZmllZF9hdHRycywgaWRfYXR0cnMpIHx8Ci0JCQkJCQkJCQkJICAg aWRfaGFzX2V4dGVybmFsLAorCQkJCQkJCQkJCSAgIHJlcF9pZF9rZXlfcmVxdWlyZWQsCiAJ CQkJCQkJCQkJICAgJm9sZF9rZXlfY29waWVkKTsKCiAJLyogTk8gRVJFUE9SVChFUlJPUikg ZnJvbSBoZXJlIHRpbGwgY2hhbmdlcyBhcmUgbG9nZ2VkICovCkBAIC00MjQxLDcgKzQyMzMs NyBAQCBsMjoKIAkgKiBSZWxlYXNlIHRoZSBsbWdyIHR1cGxlIGxvY2ssIGlmIHdlIGhhZCBp dC4KIAkgKi8KIAlpZiAoaGF2ZV90dXBsZV9sb2NrKQotCQlVbmxvY2tUdXBsZVR1cGxvY2so cmVsYXRpb24sICYob2xkdHVwLnRfc2VsZiksICpsb2NrbW9kZSk7CisJCVVubG9ja1R1cGxl VHVwbG9jayhyZWxhdGlvbiwgJihvbGR0dXAudF9zZWxmKSwgbG9ja21vZGUpOwoKIAlwZ3N0 YXRfY291bnRfaGVhcF91cGRhdGUocmVsYXRpb24sIHVzZV9ob3RfdXBkYXRlLCBuZXdidWYg IT0gYnVmZmVyKTsKCkBAIC00MjU1LDMxICs0MjQ3LDEyIEBAIGwyOgogCQloZWFwX2ZyZWV0 dXBsZShoZWFwdHVwKTsKIAl9CgotCS8qCi0JICogSWYgaXQgaXMgYSBIT1QgdXBkYXRlLCB0 aGUgdXBkYXRlIG1heSBzdGlsbCBuZWVkIHRvIHVwZGF0ZSBzdW1tYXJpemVkCi0JICogaW5k ZXhlcywgbGVzdCB3ZSBmYWlsIHRvIHVwZGF0ZSB0aG9zZSBzdW1tYXJpZXMgYW5kIGdldCBp bmNvcnJlY3QKLQkgKiByZXN1bHRzIChmb3IgZXhhbXBsZSwgbWlubWF4IGJvdW5kcyBvZiB0 aGUgYmxvY2sgbWF5IGNoYW5nZSB3aXRoIHRoaXMKLQkgKiB1cGRhdGUpLgotCSAqLwotCWlm ICh1c2VfaG90X3VwZGF0ZSkKLQl7Ci0JCWlmIChzdW1tYXJpemVkX3VwZGF0ZSkKLQkJCSp1 cGRhdGVfaW5kZXhlcyA9IFRVX1N1bW1hcml6aW5nOwotCQllbHNlCi0JCQkqdXBkYXRlX2lu ZGV4ZXMgPSBUVV9Ob25lOwotCX0KLQllbHNlCi0JCSp1cGRhdGVfaW5kZXhlcyA9IFRVX0Fs bDsKLQogCWlmIChvbGRfa2V5X3R1cGxlICE9IE5VTEwgJiYgb2xkX2tleV9jb3BpZWQpCiAJ CWhlYXBfZnJlZXR1cGxlKG9sZF9rZXlfdHVwbGUpOwoKLQlibXNfZnJlZShob3RfYXR0cnMp OwotCWJtc19mcmVlKHN1bV9hdHRycyk7Ci0JYm1zX2ZyZWUoa2V5X2F0dHJzKTsKLQlibXNf ZnJlZShpZF9hdHRycyk7Ci0JYm1zX2ZyZWUobW9kaWZpZWRfYXR0cnMpOwotCWJtc19mcmVl KGludGVyZXN0aW5nX2F0dHJzKTsKKwlibXNfZnJlZShyaWRfYXR0cnMpOworCWJtc19mcmVl KGlkeF9hdHRycyk7CisJLyogbWl4X2F0dHJzIGlzIG93bmVkIGJ5IHRoZSBjYWxsZXIsIGRv bid0IGZyZWUgaXQgKi8KCiAJcmV0dXJuIFRNX09rOwogfQpAQCAtNDQ1MiwyOCArNDQyNSwx MTMgQEAgaGVhcF9hdHRyX2VxdWFscyhUdXBsZURlc2MgdHVwZGVzYywgaW50IGF0dHJudW0s IERhdHVtIHZhbHVlMSwgRGF0dW0gdmFsdWUyLAogfQoKIC8qCi0gKiBDaGVjayB3aGljaCBj b2x1bW5zIGFyZSBiZWluZyB1cGRhdGVkLgotICoKLSAqIEdpdmVuIGFuIHVwZGF0ZWQgdHVw bGUsIGRldGVybWluZSAoYW5kIHJldHVybiBpbnRvIHRoZSBvdXRwdXQgYml0bWFwc2V0KSwK LSAqIGZyb20gdGhvc2UgbGlzdGVkIGFzIGludGVyZXN0aW5nLCB0aGUgc2V0IG9mIGNvbHVt bnMgdGhhdCBjaGFuZ2VkLgotICoKLSAqIGhhc19leHRlcm5hbCBpbmRpY2F0ZXMgaWYgYW55 IG9mIHRoZSB1bm1vZGlmaWVkIGF0dHJpYnV0ZXMgKGZyb20gdGhvc2UKLSAqIGxpc3RlZCBh cyBpbnRlcmVzdGluZykgb2YgdGhlIG9sZCB0dXBsZSBpcyBhIG1lbWJlciBvZiBleHRlcm5h bF9jb2xzIGFuZCBpcwotICogc3RvcmVkIGV4dGVybmFsbHkuCisgKiBIT1QgdXBkYXRlcyBh cmUgcG9zc2libGUgd2hlbiBlaXRoZXI6IGEpIHRoZXJlIGFyZSBubyBtb2RpZmllZCBpbmRl eGVkCisgKiBhdHRyaWJ1dGVzLCBvciBiKSB0aGUgbW9kaWZpZWQgYXR0cmlidXRlcyBhcmUg YWxsIG9uIHN1bW1hcml6aW5nIGluZGV4ZXMuCisgKiBMYXRlciwgaW4gaGVhcF91cGRhdGUo KSwgd2UgY2FuIGNob29zZSB0byBwZXJmb3JtIGEgSE9UIHVwZGF0ZSBpZiB0aGVyZSBpcwor ICogc3BhY2Ugb24gdGhlIHBhZ2UgZm9yIHRoZSBuZXcgdHVwbGUgYW5kIHRoZSBmb2xsb3dp bmcgY29kZSBoYXMgZGV0ZXJtaW5lZAorICogdGhhdCBIT1QgaXMgYWxsb3dlZC4KKyAqLwor Ym9vbAorSGVhcFVwZGF0ZUhvdEFsbG93YWJsZShSZWxhdGlvbiByZWxhdGlvbiwgY29uc3Qg Qml0bWFwc2V0ICptaXhfYXR0cnMsCisJCQkJCSAgIGJvb2wgKnN1bW1hcml6ZWRfb25seSkK K3sKKwlib29sCQlob3RfYWxsb3dlZDsKKworCS8qCisJICogTGV0J3MgYmUgb3B0aW1pc3Rp YyBhbmQgc3RhcnQgb2ZmIGJ5IGFzc3VtaW5nIHRoZSBiZXN0IGNhc2UsIG5vIGluZGV4ZXMK KwkgKiBuZWVkIHVwZGF0aW5nIGFuZCBIT1QgaXMgYWxsb3dhYmxlLgorCSAqLworCWhvdF9h bGxvd2VkID0gdHJ1ZTsKKwkqc3VtbWFyaXplZF9vbmx5ID0gZmFsc2U7CisKKwkvKgorCSAq IENoZWNrIGZvciBjYXNlIChhKTsgd2hlbiB0aGVyZSBhcmUgbm8gbW9kaWZpZWQgaW5kZXgg YXR0cmlidXRlcyBIT1QgaXMKKwkgKiBhbGxvd2VkLgorCSAqLworCWlmIChibXNfaXNfZW1w dHkobWl4X2F0dHJzKSkKKwkJaG90X2FsbG93ZWQgPSB0cnVlOworCWVsc2UKKwl7CisJCUJp dG1hcHNldCAgKnN1bV9hdHRycyA9IFJlbGF0aW9uR2V0SW5kZXhBdHRyQml0bWFwKHJlbGF0 aW9uLAorCQkJCQkJCQkJCQkJCQkgICBJTkRFWF9BVFRSX0JJVE1BUF9TVU1NQVJJWkVEKTsK KworCQkvKgorCQkgKiBBdCBsZWFzdCBvbmUgaW5kZXggYXR0cmlidXRlIHdhcyBtb2RpZmll ZCwgYnV0IGlzIHRoaXMgY2FzZSAoYikKKwkJICogd2hlcmUgYWxsIHRoZSBtb2RpZmllZCBp bmRleCBhdHRyaWJ1dGVzIGFyZSBvbmx5IHVzZWQgYnkKKwkJICogc3VtbWFyaXppbmcgaW5k ZXhlcz8gIElmIHRoYXQncyB0aGUgY2FzZSB3ZSBuZWVkIHRvIHVwZGF0ZSB0aG9zZQorCQkg KiBpbmRleGVzLCBidXQgdGhpcyBjYW4gYmUgYSBIT1QgdXBkYXRlLgorCQkgKi8KKwkJaWYg KGJtc19pc19zdWJzZXQobWl4X2F0dHJzLCBzdW1fYXR0cnMpKQorCQl7CisJCQlob3RfYWxs b3dlZCA9IHRydWU7CisJCQkqc3VtbWFyaXplZF9vbmx5ID0gdHJ1ZTsKKwkJfQorCQllbHNl CisJCXsKKwkJCS8qCisJCQkgKiBOb3cgd2Uga25vdyB0aGF0IG9uZSBvciBtb3JlIGluZGV4 ZWQgYXR0cmlidXRlIHdlcmUgdXBkYXRlZCBhbmQKKwkJCSAqIHRoYXQgdGhlcmUgd2FzIGF0 IGxlYXN0IG9uZSBvZiB0aG9zZSBhdHRyaWJ1dGVzIHdlcmUgcmVmZXJlbmNlZAorCQkJICog YnkgYSBub24tc3VtbWFyaXppbmcgaW5kZXguIEhPVCBpcyBub3QgYWxsb3dlZC4KKwkJCSAq LworCQkJaG90X2FsbG93ZWQgPSBmYWxzZTsKKwkJfQorCisJCWJtc19mcmVlKHN1bV9hdHRy cyk7CisJfQorCisJcmV0dXJuIGhvdF9hbGxvd2VkOworfQorCisvKgorICogSWYgd2UncmUg bm90IHVwZGF0aW5nIGFueSAia2V5IiBhdHRyaWJ1dGVzLCB3ZSBjYW4gZ3JhYiBhIHdlYWtl ciBsb2NrIHR5cGUuCisgKiBUaGlzIGFsbG93cyBmb3IgbW9yZSBjb25jdXJyZW5jeSB3aGVu IHdlIGFyZSBydW5uaW5nIHNpbXVsdGFuZW91c2x5IHdpdGgKKyAqIGZvcmVpZ24ga2V5IGNo ZWNrcy4KKyAqLworTG9ja1R1cGxlTW9kZQorSGVhcFVwZGF0ZURldGVybWluZUxvY2ttb2Rl KFJlbGF0aW9uIHJlbGF0aW9uLCBjb25zdCBCaXRtYXBzZXQgKm1peF9hdHRycykKK3sKKwlM b2NrVHVwbGVNb2RlIGxvY2ttb2RlID0gTG9ja1R1cGxlRXhjbHVzaXZlOworCisJQml0bWFw c2V0ICAqa2V5X2F0dHJzID0gUmVsYXRpb25HZXRJbmRleEF0dHJCaXRtYXAocmVsYXRpb24s CisJCQkJCQkJCQkJCQkJICAgSU5ERVhfQVRUUl9CSVRNQVBfS0VZKTsKKworCWlmICghYm1z X292ZXJsYXAobWl4X2F0dHJzLCBrZXlfYXR0cnMpKQorCQlsb2NrbW9kZSA9IExvY2tUdXBs ZU5vS2V5RXhjbHVzaXZlOworCisJYm1zX2ZyZWUoa2V5X2F0dHJzKTsKKworCXJldHVybiBs b2NrbW9kZTsKK30KKworLyoKKyAqIFJldHVybiBhIEJpdG1hcHNldCB0aGF0IGNvbnRhaW5z IHRoZSBzZXQgb2YgbW9kaWZpZWQgKGNoYW5nZWQpIGluZGV4ZWQKKyAqIGF0dHJpYnV0ZXMg YmV0d2VlbiBvbGR0dXAgYW5kIG5ld3R1cC4KICAqLwogc3RhdGljIEJpdG1hcHNldCAqCi1I ZWFwRGV0ZXJtaW5lQ29sdW1uc0luZm8oUmVsYXRpb24gcmVsYXRpb24sCi0JCQkJCQkgQml0 bWFwc2V0ICppbnRlcmVzdGluZ19jb2xzLAotCQkJCQkJIEJpdG1hcHNldCAqZXh0ZXJuYWxf Y29scywKLQkJCQkJCSBIZWFwVHVwbGUgb2xkdHVwLCBIZWFwVHVwbGUgbmV3dHVwLAotCQkJ CQkJIGJvb2wgKmhhc19leHRlcm5hbCkKK0hlYXBVcGRhdGVNb2RJZHhBdHRycyhSZWxhdGlv biByZWxhdGlvbiwgSGVhcFR1cGxlIG9sZHR1cCwgSGVhcFR1cGxlIG5ld3R1cCkKIHsKIAlp bnQJCQlhdHRpZHg7Ci0JQml0bWFwc2V0ICAqbW9kaWZpZWQgPSBOVUxMOworCUJpdG1hcHNl dCAgKmF0dHJzLAorCQkJICAgKm1peF9hdHRycyA9IE5VTEw7CiAJVHVwbGVEZXNjCXR1cGRl c2MgPSBSZWxhdGlvbkdldERlc2NyKHJlbGF0aW9uKTsKCisJLyogR2V0IHRoZSBzZXQgb2Yg YWxsIGF0dHJpYnV0ZXMgYWNyb3NzIGFsbCBpbmRleGVzIGZvciB0aGlzIHJlbGF0aW9uICov CisJYXR0cnMgPSBSZWxhdGlvbkdldEluZGV4QXR0ckJpdG1hcChyZWxhdGlvbiwgSU5ERVhf QVRUUl9CSVRNQVBfSU5ERVhFRCk7CisKKwkvKiBObyBpbmRleGVkIGF0dHJpYnV0ZXMsIHdl J3JlIGRvbmUgKi8KKwlpZiAoYm1zX2lzX2VtcHR5KGF0dHJzKSkKKwkJcmV0dXJuIE5VTEw7 CisKKwkvKgorCSAqIFRoaXMgaGVhcCB1cGRhdGUgZnVuY3Rpb24gaXMgdXNlZCBvdXRzaWRl IHRoZSBleGVjdXRvciBhbmQgc28gdW5saWtlCisJICogaGVhcGFtX3R1cGxlX3VwZGF0ZSgp IHdoZXJlIHRoZXJlIGlzIFJlc3VsdFJlbEluZm8gYW5kIEVTdGF0ZSB0bworCSAqIHByb3Zp ZGUgdGhlIGNvbmNpc2Ugc2V0IG9mIGF0dHJpYnV0ZXMgdGhhdCBtaWdodCBoYXZlIGJlZW4g bW9kaWZpZWQKKwkgKiAodmlhIEV4ZWNHZXRBbGxVcGRhdGVkQ29scygpKSB3ZSBzaW1wbHkg Y2hlY2sgYWxsIGluZGV4ZWQgYXR0cmlidXRlcyB0bworCSAqIGZpbmQgdGhlIHN1YnNldCB0 aGF0IGNoYW5nZWQgdmFsdWUuICBUaGF0J3MgdGhlICJtb2RpZmllZCBpbmRleGVkCisJICog YXR0cmlidXRlcyIgb3IgIm1peF9hdHRycyIuCisJICovCiAJYXR0aWR4ID0gLTE7Ci0Jd2hp bGUgKChhdHRpZHggPSBibXNfbmV4dF9tZW1iZXIoaW50ZXJlc3RpbmdfY29scywgYXR0aWR4 KSkgPj0gMCkKKwl3aGlsZSAoKGF0dGlkeCA9IGJtc19uZXh0X21lbWJlcihhdHRycywgYXR0 aWR4KSkgPj0gMCkKIAl7CiAJCS8qIGF0dGlkeCBpcyB6ZXJvLWJhc2VkLCBhdHRybnVtIGlz IHRoZSBub3JtYWwgYXR0cmlidXRlIG51bWJlciAqLwogCQlBdHRyTnVtYmVyCWF0dHJudW0g PSBhdHRpZHggKyBGaXJzdExvd0ludmFsaWRIZWFwQXR0cmlidXRlTnVtYmVyOwpAQCAtNDQ4 OSw3ICs0NTQ3LDcgQEAgSGVhcERldGVybWluZUNvbHVtbnNJbmZvKFJlbGF0aW9uIHJlbGF0 aW9uLAogCQkgKi8KIAkJaWYgKGF0dHJudW0gPT0gMCkKIAkJewotCQkJbW9kaWZpZWQgPSBi bXNfYWRkX21lbWJlcihtb2RpZmllZCwgYXR0aWR4KTsKKwkJCW1peF9hdHRycyA9IGJtc19h ZGRfbWVtYmVyKG1peF9hdHRycywgYXR0aWR4KTsKIAkJCWNvbnRpbnVlOwogCQl9CgpAQCAt NDUwMiw3ICs0NTYwLDcgQEAgSGVhcERldGVybWluZUNvbHVtbnNJbmZvKFJlbGF0aW9uIHJl bGF0aW9uLAogCQl7CiAJCQlpZiAoYXR0cm51bSAhPSBUYWJsZU9pZEF0dHJpYnV0ZU51bWJl cikKIAkJCXsKLQkJCQltb2RpZmllZCA9IGJtc19hZGRfbWVtYmVyKG1vZGlmaWVkLCBhdHRp ZHgpOworCQkJCW1peF9hdHRycyA9IGJtc19hZGRfbWVtYmVyKG1peF9hdHRycywgYXR0aWR4 KTsKIAkJCQljb250aW51ZTsKIAkJCX0KIAkJfQpAQCAtNDUxOCwyOSArNDU3NiwxMiBAQCBI ZWFwRGV0ZXJtaW5lQ29sdW1uc0luZm8oUmVsYXRpb24gcmVsYXRpb24sCgogCQlpZiAoIWhl YXBfYXR0cl9lcXVhbHModHVwZGVzYywgYXR0cm51bSwgdmFsdWUxLAogCQkJCQkJCSAgdmFs dWUyLCBpc251bGwxLCBpc251bGwyKSkKLQkJewotCQkJbW9kaWZpZWQgPSBibXNfYWRkX21l bWJlcihtb2RpZmllZCwgYXR0aWR4KTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0KLQkJLyoKLQkJ ICogTm8gbmVlZCB0byBjaGVjayBhdHRyaWJ1dGVzIHRoYXQgY2FuJ3QgYmUgc3RvcmVkIGV4 dGVybmFsbHkuIE5vdGUKLQkJICogdGhhdCBzeXN0ZW0gYXR0cmlidXRlcyBjYW4ndCBiZSBz dG9yZWQgZXh0ZXJuYWxseS4KLQkJICovCi0JCWlmIChhdHRybnVtIDwgMCB8fCBpc251bGwx IHx8Ci0JCQlUdXBsZURlc2NDb21wYWN0QXR0cih0dXBkZXNjLCBhdHRybnVtIC0gMSktPmF0 dGxlbiAhPSAtMSkKLQkJCWNvbnRpbnVlOwotCi0JCS8qCi0JCSAqIENoZWNrIGlmIHRoZSBv bGQgdHVwbGUncyBhdHRyaWJ1dGUgaXMgc3RvcmVkIGV4dGVybmFsbHkgYW5kIGlzIGEKLQkJ ICogbWVtYmVyIG9mIGV4dGVybmFsX2NvbHMuCi0JCSAqLwotCQlpZiAoVkFSQVRUX0lTX0VY VEVSTkFMKCh2YXJsZW5hICopIERhdHVtR2V0UG9pbnRlcih2YWx1ZTEpKSAmJgotCQkJYm1z X2lzX21lbWJlcihhdHRpZHgsIGV4dGVybmFsX2NvbHMpKQotCQkJKmhhc19leHRlcm5hbCA9 IHRydWU7CisJCQltaXhfYXR0cnMgPSBibXNfYWRkX21lbWJlcihtaXhfYXR0cnMsIGF0dGlk eCk7CiAJfQoKLQlyZXR1cm4gbW9kaWZpZWQ7CisJYm1zX2ZyZWUoYXR0cnMpOworCisJcmV0 dXJuIG1peF9hdHRyczsKIH0KCiAvKgpAQCAtNDU1MiwxNyArNDU5MywxMDggQEAgSGVhcERl dGVybWluZUNvbHVtbnNJbmZvKFJlbGF0aW9uIHJlbGF0aW9uLAogICogdmlhIGVyZXBvcnQo KS4KICAqLwogdm9pZAotc2ltcGxlX2hlYXBfdXBkYXRlKFJlbGF0aW9uIHJlbGF0aW9uLCBj b25zdCBJdGVtUG9pbnRlckRhdGEgKm90aWQsIEhlYXBUdXBsZSB0dXAsCitzaW1wbGVfaGVh cF91cGRhdGUoUmVsYXRpb24gcmVsYXRpb24sIGNvbnN0IEl0ZW1Qb2ludGVyRGF0YSAqb3Rp ZCwgSGVhcFR1cGxlIHR1cGxlLAogCQkJCSAgIFRVX1VwZGF0ZUluZGV4ZXMgKnVwZGF0ZV9p bmRleGVzKQogewogCVRNX1Jlc3VsdAlyZXN1bHQ7CiAJVE1fRmFpbHVyZURhdGEgdG1mZDsK IAlMb2NrVHVwbGVNb2RlIGxvY2ttb2RlOworCVR1cGxlVGFibGVTbG90ICpzbG90OworCUJ1 ZmZlckhlYXBUdXBsZVRhYmxlU2xvdCAqYnNsb3Q7CisJSGVhcFR1cGxlCW9sZHR1cDsKKwli b29sCQlzaG91bGRGcmVlID0gdHJ1ZTsKKwlCaXRtYXBzZXQgICppZHhfYXR0cnMsCisJCQkg ICAqbWl4X2F0dHJzOworCWJvb2wJCWhvdF9hbGxvd2VkLAorCQkJCXN1bW1hcml6ZWRfb25s eTsKKwlCdWZmZXIJCWJ1ZmZlcjsKCi0JcmVzdWx0ID0gaGVhcF91cGRhdGUocmVsYXRpb24s IG90aWQsIHR1cCwKLQkJCQkJCSBHZXRDdXJyZW50Q29tbWFuZElkKHRydWUpLCBJbnZhbGlk U25hcHNob3QsCi0JCQkJCQkgdHJ1ZSAvKiB3YWl0IGZvciBjb21taXQgKi8gLAotCQkJCQkJ ICZ0bWZkLCAmbG9ja21vZGUsIHVwZGF0ZV9pbmRleGVzKTsKKwlBc3NlcnQoSXRlbVBvaW50 ZXJJc1ZhbGlkKG90aWQpKTsKKworCS8qCisJICogRmV0Y2ggdGhpcyBiaXRtYXAgb2YgaW50 ZXJlc3RpbmcgYXR0cmlidXRlcyBmcm9tIHJlbGNhY2hlIGJlZm9yZQorCSAqIG9idGFpbmlu ZyBhIGJ1ZmZlciBsb2NrIGJlY2F1c2UgaWYgd2UgYXJlIGRvaW5nIGFuIHVwZGF0ZSBvbiBv bmUgb2YgdGhlCisJICogcmVsZXZhbnQgc3lzdGVtIGNhdGFsb2dzIHdlIGNvdWxkIGRlYWRs b2NrIGlmIHdlIHRyeSB0byBmZXRjaCB0aGVtCisJICogbGF0ZXIgb24uIFJlbGNhY2hlIHdp bGwgcmV0dXJuIGNvcGllcyBvZiBlYWNoIGJpdG1hcCwgc28gd2UgbmVlZCBub3QKKwkgKiB3 b3JyeSBhYm91dCByZWxjYWNoZSBmbHVzaCBoYXBwZW5pbmcgbWlkd2F5IHRocm91Z2ggdGhp cyBvcGVyYXRpb24uCisJICovCisJaWR4X2F0dHJzID0gUmVsYXRpb25HZXRJbmRleEF0dHJC aXRtYXAocmVsYXRpb24sIElOREVYX0FUVFJfQklUTUFQX0lOREVYRUQpOworCisJSU5KRUNU SU9OX1BPSU5UKCJoZWFwX3VwZGF0ZS1iZWZvcmUtcGluIiwgTlVMTCk7CisKKwkvKgorCSAq IFRvIHVwZGF0ZSBhIGhlYXAgdHVwbGUgd2UgbmVlZCB0byBmaW5kIHRoZSBzZXQgb2YgbW9k aWZpZWQgaW5kZXhlZAorCSAqIGF0dHJpYnV0ZXMgKCJtaXhfYXR0cnMiKSBzbyBhcyB0byBz ZWUgaWYgYSBIT1QgdXBkYXRlIGlzIGFsbG93YWJsZSBvcgorCSAqIG5vdC4gIFdoZW4gdXBk YXRpbmcgaGVhcCB0dXBsZXMgdmlhIGV4ZWN1dGlvbiBvZiBVUERBVEUgc3RhdGVtZW50cyB0 aGlzCisJICogc2V0IGlzIGNvbnN0cnVjdGVkIGJlZm9yZSBjYWxsaW5nIGludG8gdGhlIHRh YmxlIEFNJ3MgdHVwbGVfdXBkYXRlKCkKKwkgKiBmdW5jdGlvbiBieSB0aGUgZnVuY3Rpb24g RXhlY1VwZGF0ZU1vZElkeEF0dHJzKCkgd2hpY2ggY29tcGFyZXMgdGhlCisJICogb2xkL25l dyBUdXBsZVRhYmxlU2xvdHMuICBIb3dldmVyLCBoZXJlIHdlIGhhdmUgdGhlIG9sZCBUSUQg YW5kIHRoZSBuZXcKKwkgKiB0dXBsZSwgbm90IHR3byBUdXBsZVRhYmxlU2xvdHMsIGJ1dCB3 ZSBzdGlsbCBuZWVkIHRvIGNvbnN0cnVjdCBhIHNpbWxhcgorCSAqIGJpdG1hcCBzbyBhcyB0 byBiZSBhYmxlIHRvIGtub3cgaWYgSE9UIHVwZGF0ZXMgYXJlIGFsbG93ZWQgb3Igbm90LiAg VG8KKwkgKiBkbyB0aGF0IHdlIGZpcnN0IGhhdmUgdG8gZmV0Y2ggdGhlIG9sZCB0dXBsZSBp dHNlbGYuICBCZWNhdXNlCisJICogaGVhcGFtX2ZldGNoX3Jvd192ZXJzaW9uKCkgaXMgc3Rh dGljLCB3ZSBoYXZlIHRvIHJlcGxpY2F0ZSB0aGF0IGNvZGUKKwkgKiBoZXJlLiBUaGlzIGlz IGEgYml0IHJlcGV0aXRpdmUgYmVjYXVzZSBoZWFwX3VwZGF0ZSgpIHdpbGwgYWdhaW4gZmlu ZAorCSAqIGFuZCBmb3JtIHRoZSBvbGQgSGVhcFR1cGxlIGZyb20gdGhlIG9sZCBUSUQgYW5k IGluIG1vc3QgY2FzZXMgdGhlCisJICogY2FsbGVycyAoaWdub3JpbmcgZXh0ZW5zaW9ucywg YWx3YXlzIGNhdGFsb2cgdHVwbGUgdXBkYXRlcykgYWxyZWFkeSBoYWQKKwkgKiB0aGUgc2V0 IG9mIGNoYW5nZWQgYXR0cmlidXRlcyAoZS5nLiB0aGUgInJlcGxhY2VzIiBhcnJheSksIGJ1 dCBmb3Igbm93CisJICogdGhpcyBtaW5vciByZXBldGl0aW9uIG9mIHdvcmsgaXMgbmVjZXNz YXJ5LgorCSAqLworCisJc2xvdCA9IE1ha2VUdXBsZVRhYmxlU2xvdChSZWxhdGlvbkdldERl c2NyKHJlbGF0aW9uKSwgJlRUU09wc0J1ZmZlckhlYXBUdXBsZSk7CisJYnNsb3QgPSAoQnVm ZmVySGVhcFR1cGxlVGFibGVTbG90ICopIHNsb3Q7CisKKwkvKgorCSAqIFNldCB0aGUgVElE IGluIHRoZSBzbG90IGFuZCB0aGVuIGZldGNoIHRoZSBvbGQgdHVwbGUgc28gd2UgY2FuIGV4 YW1pbmUKKwkgKiBpdAorCSAqLworCWJzbG90LT5iYXNlLnR1cGRhdGEudF9zZWxmID0gKm90 aWQ7CisJaWYgKCFoZWFwX2ZldGNoKHJlbGF0aW9uLCBTbmFwc2hvdEFueSwgJmJzbG90LT5i YXNlLnR1cGRhdGEsICZidWZmZXIsIGZhbHNlKSkKKwl7CisJCS8qCisJCSAqIGhlYXBfdXBk YXRlKCkgY2hlY2tzIGZvciAhSXRlbUlkSXNOb3JtYWwobHApIGFuZCB3aWxsIHJldHVybiBm YWxzZQorCQkgKiBpbiB0aG9zZSBjYXNlcy4KKwkJICovCisJCUFzc2VydChSZWxhdGlvblN1 cHBvcnRzU3lzQ2FjaGUoUmVsYXRpb25HZXRSZWxpZChyZWxhdGlvbikpKTsKKworCQkqdXBk YXRlX2luZGV4ZXMgPSBUVV9Ob25lOworCisJCS8qIG1peF9hdHRycyBub3QgeWV0IGluaXRp YWxpemVkICovCisJCWJtc19mcmVlKGlkeF9hdHRycyk7CisJCUV4ZWNEcm9wU2luZ2xlVHVw bGVUYWJsZVNsb3Qoc2xvdCk7CisKKwkJZWxvZyhFUlJPUiwgInR1cGxlIGNvbmN1cnJlbnRs eSBkZWxldGVkIik7CisKKwkJcmV0dXJuOworCX0KKworCUFzc2VydChidWZmZXIgIT0gSW52 YWxpZEJ1ZmZlcik7CisKKwkvKiBTdG9yZSBpbiBzbG90LCB0cmFuc2ZlcnJpbmcgZXhpc3Rp bmcgcGluICovCisJRXhlY1N0b3JlUGlubmVkQnVmZmVySGVhcFR1cGxlKCZic2xvdC0+YmFz ZS50dXBkYXRhLCBzbG90LCBidWZmZXIpOworCW9sZHR1cCA9IEV4ZWNGZXRjaFNsb3RIZWFw VHVwbGUoc2xvdCwgZmFsc2UsICZzaG91bGRGcmVlKTsKKworCW1peF9hdHRycyA9IEhlYXBV cGRhdGVNb2RJZHhBdHRycyhyZWxhdGlvbiwgb2xkdHVwLCB0dXBsZSk7CisJbG9ja21vZGUg PSBIZWFwVXBkYXRlRGV0ZXJtaW5lTG9ja21vZGUocmVsYXRpb24sIG1peF9hdHRycyk7CisJ aG90X2FsbG93ZWQgPSBIZWFwVXBkYXRlSG90QWxsb3dhYmxlKHJlbGF0aW9uLCBtaXhfYXR0 cnMsICZzdW1tYXJpemVkX29ubHkpOworCisJcmVzdWx0ID0gaGVhcF91cGRhdGUocmVsYXRp b24sIG90aWQsIHR1cGxlLCBHZXRDdXJyZW50Q29tbWFuZElkKHRydWUpLAorCQkJCQkJIElu dmFsaWRTbmFwc2hvdCwgdHJ1ZSAvKiB3YWl0IGZvciBjb21taXQgKi8gLAorCQkJCQkJICZ0 bWZkLCBsb2NrbW9kZSwgbWl4X2F0dHJzLCBob3RfYWxsb3dlZCk7CisKKwlpZiAoc2hvdWxk RnJlZSkKKwkJaGVhcF9mcmVldHVwbGUob2xkdHVwKTsKKworCUV4ZWNEcm9wU2luZ2xlVHVw bGVUYWJsZVNsb3Qoc2xvdCk7CisJYm1zX2ZyZWUoaWR4X2F0dHJzKTsKKworCS8qCisJICog RGVjaWRlIHdoZXRoZXIgbmV3IGluZGV4IGVudHJpZXMgYXJlIG5lZWRlZCBmb3IgdGhlIHR1 cGxlCisJICoKKwkgKiBJZiB0aGUgdXBkYXRlIGlzIG5vdCBIT1QsIHdlIG11c3QgdXBkYXRl IGFsbCBpbmRleGVzLiBJZiB0aGUgdXBkYXRlIGlzCisJICogSE9ULCBpdCBjb3VsZCBiZSB0 aGF0IHdlIHVwZGF0ZWQgc3VtbWFyaXplZCBjb2x1bW5zLCBzbyB3ZSBlaXRoZXIKKwkgKiB1 cGRhdGUgb25seSBzdW1tYXJpemVkIGluZGV4ZXMsIG9yIG5vbmUgYXQgYWxsLgorCSAqLwor CSp1cGRhdGVfaW5kZXhlcyA9IFRVX05vbmU7CiAJc3dpdGNoIChyZXN1bHQpCiAJewogCQlj YXNlIFRNX1NlbGZNb2RpZmllZDoKQEAgLTQ1NzIsNiArNDcwNCwxMCBAQCBzaW1wbGVfaGVh cF91cGRhdGUoUmVsYXRpb24gcmVsYXRpb24sIGNvbnN0IEl0ZW1Qb2ludGVyRGF0YSAqb3Rp ZCwgSGVhcFR1cGxlIHR1cAoKIAkJY2FzZSBUTV9PazoKIAkJCS8qIGRvbmUgc3VjY2Vzc2Z1 bGx5ICovCisJCQlpZiAoIUhlYXBUdXBsZUlzSGVhcE9ubHkodHVwbGUpKQorCQkJCSp1cGRh dGVfaW5kZXhlcyA9IFRVX0FsbDsKKwkJCWVsc2UgaWYgKHN1bW1hcml6ZWRfb25seSkKKwkJ CQkqdXBkYXRlX2luZGV4ZXMgPSBUVV9TdW1tYXJpemluZzsKIAkJCWJyZWFrOwoKIAkJY2Fz ZSBUTV9VcGRhdGVkOgpAQCAtNDU4OCw3ICs0NzI0LDYgQEAgc2ltcGxlX2hlYXBfdXBkYXRl KFJlbGF0aW9uIHJlbGF0aW9uLCBjb25zdCBJdGVtUG9pbnRlckRhdGEgKm90aWQsIEhlYXBU dXBsZSB0dXAKIAl9CiB9CgotCiAvKgogICogUmV0dXJuIHRoZSBNdWx0aVhhY3RTdGF0dXMg Y29ycmVzcG9uZGluZyB0byB0aGUgZ2l2ZW4gdHVwbGUgbG9jayBtb2RlLgogICovCmRpZmYg LS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1faGFuZGxlci5jIGIvc3Jj L2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtX2hhbmRsZXIuYwppbmRleCBiODNlMjAxM2Q1 MC4uYWZmNjhmODBmYWMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hl YXBhbV9oYW5kbGVyLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtX2hh bmRsZXIuYwpAQCAtMjcsNyArMjcsNiBAQAogI2luY2x1ZGUgImFjY2Vzcy9zeW5jc2Nhbi5o IgogI2luY2x1ZGUgImFjY2Vzcy90YWJsZWFtLmgiCiAjaW5jbHVkZSAiYWNjZXNzL3RzbWFw aS5oIgotI2luY2x1ZGUgImFjY2Vzcy92aXNpYmlsaXR5bWFwLmgiCiAjaW5jbHVkZSAiYWNj ZXNzL3hhY3QuaCIKICNpbmNsdWRlICJjYXRhbG9nL2NhdGFsb2cuaCIKICNpbmNsdWRlICJj YXRhbG9nL2luZGV4LmgiCkBAIC00NCw2ICs0Myw3IEBACiAjaW5jbHVkZSAic3RvcmFnZS9w cm9jYXJyYXkuaCIKICNpbmNsdWRlICJzdG9yYWdlL3NtZ3IuaCIKICNpbmNsdWRlICJ1dGls cy9idWlsdGlucy5oIgorI2luY2x1ZGUgInV0aWxzL2luamVjdGlvbl9wb2ludC5oIgogI2lu Y2x1ZGUgInV0aWxzL3JlbC5oIgoKIHN0YXRpYyB2b2lkIHJlZm9ybV9hbmRfcmV3cml0ZV90 dXBsZShIZWFwVHVwbGUgdHVwbGUsCkBAIC0zMTYsMTkgKzMxNiwyNiBAQCBoZWFwYW1fdHVw bGVfZGVsZXRlKFJlbGF0aW9uIHJlbGF0aW9uLCBJdGVtUG9pbnRlciB0aWQsIENvbW1hbmRJ ZCBjaWQsCiBzdGF0aWMgVE1fUmVzdWx0CiBoZWFwYW1fdHVwbGVfdXBkYXRlKFJlbGF0aW9u IHJlbGF0aW9uLCBJdGVtUG9pbnRlciBvdGlkLCBUdXBsZVRhYmxlU2xvdCAqc2xvdCwKIAkJ CQkJQ29tbWFuZElkIGNpZCwgU25hcHNob3Qgc25hcHNob3QsIFNuYXBzaG90IGNyb3NzY2hl Y2ssCi0JCQkJCWJvb2wgd2FpdCwgVE1fRmFpbHVyZURhdGEgKnRtZmQsCi0JCQkJCUxvY2tU dXBsZU1vZGUgKmxvY2ttb2RlLCBUVV9VcGRhdGVJbmRleGVzICp1cGRhdGVfaW5kZXhlcykK KwkJCQkJYm9vbCB3YWl0LCBUTV9GYWlsdXJlRGF0YSAqdG1mZCwgTG9ja1R1cGxlTW9kZSAq bG9ja21vZGUsCisJCQkJCWNvbnN0IEJpdG1hcHNldCAqbWl4X2F0dHJzLCBUVV9VcGRhdGVJ bmRleGVzICp1cGRhdGVfaW5kZXhlcykKIHsKIAlib29sCQlzaG91bGRGcmVlID0gdHJ1ZTsK IAlIZWFwVHVwbGUJdHVwbGUgPSBFeGVjRmV0Y2hTbG90SGVhcFR1cGxlKHNsb3QsIHRydWUs ICZzaG91bGRGcmVlKTsKKwlib29sCQlob3RfYWxsb3dlZDsKKwlib29sCQlzdW1tYXJpemVk X29ubHk7CiAJVE1fUmVzdWx0CXJlc3VsdDsKCisJQXNzZXJ0KEl0ZW1Qb2ludGVySXNWYWxp ZChvdGlkKSk7CisKKwlob3RfYWxsb3dlZCA9IEhlYXBVcGRhdGVIb3RBbGxvd2FibGUocmVs YXRpb24sIG1peF9hdHRycywgJnN1bW1hcml6ZWRfb25seSk7CisJKmxvY2ttb2RlID0gSGVh cFVwZGF0ZURldGVybWluZUxvY2ttb2RlKHJlbGF0aW9uLCBtaXhfYXR0cnMpOworCiAJLyog VXBkYXRlIHRoZSB0dXBsZSB3aXRoIHRhYmxlIG9pZCAqLwogCXNsb3QtPnR0c190YWJsZU9p ZCA9IFJlbGF0aW9uR2V0UmVsaWQocmVsYXRpb24pOwogCXR1cGxlLT50X3RhYmxlT2lkID0g c2xvdC0+dHRzX3RhYmxlT2lkOwoKIAlyZXN1bHQgPSBoZWFwX3VwZGF0ZShyZWxhdGlvbiwg b3RpZCwgdHVwbGUsIGNpZCwgY3Jvc3NjaGVjaywgd2FpdCwKLQkJCQkJCSB0bWZkLCBsb2Nr bW9kZSwgdXBkYXRlX2luZGV4ZXMpOworCQkJCQkJIHRtZmQsICpsb2NrbW9kZSwgbWl4X2F0 dHJzLCBob3RfYWxsb3dlZCk7CiAJSXRlbVBvaW50ZXJDb3B5KCZ0dXBsZS0+dF9zZWxmLCAm c2xvdC0+dHRzX3RpZCk7CgogCS8qCkBAIC0zNDEsMTYgKzM0OCwxNyBAQCBoZWFwYW1fdHVw bGVfdXBkYXRlKFJlbGF0aW9uIHJlbGF0aW9uLCBJdGVtUG9pbnRlciBvdGlkLCBUdXBsZVRh YmxlU2xvdCAqc2xvdCwKIAkgKiBIT1QsIGl0IGNvdWxkIGJlIHRoYXQgd2UgdXBkYXRlZCBz dW1tYXJpemVkIGNvbHVtbnMsIHNvIHdlIGVpdGhlcgogCSAqIHVwZGF0ZSBvbmx5IHN1bW1h cml6ZWQgaW5kZXhlcywgb3Igbm9uZSBhdCBhbGwuCiAJICovCi0JaWYgKHJlc3VsdCAhPSBU TV9PaykKKwkqdXBkYXRlX2luZGV4ZXMgPSBUVV9Ob25lOworCWlmIChyZXN1bHQgPT0gVE1f T2spCiAJewotCQlBc3NlcnQoKnVwZGF0ZV9pbmRleGVzID09IFRVX05vbmUpOwotCQkqdXBk YXRlX2luZGV4ZXMgPSBUVV9Ob25lOworCQlpZiAoSGVhcFR1cGxlSXNIZWFwT25seSh0dXBs ZSkpCisJCXsKKwkJCWlmIChzdW1tYXJpemVkX29ubHkpCisJCQkJKnVwZGF0ZV9pbmRleGVz ID0gVFVfU3VtbWFyaXppbmc7CisJCX0KKwkJZWxzZQorCQkJKnVwZGF0ZV9pbmRleGVzID0g VFVfQWxsOwogCX0KLQllbHNlIGlmICghSGVhcFR1cGxlSXNIZWFwT25seSh0dXBsZSkpCi0J CUFzc2VydCgqdXBkYXRlX2luZGV4ZXMgPT0gVFVfQWxsKTsKLQllbHNlCi0JCUFzc2VydCgo KnVwZGF0ZV9pbmRleGVzID09IFRVX1N1bW1hcml6aW5nKSB8fAotCQkJICAgKCp1cGRhdGVf aW5kZXhlcyA9PSBUVV9Ob25lKSk7CgogCWlmIChzaG91bGRGcmVlKQogCQlwZnJlZSh0dXBs ZSk7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvdGFibGUvdGFibGVhbS5jIGIv c3JjL2JhY2tlbmQvYWNjZXNzL3RhYmxlL3RhYmxlYW0uYwppbmRleCBkZmRhMWFmNDEyZS4u NDJhY2Q1YjE3YTkgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90YWJsZS90YWJs ZWFtLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RhYmxlL3RhYmxlYW0uYwpAQCAtMzU5 LDYgKzM1OSw3IEBAIHZvaWQKIHNpbXBsZV90YWJsZV90dXBsZV91cGRhdGUoUmVsYXRpb24g cmVsLCBJdGVtUG9pbnRlciBvdGlkLAogCQkJCQkJICBUdXBsZVRhYmxlU2xvdCAqc2xvdCwK IAkJCQkJCSAgU25hcHNob3Qgc25hcHNob3QsCisJCQkJCQkgIGNvbnN0IEJpdG1hcHNldCAq bWl4X2F0dHJzLAogCQkJCQkJICBUVV9VcGRhdGVJbmRleGVzICp1cGRhdGVfaW5kZXhlcykK IHsKIAlUTV9SZXN1bHQJcmVzdWx0OwpAQCAtMzY5LDcgKzM3MCw5IEBAIHNpbXBsZV90YWJs ZV90dXBsZV91cGRhdGUoUmVsYXRpb24gcmVsLCBJdGVtUG9pbnRlciBvdGlkLAogCQkJCQkJ CQlHZXRDdXJyZW50Q29tbWFuZElkKHRydWUpLAogCQkJCQkJCQlzbmFwc2hvdCwgSW52YWxp ZFNuYXBzaG90LAogCQkJCQkJCQl0cnVlIC8qIHdhaXQgZm9yIGNvbW1pdCAqLyAsCi0JCQkJ CQkJCSZ0bWZkLCAmbG9ja21vZGUsIHVwZGF0ZV9pbmRleGVzKTsKKwkJCQkJCQkJJnRtZmQs ICZsb2NrbW9kZSwKKwkJCQkJCQkJbWl4X2F0dHJzLAorCQkJCQkJCQl1cGRhdGVfaW5kZXhl cyk7CgogCXN3aXRjaCAocmVzdWx0KQogCXsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2Nv bW1hbmRzL3RyaWdnZXIuYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3RyaWdnZXIuYwppbmRl eCA5OGQ0MDJjMGEzYi4uNjRlZmE1NWRmZTMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2Nv bW1hbmRzL3RyaWdnZXIuYworKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy90cmlnZ2VyLmMK QEAgLTI5NzgsNiArMjk3OCw3IEBAIEV4ZWNCUlVwZGF0ZVRyaWdnZXJzKEVTdGF0ZSAqZXN0 YXRlLCBFUFFTdGF0ZSAqZXBxc3RhdGUsCiAJCQkJCSBib29sIGlzX21lcmdlX3VwZGF0ZSkK IHsKIAlUcmlnZ2VyRGVzYyAqdHJpZ2Rlc2MgPSByZWxpbmZvLT5yaV9UcmlnRGVzYzsKKwlU dXBsZURlc2MJdHVwZGVzYyA9IFJlbGF0aW9uR2V0RGVzY3IocmVsaW5mby0+cmlfUmVsYXRp b25EZXNjKTsKIAlUdXBsZVRhYmxlU2xvdCAqb2xkc2xvdCA9IEV4ZWNHZXRUcmlnZ2VyT2xk U2xvdChlc3RhdGUsIHJlbGluZm8pOwogCUhlYXBUdXBsZQluZXd0dXBsZSA9IE5VTEw7CiAJ SGVhcFR1cGxlCXRyaWd0dXBsZTsKQEAgLTI5ODUsNyArMjk4Niw5IEBAIEV4ZWNCUlVwZGF0 ZVRyaWdnZXJzKEVTdGF0ZSAqZXN0YXRlLCBFUFFTdGF0ZSAqZXBxc3RhdGUsCiAJYm9vbAkJ c2hvdWxkX2ZyZWVfbmV3ID0gZmFsc2U7CiAJVHJpZ2dlckRhdGEgTG9jVHJpZ2dlckRhdGEg PSB7MH07CiAJaW50CQkJaTsKLQlCaXRtYXBzZXQgICp1cGRhdGVkQ29sczsKKwlCaXRtYXBz ZXQgICp1cGRhdGVkQ29scyA9IE5VTEw7CisJQml0bWFwc2V0ICAqcmVtYWluaW5nQ29scyA9 IE5VTEw7CisJQml0bWFwc2V0ICAqbW9kaWZpZWRDb2xzOwogCUxvY2tUdXBsZU1vZGUgbG9j a21vZGU7CgogCS8qIERldGVybWluZSBsb2NrIG1vZGUgdG8gdXNlICovCkBAIC0zMTI3LDYg KzMxMzAsMjEgQEAgRXhlY0JSVXBkYXRlVHJpZ2dlcnMoRVN0YXRlICplc3RhdGUsIEVQUVN0 YXRlICplcHFzdGF0ZSwKIAlpZiAoc2hvdWxkX2ZyZWVfdHJpZykKIAkJaGVhcF9mcmVldHVw bGUodHJpZ3R1cGxlKTsKCisJLyoKKwkgKiBCZWZvcmUgVVBEQVRFIHRyaWdnZXJzIG1heSBo YXZlIHVwZGF0ZWQgYXR0cmlidXRlcyBub3Qga25vd24gdG8KKwkgKiBFeGVjR2V0QWxsVXBk YXRlZENvbHVtbnMoKSB1c2luZyBoZWFwX21vZGlmeV90dXBsZSgpIG9yCisJICogaGVhcF9t b2RpZml5X3R1cGxlX2J5X2NvbHMoKS4gIEZpbmQgYW5kIHJlY29yZCB0aG9zZSBub3cuCisJ ICovCisJcmVtYWluaW5nQ29scyA9IGJtc19hZGRfcmFuZ2UoTlVMTCwgMSAtIEZpcnN0TG93 SW52YWxpZEhlYXBBdHRyaWJ1dGVOdW1iZXIsCisJCQkJCQkJICAgdHVwZGVzYy0+bmF0dHMg LSBGaXJzdExvd0ludmFsaWRIZWFwQXR0cmlidXRlTnVtYmVyKTsKKwlyZW1haW5pbmdDb2xz ID0gYm1zX2RlbF9tZW1iZXJzKHJlbWFpbmluZ0NvbHMsIHVwZGF0ZWRDb2xzKTsKKwltb2Rp ZmllZENvbHMgPSBFeGVjQ29tcGFyZVNsb3RBdHRycyh0dXBkZXNjLCByZW1haW5pbmdDb2xz LCBvbGRzbG90LCBuZXdzbG90KTsKKwlyZWxpbmZvLT5yaV9leHRyYVVwZGF0ZWRDb2xzID0K KwkJYm1zX2FkZF9tZW1iZXJzKHJlbGluZm8tPnJpX2V4dHJhVXBkYXRlZENvbHMsIG1vZGlm aWVkQ29scyk7CisKKwlibXNfZnJlZShyZW1haW5pbmdDb2xzKTsKKwlibXNfZnJlZShtb2Rp ZmllZENvbHMpOworCiAJcmV0dXJuIHRydWU7CiB9CgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvZXhlY3V0b3IvZXhlY1JlcGxpY2F0aW9uLmMgYi9zcmMvYmFja2VuZC9leGVjdXRvci9l eGVjUmVwbGljYXRpb24uYwppbmRleCAyNDk3ZWU3ZWRjNS4uYzJlNzc3NDBlNzYgMTAwNjQ0 Ci0tLSBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNSZXBsaWNhdGlvbi5jCisrKyBiL3Ny Yy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNSZXBsaWNhdGlvbi5jCkBAIC0zMyw2ICszMyw3IEBA CiAjaW5jbHVkZSAidXRpbHMvYnVpbHRpbnMuaCIKICNpbmNsdWRlICJ1dGlscy9sc3lzY2Fj aGUuaCIKICNpbmNsdWRlICJ1dGlscy9yZWwuaCIKKyNpbmNsdWRlICJ1dGlscy9yZWxjYWNo ZS5oIgogI2luY2x1ZGUgInV0aWxzL3NuYXBtZ3IuaCIKICNpbmNsdWRlICJ1dGlscy9zeXNj YWNoZS5oIgogI2luY2x1ZGUgInV0aWxzL3R5cGNhY2hlLmgiCkBAIC05MDYsNiArOTA3LDcg QEAgRXhlY1NpbXBsZVJlbGF0aW9uVXBkYXRlKFJlc3VsdFJlbEluZm8gKnJlc3VsdFJlbElu Zm8sCiAJYm9vbAkJc2tpcF90dXBsZSA9IGZhbHNlOwogCVJlbGF0aW9uCXJlbCA9IHJlc3Vs dFJlbEluZm8tPnJpX1JlbGF0aW9uRGVzYzsKIAlJdGVtUG9pbnRlciB0aWQgPSAmKHNlYXJj aHNsb3QtPnR0c190aWQpOworCUJpdG1hcHNldCAgKm1peF9hdHRyczsKCiAJLyoKIAkgKiBX ZSBzdXBwb3J0IG9ubHkgbm9uLXN5c3RlbSB0YWJsZXMsIHdpdGgKQEAgLTk0NCw4ICs5NDYs MTEgQEAgRXhlY1NpbXBsZVJlbGF0aW9uVXBkYXRlKFJlc3VsdFJlbEluZm8gKnJlc3VsdFJl bEluZm8sCiAJCWlmIChyZWwtPnJkX3JlbC0+cmVsaXNwYXJ0aXRpb24pCiAJCQlFeGVjUGFy dGl0aW9uQ2hlY2socmVzdWx0UmVsSW5mbywgc2xvdCwgZXN0YXRlLCB0cnVlKTsKCisJCW1p eF9hdHRycyA9IEV4ZWNVcGRhdGVNb2RJZHhBdHRycyhyZXN1bHRSZWxJbmZvLAorCQkJCQkJ CQkJCSAgZXN0YXRlLCBzZWFyY2hzbG90LCBzbG90KTsKKwogCQlzaW1wbGVfdGFibGVfdHVw bGVfdXBkYXRlKHJlbCwgdGlkLCBzbG90LCBlc3RhdGUtPmVzX3NuYXBzaG90LAotCQkJCQkJ CQkgICZ1cGRhdGVfaW5kZXhlcyk7CisJCQkJCQkJCSAgbWl4X2F0dHJzLCAmdXBkYXRlX2lu ZGV4ZXMpOwoKIAkJY29uZmxpY3RpbmRleGVzID0gcmVzdWx0UmVsSW5mby0+cmlfb25Db25m bGljdEFyYml0ZXJJbmRleGVzOwoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9y L2V4ZWNUdXBsZXMuYyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNUdXBsZXMuYwppbmRl eCBiNzY4ZWFlOWU1My4uMTA2NGViZTg0NWIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2V4 ZWN1dG9yL2V4ZWNUdXBsZXMuYworKysgYi9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjVHVw bGVzLmMKQEAgLTY2LDYgKzY2LDcgQEAKICNpbmNsdWRlICJub2Rlcy9ub2RlRnVuY3MuaCIK ICNpbmNsdWRlICJzdG9yYWdlL2J1Zm1nci5oIgogI2luY2x1ZGUgInV0aWxzL2J1aWx0aW5z LmgiCisjaW5jbHVkZSAidXRpbHMvZGF0dW0uaCIKICNpbmNsdWRlICJ1dGlscy9leHBhbmRl ZGRhdHVtLmgiCiAjaW5jbHVkZSAidXRpbHMvbHN5c2NhY2hlLmgiCiAjaW5jbHVkZSAidXRp bHMvdHlwY2FjaGUuaCIKQEAgLTE5MjksNiArMTkzMCw4MyBAQCBFeGVjRmV0Y2hTbG90SGVh cFR1cGxlRGF0dW0oVHVwbGVUYWJsZVNsb3QgKnNsb3QpCiAJcmV0dXJuIHJldDsKIH0KCisv KgorICogRXhlY0NvbXBhcmVTbG90QXR0cnMKKyAqCisgKiBDb21wYXJlIHRoZSBzdWJzZXQg b2YgYXR0cmlidXRlcyBpbiBhdHRycyBiZXd0d2VlbiBUdXBsZVRhYmxlU2xvdHMgdG8gZGV0 ZWN0CisgKiB3aGljaCBhdHRyaWJ1dGVzIGhhdmUgY2hhbmdlZC4KKyAqCisgKiBSZXR1cm5z IGEgQml0bWFwc2V0IG9mIGF0dHJpYnV0ZSBpbmRpY2VzICh1c2luZworICogRmlyc3RMb3dJ bnZhbGlkSGVhcEF0dHJpYnV0ZU51bWJlciBjb252ZW50aW9uKSB0aGF0IGRpZmZlciBiZXR3 ZWVuIHRoZSB0d28KKyAqIHNsb3RzLgorICovCitCaXRtYXBzZXQgKgorRXhlY0NvbXBhcmVT bG90QXR0cnMoVHVwbGVEZXNjIHR1cGRlc2MsIGNvbnN0IEJpdG1hcHNldCAqYXR0cnMsCisJ CQkJCSBUdXBsZVRhYmxlU2xvdCAqczEsIFR1cGxlVGFibGVTbG90ICpzMikKK3sKKwlpbnQJ CQlhdHRpZHggPSAtMTsKKwlCaXRtYXBzZXQgICptb2RpZmllZCA9IE5VTEw7CisKKwkvKiBY WFggd2hhdCBpZiBzbG90cyBkb24ndCBzaGFyZSB0aGUgc2FtZSB0dXBsZURlc2NyaXB0b3Iu Li4gKi8KKwkvKiBBc3NlcnQoczEtPnR0c190dXBsZURlc2NyaXB0b3IgPT0gczItPnR0c190 dXBsZURlc2NyaXB0b3IpOyAqLworCisJd2hpbGUgKChhdHRpZHggPSBibXNfbmV4dF9tZW1i ZXIoYXR0cnMsIGF0dGlkeCkpID49IDApCisJeworCQkvKiBhdHRpZHggaXMgemVyby1iYXNl ZCwgYXR0cm51bSBpcyB0aGUgbm9ybWFsIGF0dHJpYnV0ZSBudW1iZXIgKi8KKwkJQXR0ck51 bWJlcglhdHRybnVtID0gYXR0aWR4ICsgRmlyc3RMb3dJbnZhbGlkSGVhcEF0dHJpYnV0ZU51 bWJlcjsKKwkJRGF0dW0JCXZhbHVlMSwKKwkJCQkJdmFsdWUyOworCQlib29sCQludWxsMSwK KwkJCQkJbnVsbDI7CisJCUNvbXBhY3RBdHRyaWJ1dGUgKmF0dDsKKworCQkvKgorCQkgKiBJ ZiBpdCdzIGEgd2hvbGUtdHVwbGUgcmVmZXJlbmNlLCBzYXkgIm5vdCBlcXVhbCIuICBJdCdz IG5vdCByZWFsbHkKKwkJICogd29ydGggc3VwcG9ydGluZyB0aGlzIGNhc2UsIHNpbmNlIGl0 IGNvdWxkIG9ubHkgc3VjY2VlZCBhZnRlciBhCisJCSAqIG5vLW9wIHVwZGF0ZSwgd2hpY2gg aXMgaGFyZGx5IGEgY2FzZSB3b3J0aCBvcHRpbWl6aW5nIGZvci4KKwkJICovCisJCWlmIChh dHRybnVtID09IDApCisJCXsKKwkJCW1vZGlmaWVkID0gYm1zX2FkZF9tZW1iZXIobW9kaWZp ZWQsIGF0dGlkeCk7CisJCQljb250aW51ZTsKKwkJfQorCisJCS8qCisJCSAqIExpa2V3aXNl LCBhdXRvbWF0aWNhbGx5IHNheSAibm90IGVxdWFsIiBmb3IgYW55IHN5c3RlbSBhdHRyaWJ1 dGUKKwkJICogb3RoZXIgdGhhbiB0YWJsZU9JRDsgd2UgY2Fubm90IGV4cGVjdCB0aGVzZSB0 byBiZSBjb25zaXN0ZW50IGluIGEKKwkJICogSE9UIGNoYWluLCBvciBldmVuIHRvIGJlIHNl dCBjb3JyZWN0bHkgeWV0IGluIHRoZSBuZXcgdHVwbGUuCisJCSAqLworCQlpZiAoYXR0cm51 bSA8IDApCisJCXsKKwkJCWlmIChhdHRybnVtICE9IFRhYmxlT2lkQXR0cmlidXRlTnVtYmVy KQorCQkJeworCQkJCW1vZGlmaWVkID0gYm1zX2FkZF9tZW1iZXIobW9kaWZpZWQsIGF0dGlk eCk7CisJCQkJY29udGludWU7CisJCQl9CisJCX0KKworCQlhdHQgPSBUdXBsZURlc2NDb21w YWN0QXR0cih0dXBkZXNjLCBhdHRybnVtIC0gMSk7CisJCXZhbHVlMSA9IHNsb3RfZ2V0YXR0 cihzMSwgYXR0cm51bSwgJm51bGwxKTsKKwkJdmFsdWUyID0gc2xvdF9nZXRhdHRyKHMyLCBh dHRybnVtLCAmbnVsbDIpOworCisJCS8qIEEgY2hhbmdlIHRvL2Zyb20gTlVMTCwgc28gbm90 IGVxdWFsICovCisJCWlmIChudWxsMSAhPSBudWxsMikKKwkJeworCQkJbW9kaWZpZWQgPSBi bXNfYWRkX21lbWJlcihtb2RpZmllZCwgYXR0aWR4KTsKKwkJCWNvbnRpbnVlOworCQl9CisK KwkJLyogQm90aCBOVUxMLCBubyBjaGFuZ2UvdW5tb2RpZmllZCAqLworCQlpZiAobnVsbDIp CisJCQljb250aW51ZTsKKworCQlpZiAoIWRhdHVtX2ltYWdlX2VxKHZhbHVlMSwgdmFsdWUy LCBhdHQtPmF0dGJ5dmFsLCBhdHQtPmF0dGxlbikpCisJCQltb2RpZmllZCA9IGJtc19hZGRf bWVtYmVyKG1vZGlmaWVkLCBhdHRpZHgpOworCX0KKworCXJldHVybiBtb2RpZmllZDsKK30K KwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQogICoJCQkJY29udmVuaWVuY2UgaW5pdGlhbGl6YXRpb24gcm91 dGluZXMKICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9y L25vZGVNb2RpZnlUYWJsZS5jIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZU1vZGlmeVRh YmxlLmMKaW5kZXggNzkzYzc2ZDRmODIuLjQ5MjdmYzg4ZTYxIDEwMDY0NAotLS0gYS9zcmMv YmFja2VuZC9leGVjdXRvci9ub2RlTW9kaWZ5VGFibGUuYworKysgYi9zcmMvYmFja2VuZC9l eGVjdXRvci9ub2RlTW9kaWZ5VGFibGUuYwpAQCAtMTcsNiArMTcsNyBAQAogICoJCUV4ZWNN b2RpZnlUYWJsZQkJLSByZXRyaWV2ZSB0aGUgbmV4dCB0dXBsZSBmcm9tIHRoZSBub2RlCiAg KgkJRXhlY0VuZE1vZGlmeVRhYmxlCS0gc2h1dCBkb3duIHRoZSBNb2RpZnlUYWJsZSBub2Rl CiAgKgkJRXhlY1JlU2Nhbk1vZGlmeVRhYmxlIC0gcmVzY2FuIHRoZSBNb2RpZnlUYWJsZSBu b2RlCisgKgkJRXhlY1VwZGF0ZU1vZElkeEF0dHJzIC0gZmluZCBzZXQgb2YgdXBkYXRlZCBp bmRleGVkIGNvbHVtbnMKICAqCiAgKgkgTk9URVMKICAqCQlUaGUgTW9kaWZ5VGFibGUgbm9k ZSByZWNlaXZlcyBpbnB1dCBmcm9tIGl0cyBvdXRlclBsYW4sIHdoaWNoIGlzCkBAIC01NCw2 ICs1NSw3IEBACgogI2luY2x1ZGUgImFjY2Vzcy9odHVwX2RldGFpbHMuaCIKICNpbmNsdWRl ICJhY2Nlc3MvdGFibGVhbS5oIgorI2luY2x1ZGUgImFjY2Vzcy90dXBkZXNjLmgiCiAjaW5j bHVkZSAiYWNjZXNzL3hhY3QuaCIKICNpbmNsdWRlICJjb21tYW5kcy90cmlnZ2VyLmgiCiAj aW5jbHVkZSAiZXhlY3V0b3IvZXhlY1BhcnRpdGlvbi5oIgpAQCAtMTg4LDYgKzE5MCw2OCBA QCBzdGF0aWMgVHVwbGVUYWJsZVNsb3QgKkV4ZWNNZXJnZU5vdE1hdGNoZWQoTW9kaWZ5VGFi bGVDb250ZXh0ICpjb250ZXh0LAogCQkJCQkJCQkJCSAgIFJlc3VsdFJlbEluZm8gKnJlc3Vs dFJlbEluZm8sCiAJCQkJCQkJCQkJICAgYm9vbCBjYW5TZXRUYWcpOwoKKy8qCisgKiBFeGVj VXBkYXRlTW9kSWR4QXR0cnMKKyAqCisgKiBGaW5kIHRoZSBzZXQgb2YgYXR0cmlidXRlcyBy ZWZlcmVuY2VkIGJ5IHRoaXMgcmVsYXRpb24gYW5kIHVzZWQgaW4gdGhpcworICogVVBEQVRF IHRoYXQgbm93IGRpZmZlciBpbiB2YWx1ZS4gIFRoaXMgaXMgZG9uZSBieSByZXZpZXdpbmcg c2xvdCBkYXR1bSB0aGF0CisgKiBhcmUgaW4gdGhlIFVQREFURSBzdGF0bWVudCBhbmQgYXJl IGtub3duIHRvIGJlIHJlZmVyZW5jZWQgYnkgYXQgbGVhc3Qgb25lCisgKiBpbmRleCBpbiBz b21lIHdheS4gIFRoaXMgc2V0IGlzIGNhbGxlZCB0aGUgIm1vZGlmaWVkIGluZGV4ZWQgYXR0 cmlidXRlcyIgb3IKKyAqICJtaXhfYXR0cnMiLiAgQW4gb3ZlcmxhcCBvZiBhIHNpbmdsZSBp bmRleCdzIGF0dHJpYnV0ZXMgYW5kIHRoaXMgIm1peCIgc2V0CisgKiBzaWduYWxzIHRoYXQg dGhlIGF0dHJpYnV0ZXMgaW4gdGhlIG5ld190dHMgdXNlZCB0byBmb3JtIHRoZSBpbmRleCBk YXR1bSBoYXZlCisgKiBjaGFuZ2VkLgorICoKKyAqIFJldHVybiBhIEJpdG1hcHNldCB0aGF0 IGNvbnRhaW5zIHRoZSBzZXQgb2YgbW9kaWZpZWQgKGNoYW5nZWQpIGluZGV4ZWQKKyAqIGF0 dHJpYnV0ZXMgYmV0d2VlbiBvbGR0dXAgYW5kIG5ld3R1cC4KKyAqCisgKiBOT1RFOiBUaGVy ZSBpcyBhIHNpbWxhciBmdW5jdGlvbiBjYWxsZWQgSGVhcFVwZGF0ZU1vZElEeEF0dHJzKCkg dGhhdCBvcGVyYXRlcworICogb24gdGhlIG9sZCBUSUQgYW5kIG5ldyBIZWFwVHVwbGUgcmF0 aGVyIHRoYW4gdGhlIG9sZC9uZXcgVHVwbGVUYWJsZVNsb3RzIGFzCisgKiB0aGlzIGZ1bmN0 aW9uIGRvZXMuICBUaGVzZSB0d28gZnVuY3Rpb25zIHNob3VsZCBtaXJyb3Igb25lIGFub3Ro ZXIgdW50aWwKKyAqIHNvbWVkYXkgd2hlbiBjYXRhbG9nIHR1cGxlIHVwZGF0ZXMgdHJhY2sg dGhlaXIgY2hhbmdlcyBhdm9pZGluZyB0aGUgbmVlZCB0bworICogcmUtZGlzY292ZXIgdGhl bSBpbiBzaW1wbGVfaGVhcF91cGRhdGUoKS4KKyAqLworQml0bWFwc2V0ICoKK0V4ZWNVcGRh dGVNb2RJZHhBdHRycyhSZXN1bHRSZWxJbmZvICpyZXN1bHRSZWxJbmZvLAorCQkJCQkgIEVT dGF0ZSAqZXN0YXRlLAorCQkJCQkgIFR1cGxlVGFibGVTbG90ICpvbGRfdHRzLAorCQkJCQkg IFR1cGxlVGFibGVTbG90ICpuZXdfdHRzKQoreworCVJlbGF0aW9uCXJlbGF0aW9uID0gcmVz dWx0UmVsSW5mby0+cmlfUmVsYXRpb25EZXNjOworCVR1cGxlRGVzYwl0dXBkZXNjID0gUmVs YXRpb25HZXREZXNjcihyZWxhdGlvbik7CisJQml0bWFwc2V0ICAqYXR0cnMsCisJCQkgICAq bWl4X2F0dHJzID0gTlVMTDsKKworCS8qIElmIG5vIGluZGV4ZXMsIHdlJ3JlIGRvbmUgKi8K KwlpZiAocmVzdWx0UmVsSW5mby0+cmlfTnVtSW5kaWNlcyA9PSAwKQorCQlyZXR1cm4gTlVM TDsKKworCS8qCisJICogR2V0IHRoZSBzZXQgb2YgYWxsIGF0dHJpYnV0ZXMgYWNyb3NzIGFs bCBpbmRleGVzIGZvciB0aGlzIHJlbGF0aW9uIGZyb20KKwkgKiB0aGUgcmVsY2FjaGUsIGl0 IHJldHVybnMgdXMgYSBjb3B5IG9mIHRoZSBiaXRtYXAgc28gd2UgY2FuIG1vZGlmeSBpdC4K KwkgKi8KKwlhdHRycyA9IFJlbGF0aW9uR2V0SW5kZXhBdHRyQml0bWFwKHJlbGF0aW9uLCBJ TkRFWF9BVFRSX0JJVE1BUF9JTkRFWEVEKTsKKworCS8qCisJICogRmV0Y2ggdGhlIHNldCBv ZiBhdHRyaWJ1dGVzIGV4cGxpY2l0eSBTRVQgaW4gdGhlIFVQREFURSBzdGF0ZW1lbnQgb3IK KwkgKiBzZXQgYnkgYSBiZWZvcmUgcm93IHRyaWdnZXIgKGV2ZW4gaWYgbm90IG1lbnRpb25l ZCBpbiB0aGUgU1FMKSBmcm9tIHRoZQorCSAqIGV4ZWN1dG9yIHN0YXRlIGFuZCB0aGVuIGZp bmQgdGhlIGludGVyc2VjdGlvbiB3aXRoIHRoZSBpbmRleGVkCisJICogYXR0cmlidXRlcy4g IEF0dHJpYnV0ZXMgdGhhdCBhcmUgU0VUIG1pZ2h0IG5vdCBjaGFuZ2UgdmFsdWUsIHNvIHdl IGhhdmUKKwkgKiB0byBleGFtaW5lIHRoZW0gZm9yIGNoYW5nZXMuCisJICovCisJYXR0cnMg PSBibXNfaW50X21lbWJlcnMoYXR0cnMsIEV4ZWNHZXRBbGxVcGRhdGVkQ29scyhyZXN1bHRS ZWxJbmZvLCBlc3RhdGUpKTsKKworCS8qCisJICogV2hlbiB0aGVyZSBhcmUgaW5kZXhlZCBh dHRyaWJ1dGVzIG1lbnRpb25lZCBpbiB0aGUgVVBEQVRFIHRoZW4gd2UgbmVlZAorCSAqIHRv IGZpbmQgdGhlIHN1YnNldCB0aGF0IGNoYW5nZWQgdmFsdWUuICBUaGF0J3MgdGhlICJtb2Rp ZmllZCBpbmRleGVkCisJICogYXR0cmlidXRlcyIgb3IgIm1peF9hdHRycyIuCisJICovCisJ aWYgKCFibXNfaXNfZW1wdHkoYXR0cnMpKQorCQltaXhfYXR0cnMgPSBFeGVjQ29tcGFyZVNs b3RBdHRycyh0dXBkZXNjLCBhdHRycywgb2xkX3R0cywgbmV3X3R0cyk7CisKKwlibXNfZnJl ZShhdHRycyk7CisKKwlyZXR1cm4gbWl4X2F0dHJzOworfQoKIC8qCiAgKiBWZXJpZnkgdGhh dCB0aGUgdHVwbGVzIHRvIGJlIHByb2R1Y2VkIGJ5IElOU0VSVCBtYXRjaCB0aGUKQEAgLTIx OTUsMTQgKzIyNTksMTcgQEAgRXhlY1VwZGF0ZVByZXBhcmVTbG90KFJlc3VsdFJlbEluZm8g KnJlc3VsdFJlbEluZm8sCiAgKi8KIHN0YXRpYyBUTV9SZXN1bHQKIEV4ZWNVcGRhdGVBY3Qo TW9kaWZ5VGFibGVDb250ZXh0ICpjb250ZXh0LCBSZXN1bHRSZWxJbmZvICpyZXN1bHRSZWxJ bmZvLAotCQkJICBJdGVtUG9pbnRlciB0dXBsZWlkLCBIZWFwVHVwbGUgb2xkdHVwbGUsIFR1 cGxlVGFibGVTbG90ICpzbG90LAotCQkJICBib29sIGNhblNldFRhZywgVXBkYXRlQ29udGV4 dCAqdXBkYXRlQ3h0KQorCQkJICBJdGVtUG9pbnRlciB0dXBsZWlkLCBIZWFwVHVwbGUgb2xk dHVwbGUsIFR1cGxlVGFibGVTbG90ICpvbGRTbG90LAorCQkJICBUdXBsZVRhYmxlU2xvdCAq c2xvdCwgYm9vbCBjYW5TZXRUYWcsIFVwZGF0ZUNvbnRleHQgKnVwZGF0ZUN4dCkKIHsKIAlF U3RhdGUJICAgKmVzdGF0ZSA9IGNvbnRleHQtPmVzdGF0ZTsKIAlSZWxhdGlvbglyZXN1bHRS ZWxhdGlvbkRlc2MgPSByZXN1bHRSZWxJbmZvLT5yaV9SZWxhdGlvbkRlc2M7CiAJYm9vbAkJ cGFydGl0aW9uX2NvbnN0cmFpbnRfZmFpbGVkOwogCVRNX1Jlc3VsdAlyZXN1bHQ7CgorCS8q IFRoZSBzZXQgb2YgbW9kaWZpZWQgaW5kZXhlZCBhdHRyaWJ1dGVzIHRoYXQgdHJpZ2dlciBu ZXcgaW5kZXggZW50cmllcyAqLworCUJpdG1hcHNldCAgKm1peF9hdHRycyA9IE5VTEw7CisK IAl1cGRhdGVDeHQtPmNyb3NzUGFydFVwZGF0ZSA9IGZhbHNlOwoKIAkvKgpAQCAtMjMxOSw3 ICsyMzg2LDE2IEBAIGxyZXBsYWNlOgogCQlFeGVjQ29uc3RyYWludHMocmVzdWx0UmVsSW5m bywgc2xvdCwgZXN0YXRlKTsKCiAJLyoKLQkgKiByZXBsYWNlIHRoZSBoZWFwIHR1cGxlCisJ ICogTmV4dCB1cCB3ZSBuZWVkIHRvIGZpbmQgb3V0IHRoZSBzZXQgb2YgaW5kZXhlZCBhdHRy aWJ1dGVzIHRoYXQgaGF2ZQorCSAqIGNoYW5nZWQgaW4gdmFsdWUgYW5kIHNob3VsZCB0cmln Z2VyIGEgbmV3IGluZGV4IHR1cGxlLiAgV2UgY291bGQgc3RhcnQKKwkgKiB3aXRoIHRoZSBz ZXQgb2YgdXBkYXRlZCBjb2x1bW5zIHZpYSBFeGVjR2V0VXBkYXRlZENvbHMoKSwgYnV0IGlm IHdlIGRvCisJICogd2Ugd2lsbCBvdmVybG9vayBhdHRyaWJ1dGVzIGRpcmVjdGx5IG1vZGlm aWVkIGJ5IGhlYXBfbW9kaWZ5X3R1cGxlKCkKKwkgKiB3aGljaCBhcmUgbm90IGtub3duIHRv IEV4ZWNHZXRVcGRhdGVkQ29scygpLgorCSAqLworCW1peF9hdHRycyA9IEV4ZWNVcGRhdGVN b2RJZHhBdHRycyhyZXN1bHRSZWxJbmZvLCBlc3RhdGUsIG9sZFNsb3QsIHNsb3QpOworCisJ LyoKKwkgKiBDYWxsIGludG8gdGhlIHRhYmxlIEFNIHRvIHVwZGF0ZSB0aGUgaGVhcCB0dXBs ZS4KIAkgKgogCSAqIE5vdGU6IGlmIGVzX2Nyb3NzY2hlY2tfc25hcHNob3QgaXNuJ3QgSW52 YWxpZFNuYXBzaG90LCB3ZSBjaGVjayB0aGF0CiAJICogdGhlIHJvdyB0byBiZSB1cGRhdGVk IGlzIHZpc2libGUgdG8gdGhhdCBzbmFwc2hvdCwgYW5kIHRocm93IGEKQEAgLTIzMzMsNiAr MjQwOSw3IEBAIGxyZXBsYWNlOgogCQkJCQkJCQllc3RhdGUtPmVzX2Nyb3NzY2hlY2tfc25h cHNob3QsCiAJCQkJCQkJCXRydWUgLyogd2FpdCBmb3IgY29tbWl0ICovICwKIAkJCQkJCQkJ JmNvbnRleHQtPnRtZmQsICZ1cGRhdGVDeHQtPmxvY2ttb2RlLAorCQkJCQkJCQltaXhfYXR0 cnMsCiAJCQkJCQkJCSZ1cGRhdGVDeHQtPnVwZGF0ZUluZGV4ZXMpOwoKIAlyZXR1cm4gcmVz dWx0OwpAQCAtMjU1NSw4ICsyNjMyLDggQEAgRXhlY1VwZGF0ZShNb2RpZnlUYWJsZUNvbnRl eHQgKmNvbnRleHQsIFJlc3VsdFJlbEluZm8gKnJlc3VsdFJlbEluZm8sCiAJCSAqLwogcmVk b19hY3Q6CiAJCWxvY2tlZHRpZCA9ICp0dXBsZWlkOwotCQlyZXN1bHQgPSBFeGVjVXBkYXRl QWN0KGNvbnRleHQsIHJlc3VsdFJlbEluZm8sIHR1cGxlaWQsIG9sZHR1cGxlLCBzbG90LAot CQkJCQkJCSAgIGNhblNldFRhZywgJnVwZGF0ZUN4dCk7CisJCXJlc3VsdCA9IEV4ZWNVcGRh dGVBY3QoY29udGV4dCwgcmVzdWx0UmVsSW5mbywgdHVwbGVpZCwgb2xkdHVwbGUsIG9sZFNs b3QsCisJCQkJCQkJICAgc2xvdCwgY2FuU2V0VGFnLCAmdXBkYXRlQ3h0KTsKCiAJCS8qCiAJ CSAqIElmIEV4ZWNVcGRhdGVBY3QgcmVwb3J0cyB0aGF0IGEgY3Jvc3MtcGFydGl0aW9uIHVw ZGF0ZSB3YXMgZG9uZSwKQEAgLTM0MDYsOCArMzQ4Myw4IEBAIGxtZXJnZV9tYXRjaGVkOgog CQkJCQlBc3NlcnQob2xkdHVwbGUgPT0gTlVMTCk7CgogCQkJCQlyZXN1bHQgPSBFeGVjVXBk YXRlQWN0KGNvbnRleHQsIHJlc3VsdFJlbEluZm8sIHR1cGxlaWQsCi0JCQkJCQkJCQkJICAg TlVMTCwgbmV3c2xvdCwgY2FuU2V0VGFnLAotCQkJCQkJCQkJCSAgICZ1cGRhdGVDeHQpOwor CQkJCQkJCQkJCSAgIE5VTEwsIHJlc3VsdFJlbEluZm8tPnJpX29sZFR1cGxlU2xvdCwKKwkJ CQkJCQkJCQkgICBuZXdzbG90LCBjYW5TZXRUYWcsICZ1cGRhdGVDeHQpOwoKIAkJCQkJLyoK IAkJCQkJICogQXMgaW4gRXhlY1VwZGF0ZSgpLCBpZiBFeGVjVXBkYXRlQWN0KCkgcmVwb3J0 cyB0aGF0IGEKQEAgLTQ1MzksNyArNDYxNiw3IEBAIEV4ZWNNb2RpZnlUYWJsZShQbGFuU3Rh dGUgKnBzdGF0ZSkKIAkJICogRm9yIFVQREFURS9ERUxFVEUvTUVSR0UsIGZldGNoIHRoZSBy b3cgaWRlbnRpdHkgaW5mbyBmb3IgdGhlIHR1cGxlCiAJCSAqIHRvIGJlIHVwZGF0ZWQvZGVs ZXRlZC9tZXJnZWQuICBGb3IgYSBoZWFwIHJlbGF0aW9uLCB0aGF0J3MgYSBUSUQ7CiAJCSAq IG90aGVyd2lzZSB3ZSBtYXkgaGF2ZSBhIHdob2xlcm93IGp1bmsgYXR0ciB0aGF0IGNhcnJp ZXMgdGhlIG9sZAotCQkgKiB0dXBsZSBpbiB0b3RvLiAgS2VlcCB0aGlzIGluIHN0ZXAgd2l0 aCB0aGUgcGFydCBvZgorCQkgKiB0dXBsZSBpbiB0b3RhbC4gIEtlZXAgdGhpcyBpbiBzdGVw IHdpdGggdGhlIHBhcnQgb2YKIAkJICogRXhlY0luaXRNb2RpZnlUYWJsZSB0aGF0IHNldHMg dXAgcmlfUm93SWRBdHROby4KIAkJICovCiAJCWlmIChvcGVyYXRpb24gPT0gQ01EX1VQREFU RSB8fCBvcGVyYXRpb24gPT0gQ01EX0RFTEVURSB8fApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvdXRpbHMvY2FjaGUvcmVsY2FjaGUuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL2NhY2hlL3Jl bGNhY2hlLmMKaW5kZXggNmI2MzRjOWZmZjEuLmYzMDUwNWQ4YWUzIDEwMDY0NAotLS0gYS9z cmMvYmFja2VuZC91dGlscy9jYWNoZS9yZWxjYWNoZS5jCisrKyBiL3NyYy9iYWNrZW5kL3V0 aWxzL2NhY2hlL3JlbGNhY2hlLmMKQEAgLTI0NzUsOCArMjQ3NSw4IEBAIFJlbGF0aW9uRGVz dHJveVJlbGF0aW9uKFJlbGF0aW9uIHJlbGF0aW9uLCBib29sIHJlbWVtYmVyX3R1cGRlc2Mp CiAJYm1zX2ZyZWUocmVsYXRpb24tPnJkX2tleWF0dHIpOwogCWJtc19mcmVlKHJlbGF0aW9u LT5yZF9wa2F0dHIpOwogCWJtc19mcmVlKHJlbGF0aW9uLT5yZF9pZGF0dHIpOwotCWJtc19m cmVlKHJlbGF0aW9uLT5yZF9ob3RibG9ja2luZ2F0dHIpOwogCWJtc19mcmVlKHJlbGF0aW9u LT5yZF9zdW1tYXJpemVkYXR0cik7CisJYm1zX2ZyZWUocmVsYXRpb24tPnJkX2luZGV4ZWRh dHRyKTsKIAlpZiAocmVsYXRpb24tPnJkX3B1YmRlc2MpCiAJCXBmcmVlKHJlbGF0aW9uLT5y ZF9wdWJkZXNjKTsKIAlpZiAocmVsYXRpb24tPnJkX29wdGlvbnMpCkBAIC01Mjc2LDggKzUy NzYsOCBAQCBSZWxhdGlvbkdldEluZGV4UHJlZGljYXRlKFJlbGF0aW9uIHJlbGF0aW9uKQog ICoJCQkJCQkJCQkoYmV3YXJlOiBldmVuIGlmIFBLIGlzIGRlZmVycmFibGUhKQogICoJSU5E RVhfQVRUUl9CSVRNQVBfSURFTlRJVFlfS0VZCUNvbHVtbnMgaW4gdGhlIHRhYmxlJ3MgcmVw bGljYSBpZGVudGl0eQogICoJCQkJCQkJCQlpbmRleCAoZW1wdHkgaWYgRlVMTCkKLSAqCUlO REVYX0FUVFJfQklUTUFQX0hPVF9CTE9DS0lORwlDb2x1bW5zIHRoYXQgYmxvY2sgdXBkYXRl cyBmcm9tIGJlaW5nIEhPVAotICoJSU5ERVhfQVRUUl9CSVRNQVBfU1VNTUFSSVpFRAlDb2x1 bW5zIGluY2x1ZGVkIGluIHN1bW1hcml6aW5nIGluZGV4ZXMKKyAqCUlOREVYX0FUVFJfQklU TUFQX1NVTU1BUklaRUQJQ29sdW1ucyBvbmx5IGluY2x1ZGVkIGluIHN1bW1hcml6aW5nIGlu ZGV4ZXMKKyAqCUlOREVYX0FUVFJfQklUTUFQX0lOREVYRUQJCUNvbHVtbnMgcmVmZXJlbmNl ZCBieSBpbmRleGVzCiAgKgogICogQXR0cmlidXRlIG51bWJlcnMgYXJlIG9mZnNldCBieSBG aXJzdExvd0ludmFsaWRIZWFwQXR0cmlidXRlTnVtYmVyIHNvIHRoYXQKICAqIHdlIGNhbiBp bmNsdWRlIHN5c3RlbSBhdHRyaWJ1dGVzIChlLmcuLCBPSUQpIGluIHRoZSBiaXRtYXAgcmVw cmVzZW50YXRpb24uCkBAIC01MzAwLDggKzUzMDAsOCBAQCBSZWxhdGlvbkdldEluZGV4QXR0 ckJpdG1hcChSZWxhdGlvbiByZWxhdGlvbiwgSW5kZXhBdHRyQml0bWFwS2luZCBhdHRyS2lu ZCkKIAlCaXRtYXBzZXQgICp1aW5kZXhhdHRyczsJLyogY29sdW1ucyBpbiB1bmlxdWUgaW5k ZXhlcyAqLwogCUJpdG1hcHNldCAgKnBraW5kZXhhdHRyczsJLyogY29sdW1ucyBpbiB0aGUg cHJpbWFyeSBpbmRleCAqLwogCUJpdG1hcHNldCAgKmlkaW5kZXhhdHRyczsJLyogY29sdW1u cyBpbiB0aGUgcmVwbGljYSBpZGVudGl0eSAqLwotCUJpdG1hcHNldCAgKmhvdGJsb2NraW5n YXR0cnM7CS8qIGNvbHVtbnMgd2l0aCBIT1QgYmxvY2tpbmcgaW5kZXhlcyAqLwotCUJpdG1h cHNldCAgKnN1bW1hcml6ZWRhdHRyczsJLyogY29sdW1ucyB3aXRoIHN1bW1hcml6aW5nIGlu ZGV4ZXMgKi8KKwlCaXRtYXBzZXQgICpzdW1tYXJpemVkYXR0cnM7CS8qIGNvbHVtbnMgb25s eSBpbiBzdW1tYXJpemluZyBpbmRleGVzICovCisJQml0bWFwc2V0ICAqaW5kZXhlZGF0dHJz OwkvKiBjb2x1bW5zIHJlZmVyZW5jZWQgYnkgaW5kZXhlcyAqLwogCUxpc3QJICAgKmluZGV4 b2lkbGlzdDsKIAlMaXN0CSAgICpuZXdpbmRleG9pZGxpc3Q7CiAJT2lkCQkJcmVscGtpbmRl eDsKQEAgLTUzMjAsMTAgKzUzMjAsMTAgQEAgUmVsYXRpb25HZXRJbmRleEF0dHJCaXRtYXAo UmVsYXRpb24gcmVsYXRpb24sIEluZGV4QXR0ckJpdG1hcEtpbmQgYXR0cktpbmQpCiAJCQkJ cmV0dXJuIGJtc19jb3B5KHJlbGF0aW9uLT5yZF9wa2F0dHIpOwogCQkJY2FzZSBJTkRFWF9B VFRSX0JJVE1BUF9JREVOVElUWV9LRVk6CiAJCQkJcmV0dXJuIGJtc19jb3B5KHJlbGF0aW9u LT5yZF9pZGF0dHIpOwotCQkJY2FzZSBJTkRFWF9BVFRSX0JJVE1BUF9IT1RfQkxPQ0tJTkc6 Ci0JCQkJcmV0dXJuIGJtc19jb3B5KHJlbGF0aW9uLT5yZF9ob3RibG9ja2luZ2F0dHIpOwog CQkJY2FzZSBJTkRFWF9BVFRSX0JJVE1BUF9TVU1NQVJJWkVEOgogCQkJCXJldHVybiBibXNf Y29weShyZWxhdGlvbi0+cmRfc3VtbWFyaXplZGF0dHIpOworCQkJY2FzZSBJTkRFWF9BVFRS X0JJVE1BUF9JTkRFWEVEOgorCQkJCXJldHVybiBibXNfY29weShyZWxhdGlvbi0+cmRfaW5k ZXhlZGF0dHIpOwogCQkJZGVmYXVsdDoKIAkJCQllbG9nKEVSUk9SLCAidW5rbm93biBhdHRy S2luZCAldSIsIGF0dHJLaW5kKTsKIAkJfQpAQCAtNTM2Niw4ICs1MzY2LDggQEAgcmVzdGFy dDoKIAl1aW5kZXhhdHRycyA9IE5VTEw7CiAJcGtpbmRleGF0dHJzID0gTlVMTDsKIAlpZGlu ZGV4YXR0cnMgPSBOVUxMOwotCWhvdGJsb2NraW5nYXR0cnMgPSBOVUxMOwogCXN1bW1hcml6 ZWRhdHRycyA9IE5VTEw7CisJaW5kZXhlZGF0dHJzID0gTlVMTDsKIAlmb3JlYWNoKGwsIGlu ZGV4b2lkbGlzdCkKIAl7CiAJCU9pZAkJCWluZGV4T2lkID0gbGZpcnN0X29pZChsKTsKQEAg LTU0MjYsNyArNTQyNiw3IEBAIHJlc3RhcnQ6CiAJCWlmIChpbmRleERlc2MtPnJkX2luZGFt LT5hbXN1bW1hcml6aW5nKQogCQkJYXR0cnMgPSAmc3VtbWFyaXplZGF0dHJzOwogCQllbHNl Ci0JCQlhdHRycyA9ICZob3RibG9ja2luZ2F0dHJzOworCQkJYXR0cnMgPSAmaW5kZXhlZGF0 dHJzOwoKIAkJLyogQ29sbGVjdCBzaW1wbGUgYXR0cmlidXRlIHJlZmVyZW5jZXMgKi8KIAkJ Zm9yIChpID0gMDsgaSA8IGluZGV4RGVzYy0+cmRfaW5kZXgtPmluZG5hdHRzOyBpKyspCkBA IC01NDM1LDkgKzU0MzUsOSBAQCByZXN0YXJ0OgoKIAkJCS8qCiAJCQkgKiBTaW5jZSB3ZSBo YXZlIGNvdmVyaW5nIGluZGV4ZXMgd2l0aCBub24ta2V5IGNvbHVtbnMsIHdlIG11c3QKLQkJ CSAqIGhhbmRsZSB0aGVtIGFjY3VyYXRlbHkgaGVyZS4gbm9uLWtleSBjb2x1bW5zIG11c3Qg YmUgYWRkZWQgaW50bwotCQkJICogaG90YmxvY2tpbmdhdHRycyBvciBzdW1tYXJpemVkYXR0 cnMsIHNpbmNlIHRoZXkgYXJlIGluIGluZGV4LAotCQkJICogYW5kIHVwZGF0ZSBzaG91bGRu J3QgbWlzcyB0aGVtLgorCQkJICogaGFuZGxlIHRoZW0gYWNjdXJhdGVseSBoZXJlLiBOb24t a2V5IGNvbHVtbnMgbXVzdCBiZSBhZGRlZCBpbnRvCisJCQkgKiBpbmRleGVkYXR0cnMgb3Ig c3VtbWFyaXplZGF0dHJzLCBzaW5jZSB0aGV5IGFyZSBpbiBpbmRleCwgYW5kCisJCQkgKiB1 cGRhdGUgc2hvdWxkbid0IG1pc3MgdGhlbS4KIAkJCSAqCiAJCQkgKiBTdW1tYXJpemluZyBp bmRleGVzIGRvIG5vdCBibG9jayBIT1QsIGJ1dCBkbyBuZWVkIHRvIGJlIHVwZGF0ZWQKIAkJ CSAqIHdoZW4gdGhlIGNvbHVtbiB2YWx1ZSBjaGFuZ2VzLCB0aHVzIHJlcXVpcmUgYSBzZXBh cmF0ZQpAQCAtNTQ5OCwxMiArNTQ5OCwyMCBAQCByZXN0YXJ0OgogCQlibXNfZnJlZSh1aW5k ZXhhdHRycyk7CiAJCWJtc19mcmVlKHBraW5kZXhhdHRycyk7CiAJCWJtc19mcmVlKGlkaW5k ZXhhdHRycyk7Ci0JCWJtc19mcmVlKGhvdGJsb2NraW5nYXR0cnMpOwogCQlibXNfZnJlZShz dW1tYXJpemVkYXR0cnMpOworCQlibXNfZnJlZShpbmRleGVkYXR0cnMpOwoKIAkJZ290byBy ZXN0YXJ0OwogCX0KCisJLyoKKwkgKiBSZWNvcmQgd2hhdCBhdHRyaWJ1dGVzIGFyZSBvbmx5 IHJlZmVyZW5jZWQgYnkgc3VtbWFyaXppbmcgaW5kZXhlcy4gVGhlbgorCSAqIGFkZCB0aGF0 IGludG8gdGhlIG90aGVyIGluZGV4ZWQgYXR0cmlidXRlcyB0byB0cmFjayBhbGwgcmVmZXJl bmNlZAorCSAqIGF0dHJpYnV0ZXMuCisJICovCisJc3VtbWFyaXplZGF0dHJzID0gYm1zX2Rl bF9tZW1iZXJzKHN1bW1hcml6ZWRhdHRycywgaW5kZXhlZGF0dHJzKTsKKwlpbmRleGVkYXR0 cnMgPSBibXNfYWRkX21lbWJlcnMoaW5kZXhlZGF0dHJzLCBzdW1tYXJpemVkYXR0cnMpOwor CiAJLyogRG9uJ3QgbGVhayB0aGUgb2xkIHZhbHVlcyBvZiB0aGVzZSBiaXRtYXBzLCBpZiBh bnkgKi8KIAlyZWxhdGlvbi0+cmRfYXR0cnN2YWxpZCA9IGZhbHNlOwogCWJtc19mcmVlKHJl bGF0aW9uLT5yZF9rZXlhdHRyKTsKQEAgLTU1MTIsMTAgKzU1MjAsMTAgQEAgcmVzdGFydDoK IAlyZWxhdGlvbi0+cmRfcGthdHRyID0gTlVMTDsKIAlibXNfZnJlZShyZWxhdGlvbi0+cmRf aWRhdHRyKTsKIAlyZWxhdGlvbi0+cmRfaWRhdHRyID0gTlVMTDsKLQlibXNfZnJlZShyZWxh dGlvbi0+cmRfaG90YmxvY2tpbmdhdHRyKTsKLQlyZWxhdGlvbi0+cmRfaG90YmxvY2tpbmdh dHRyID0gTlVMTDsKIAlibXNfZnJlZShyZWxhdGlvbi0+cmRfc3VtbWFyaXplZGF0dHIpOwog CXJlbGF0aW9uLT5yZF9zdW1tYXJpemVkYXR0ciA9IE5VTEw7CisJYm1zX2ZyZWUocmVsYXRp b24tPnJkX2luZGV4ZWRhdHRyKTsKKwlyZWxhdGlvbi0+cmRfaW5kZXhlZGF0dHIgPSBOVUxM OwoKIAkvKgogCSAqIE5vdyBzYXZlIGNvcGllcyBvZiB0aGUgYml0bWFwcyBpbiB0aGUgcmVs Y2FjaGUgZW50cnkuICBXZSBpbnRlbnRpb25hbGx5CkBAIC01NTI4LDggKzU1MzYsOCBAQCBy ZXN0YXJ0OgogCXJlbGF0aW9uLT5yZF9rZXlhdHRyID0gYm1zX2NvcHkodWluZGV4YXR0cnMp OwogCXJlbGF0aW9uLT5yZF9wa2F0dHIgPSBibXNfY29weShwa2luZGV4YXR0cnMpOwogCXJl bGF0aW9uLT5yZF9pZGF0dHIgPSBibXNfY29weShpZGluZGV4YXR0cnMpOwotCXJlbGF0aW9u LT5yZF9ob3RibG9ja2luZ2F0dHIgPSBibXNfY29weShob3RibG9ja2luZ2F0dHJzKTsKIAly ZWxhdGlvbi0+cmRfc3VtbWFyaXplZGF0dHIgPSBibXNfY29weShzdW1tYXJpemVkYXR0cnMp OworCXJlbGF0aW9uLT5yZF9pbmRleGVkYXR0ciA9IGJtc19jb3B5KGluZGV4ZWRhdHRycyk7 CiAJcmVsYXRpb24tPnJkX2F0dHJzdmFsaWQgPSB0cnVlOwogCU1lbW9yeUNvbnRleHRTd2l0 Y2hUbyhvbGRjeHQpOwoKQEAgLTU1NDIsMTAgKzU1NTAsMTAgQEAgcmVzdGFydDoKIAkJCXJl dHVybiBwa2luZGV4YXR0cnM7CiAJCWNhc2UgSU5ERVhfQVRUUl9CSVRNQVBfSURFTlRJVFlf S0VZOgogCQkJcmV0dXJuIGlkaW5kZXhhdHRyczsKLQkJY2FzZSBJTkRFWF9BVFRSX0JJVE1B UF9IT1RfQkxPQ0tJTkc6Ci0JCQlyZXR1cm4gaG90YmxvY2tpbmdhdHRyczsKIAkJY2FzZSBJ TkRFWF9BVFRSX0JJVE1BUF9TVU1NQVJJWkVEOgogCQkJcmV0dXJuIHN1bW1hcml6ZWRhdHRy czsKKwkJY2FzZSBJTkRFWF9BVFRSX0JJVE1BUF9JTkRFWEVEOgorCQkJcmV0dXJuIGluZGV4 ZWRhdHRyczsKIAkJZGVmYXVsdDoKIAkJCWVsb2coRVJST1IsICJ1bmtub3duIGF0dHJLaW5k ICV1IiwgYXR0cktpbmQpOwogCQkJcmV0dXJuIE5VTEw7CmRpZmYgLS1naXQgYS9zcmMvaW5j bHVkZS9hY2Nlc3MvaGVhcGFtLmggYi9zcmMvaW5jbHVkZS9hY2Nlc3MvaGVhcGFtLmgKaW5k ZXggM2MwOTYxYWIzNmIuLjdhYmM4ZTI0ZjIxIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9h Y2Nlc3MvaGVhcGFtLmgKKysrIGIvc3JjL2luY2x1ZGUvYWNjZXNzL2hlYXBhbS5oCkBAIC0z NjUsMTAgKzM2NSw5IEBAIGV4dGVybiBUTV9SZXN1bHQgaGVhcF9kZWxldGUoUmVsYXRpb24g cmVsYXRpb24sIGNvbnN0IEl0ZW1Qb2ludGVyRGF0YSAqdGlkLAogZXh0ZXJuIHZvaWQgaGVh cF9maW5pc2hfc3BlY3VsYXRpdmUoUmVsYXRpb24gcmVsYXRpb24sIGNvbnN0IEl0ZW1Qb2lu dGVyRGF0YSAqdGlkKTsKIGV4dGVybiB2b2lkIGhlYXBfYWJvcnRfc3BlY3VsYXRpdmUoUmVs YXRpb24gcmVsYXRpb24sIGNvbnN0IEl0ZW1Qb2ludGVyRGF0YSAqdGlkKTsKIGV4dGVybiBU TV9SZXN1bHQgaGVhcF91cGRhdGUoUmVsYXRpb24gcmVsYXRpb24sIGNvbnN0IEl0ZW1Qb2lu dGVyRGF0YSAqb3RpZCwKLQkJCQkJCQkgSGVhcFR1cGxlIG5ld3R1cCwKLQkJCQkJCQkgQ29t bWFuZElkIGNpZCwgU25hcHNob3QgY3Jvc3NjaGVjaywgYm9vbCB3YWl0LAotCQkJCQkJCSBU TV9GYWlsdXJlRGF0YSAqdG1mZCwgTG9ja1R1cGxlTW9kZSAqbG9ja21vZGUsCi0JCQkJCQkJ IFRVX1VwZGF0ZUluZGV4ZXMgKnVwZGF0ZV9pbmRleGVzKTsKKwkJCQkJCQkgSGVhcFR1cGxl IG5ld3R1cCwgQ29tbWFuZElkIGNpZCwgU25hcHNob3QgY3Jvc3NjaGVjaywgYm9vbCB3YWl0 LAorCQkJCQkJCSBUTV9GYWlsdXJlRGF0YSAqdG1mZCwgY29uc3QgTG9ja1R1cGxlTW9kZSBs b2NrbW9kZSwKKwkJCQkJCQkgY29uc3QgQml0bWFwc2V0ICptaXhfYXR0cnMsIGNvbnN0IGJv b2wgaG90X2FsbG93ZWQpOwogZXh0ZXJuIFRNX1Jlc3VsdCBoZWFwX2xvY2tfdHVwbGUoUmVs YXRpb24gcmVsYXRpb24sIEhlYXBUdXBsZSB0dXBsZSwKIAkJCQkJCQkJIENvbW1hbmRJZCBj aWQsIExvY2tUdXBsZU1vZGUgbW9kZSwgTG9ja1dhaXRQb2xpY3kgd2FpdF9wb2xpY3ksCiAJ CQkJCQkJCSBib29sIGZvbGxvd191cGRhdGVzLApAQCAtNDMwLDYgKzQyOSwxMiBAQCBleHRl cm4gdm9pZCBsb2dfaGVhcF9wcnVuZV9hbmRfZnJlZXplKFJlbGF0aW9uIHJlbGF0aW9uLCBC dWZmZXIgYnVmZmVyLAogCQkJCQkJCQkJICBPZmZzZXROdW1iZXIgKmRlYWQsIGludCBuZGVh ZCwKIAkJCQkJCQkJCSAgT2Zmc2V0TnVtYmVyICp1bnVzZWQsIGludCBudW51c2VkKTsKCisv KiBpbiBoZWFwL2hlYXBhbS5jICovCitleHRlcm4gYm9vbCBIZWFwVXBkYXRlSG90QWxsb3dh YmxlKFJlbGF0aW9uIHJlbGF0aW9uLCBjb25zdCBCaXRtYXBzZXQgKm1peF9hdHRycywKKwkJ CQkJCQkJICAgYm9vbCAqc3VtbWFyaXplZF9vbmx5KTsKK2V4dGVybiBMb2NrVHVwbGVNb2Rl IEhlYXBVcGRhdGVEZXRlcm1pbmVMb2NrbW9kZShSZWxhdGlvbiByZWxhdGlvbiwKKwkJCQkJ CQkJCQkJCSBjb25zdCBCaXRtYXBzZXQgKm1peF9hdHRycyk7CisKIC8qIGluIGhlYXAvdmFj dXVtbGF6eS5jICovCiBleHRlcm4gdm9pZCBoZWFwX3ZhY3V1bV9yZWwoUmVsYXRpb24gcmVs LAogCQkJCQkJCWNvbnN0IFZhY3V1bVBhcmFtcyBwYXJhbXMsIEJ1ZmZlckFjY2Vzc1N0cmF0 ZWd5IGJzdHJhdGVneSk7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9hY2Nlc3MvdGFibGVh bS5oIGIvc3JjL2luY2x1ZGUvYWNjZXNzL3RhYmxlYW0uaAppbmRleCAxMTk1OTNiN2I0Ni4u ZDRiMTJkYTljYWMgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2FjY2Vzcy90YWJsZWFtLmgK KysrIGIvc3JjL2luY2x1ZGUvYWNjZXNzL3RhYmxlYW0uaApAQCAtNTQ5LDYgKzU0OSw3IEBA IHR5cGVkZWYgc3RydWN0IFRhYmxlQW1Sb3V0aW5lCiAJCQkJCQkJCSBib29sIHdhaXQsCiAJ CQkJCQkJCSBUTV9GYWlsdXJlRGF0YSAqdG1mZCwKIAkJCQkJCQkJIExvY2tUdXBsZU1vZGUg KmxvY2ttb2RlLAorCQkJCQkJCQkgY29uc3QgQml0bWFwc2V0ICptaXhfYXR0cnMsCiAJCQkJ CQkJCSBUVV9VcGRhdGVJbmRleGVzICp1cGRhdGVfaW5kZXhlcyk7CgogCS8qIHNlZSB0YWJs ZV90dXBsZV9sb2NrKCkgZm9yIHJlZmVyZW5jZSBhYm91dCBwYXJhbWV0ZXJzICovCkBAIC0x NTI0LDEyICsxNTI1LDEyIEBAIHN0YXRpYyBpbmxpbmUgVE1fUmVzdWx0CiB0YWJsZV90dXBs ZV91cGRhdGUoUmVsYXRpb24gcmVsLCBJdGVtUG9pbnRlciBvdGlkLCBUdXBsZVRhYmxlU2xv dCAqc2xvdCwKIAkJCQkgICBDb21tYW5kSWQgY2lkLCBTbmFwc2hvdCBzbmFwc2hvdCwgU25h cHNob3QgY3Jvc3NjaGVjaywKIAkJCQkgICBib29sIHdhaXQsIFRNX0ZhaWx1cmVEYXRhICp0 bWZkLCBMb2NrVHVwbGVNb2RlICpsb2NrbW9kZSwKLQkJCQkgICBUVV9VcGRhdGVJbmRleGVz ICp1cGRhdGVfaW5kZXhlcykKKwkJCQkgICBjb25zdCBCaXRtYXBzZXQgKm1peF9hdHRycywg VFVfVXBkYXRlSW5kZXhlcyAqdXBkYXRlX2luZGV4ZXMpCiB7CiAJcmV0dXJuIHJlbC0+cmRf dGFibGVhbS0+dHVwbGVfdXBkYXRlKHJlbCwgb3RpZCwgc2xvdCwKIAkJCQkJCQkJCQkgY2lk LCBzbmFwc2hvdCwgY3Jvc3NjaGVjaywKLQkJCQkJCQkJCQkgd2FpdCwgdG1mZCwKLQkJCQkJ CQkJCQkgbG9ja21vZGUsIHVwZGF0ZV9pbmRleGVzKTsKKwkJCQkJCQkJCQkgd2FpdCwgdG1m ZCwgbG9ja21vZGUsCisJCQkJCQkJCQkJIG1peF9hdHRycywgdXBkYXRlX2luZGV4ZXMpOwog fQoKIC8qCkBAIC0yMDEwLDYgKzIwMTEsNyBAQCBleHRlcm4gdm9pZCBzaW1wbGVfdGFibGVf dHVwbGVfZGVsZXRlKFJlbGF0aW9uIHJlbCwgSXRlbVBvaW50ZXIgdGlkLAogCQkJCQkJCQkJ ICBTbmFwc2hvdCBzbmFwc2hvdCk7CiBleHRlcm4gdm9pZCBzaW1wbGVfdGFibGVfdHVwbGVf dXBkYXRlKFJlbGF0aW9uIHJlbCwgSXRlbVBvaW50ZXIgb3RpZCwKIAkJCQkJCQkJCSAgVHVw bGVUYWJsZVNsb3QgKnNsb3QsIFNuYXBzaG90IHNuYXBzaG90LAorCQkJCQkJCQkJICBjb25z dCBCaXRtYXBzZXQgKm1peF9hdHRycywKIAkJCQkJCQkJCSAgVFVfVXBkYXRlSW5kZXhlcyAq dXBkYXRlX2luZGV4ZXMpOwoKCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9leGVjdXRvci9l eGVjdXRvci5oIGIvc3JjL2luY2x1ZGUvZXhlY3V0b3IvZXhlY3V0b3IuaAppbmRleCBkNDZi YTU5ODk1ZC4uMjY2ZDUzMDkxMDMgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2V4ZWN1dG9y L2V4ZWN1dG9yLmgKKysrIGIvc3JjL2luY2x1ZGUvZXhlY3V0b3IvZXhlY3V0b3IuaApAQCAt MTcsNiArMTcsNyBAQAogI2luY2x1ZGUgImRhdGF0eXBlL3RpbWVzdGFtcC5oIgogI2luY2x1 ZGUgImV4ZWN1dG9yL2V4ZWNkZXNjLmgiCiAjaW5jbHVkZSAiZm1nci5oIgorI2luY2x1ZGUg Im5vZGVzL2V4ZWNub2Rlcy5oIgogI2luY2x1ZGUgIm5vZGVzL2xvY2tvcHRpb25zLmgiCiAj aW5jbHVkZSAibm9kZXMvcGFyc2Vub2Rlcy5oIgogI2luY2x1ZGUgInV0aWxzL21lbXV0aWxz LmgiCkBAIC02MDYsNiArNjA3LDEwIEBAIGV4dGVybiBUdXBsZURlc2MgRXhlY0NsZWFuVHlw ZUZyb21UTChMaXN0ICp0YXJnZXRMaXN0KTsKIGV4dGVybiBUdXBsZURlc2MgRXhlY1R5cGVG cm9tRXhwckxpc3QoTGlzdCAqZXhwckxpc3QpOwogZXh0ZXJuIHZvaWQgRXhlY1R5cGVTZXRD b2xOYW1lcyhUdXBsZURlc2MgdHlwZUluZm8sIExpc3QgKm5hbWVzTGlzdCk7CiBleHRlcm4g dm9pZCBVcGRhdGVDaGFuZ2VkUGFyYW1TZXQoUGxhblN0YXRlICpub2RlLCBCaXRtYXBzZXQg Km5ld2NoZyk7CitleHRlcm4gQml0bWFwc2V0ICpFeGVjQ29tcGFyZVNsb3RBdHRycyhUdXBs ZURlc2MgdHVwZGVzYywKKwkJCQkJCQkJCSAgIGNvbnN0IEJpdG1hcHNldCAqYXR0cnMsCisJ CQkJCQkJCQkgICBUdXBsZVRhYmxlU2xvdCAqb2xkX3R0cywKKwkJCQkJCQkJCSAgIFR1cGxl VGFibGVTbG90ICpuZXdfdHRzKTsKCiB0eXBlZGVmIHN0cnVjdCBUdXBPdXRwdXRTdGF0ZQog ewpAQCAtODAzLDUgKzgwOCw5IEBAIGV4dGVybiBSZXN1bHRSZWxJbmZvICpFeGVjTG9va3Vw UmVzdWx0UmVsQnlPaWQoTW9kaWZ5VGFibGVTdGF0ZSAqbm9kZSwKIAkJCQkJCQkJCQkJICAg T2lkIHJlc3VsdG9pZCwKIAkJCQkJCQkJCQkJICAgYm9vbCBtaXNzaW5nX29rLAogCQkJCQkJ CQkJCQkgICBib29sIHVwZGF0ZV9jYWNoZSk7CitleHRlcm4gQml0bWFwc2V0ICpFeGVjVXBk YXRlTW9kSWR4QXR0cnMoUmVzdWx0UmVsSW5mbyAqcmVsaW5mbywKKwkJCQkJCQkJCQlFU3Rh dGUgKmVzdGF0ZSwKKwkJCQkJCQkJCQlUdXBsZVRhYmxlU2xvdCAqb2xkX3R0cywKKwkJCQkJ CQkJCQlUdXBsZVRhYmxlU2xvdCAqbmV3X3R0cyk7CgogI2VuZGlmCQkJCQkJCS8qIEVYRUNV VE9SX0ggICovCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS91dGlscy9yZWwuaCBiL3NyYy9p bmNsdWRlL3V0aWxzL3JlbC5oCmluZGV4IDIzNjgzMGY2YjkzLi4xMGU1ZTkwNDRlZSAxMDA2 NDQKLS0tIGEvc3JjL2luY2x1ZGUvdXRpbHMvcmVsLmgKKysrIGIvc3JjL2luY2x1ZGUvdXRp bHMvcmVsLmgKQEAgLTE2Miw4ICsxNjIsOCBAQCB0eXBlZGVmIHN0cnVjdCBSZWxhdGlvbkRh dGEKIAlCaXRtYXBzZXQgICpyZF9rZXlhdHRyOwkJLyogY29scyB0aGF0IGNhbiBiZSByZWYn ZCBieSBmb3JlaWduIGtleXMgKi8KIAlCaXRtYXBzZXQgICpyZF9wa2F0dHI7CQkvKiBjb2xz IGluY2x1ZGVkIGluIHByaW1hcnkga2V5ICovCiAJQml0bWFwc2V0ICAqcmRfaWRhdHRyOwkJ LyogaW5jbHVkZWQgaW4gcmVwbGljYSBpZGVudGl0eSBpbmRleCAqLwotCUJpdG1hcHNldCAg KnJkX2hvdGJsb2NraW5nYXR0cjsgLyogY29scyBibG9ja2luZyBIT1QgdXBkYXRlICovCiAJ Qml0bWFwc2V0ICAqcmRfc3VtbWFyaXplZGF0dHI7CS8qIGNvbHMgaW5kZXhlZCBieSBzdW1t YXJpemluZyBpbmRleGVzICovCisJQml0bWFwc2V0ICAqcmRfaW5kZXhlZGF0dHI7IC8qIGFs bCBjb2xzIHJlZmVyZW5jZWQgYnkgaW5kZXhlcyAqLwoKIAlQdWJsaWNhdGlvbkRlc2MgKnJk X3B1YmRlc2M7CS8qIHB1YmxpY2F0aW9uIGRlc2NyaXB0b3IsIG9yIE5VTEwgKi8KCmRpZmYg LS1naXQgYS9zcmMvaW5jbHVkZS91dGlscy9yZWxjYWNoZS5oIGIvc3JjL2luY2x1ZGUvdXRp bHMvcmVsY2FjaGUuaAppbmRleCAyNzAwMjI0OTM5YS4uNTdiNDZlZTU0ZTUgMTAwNjQ0Ci0t LSBhL3NyYy9pbmNsdWRlL3V0aWxzL3JlbGNhY2hlLmgKKysrIGIvc3JjL2luY2x1ZGUvdXRp bHMvcmVsY2FjaGUuaApAQCAtNjksOCArNjksOCBAQCB0eXBlZGVmIGVudW0gSW5kZXhBdHRy Qml0bWFwS2luZAogCUlOREVYX0FUVFJfQklUTUFQX0tFWSwKIAlJTkRFWF9BVFRSX0JJVE1B UF9QUklNQVJZX0tFWSwKIAlJTkRFWF9BVFRSX0JJVE1BUF9JREVOVElUWV9LRVksCi0JSU5E RVhfQVRUUl9CSVRNQVBfSE9UX0JMT0NLSU5HLAogCUlOREVYX0FUVFJfQklUTUFQX1NVTU1B UklaRUQsCisJSU5ERVhfQVRUUl9CSVRNQVBfSU5ERVhFRCwKIH0gSW5kZXhBdHRyQml0bWFw S2luZDsKCiBleHRlcm4gQml0bWFwc2V0ICpSZWxhdGlvbkdldEluZGV4QXR0ckJpdG1hcChS ZWxhdGlvbiByZWxhdGlvbiwKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0 ZWQvZ2VuZXJhdGVkX3ZpcnR1YWwub3V0IGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9n ZW5lcmF0ZWRfdmlydHVhbC5vdXQKaW5kZXggNmRhYjYwYzkzN2IuLjdlYmI3ODkwZDk2IDEw MDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2dlbmVyYXRlZF92aXJ0dWFs Lm91dAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2dlbmVyYXRlZF92aXJ0dWFs Lm91dApAQCAtMjg3LDcgKzI4Nyw3IEBAIERFVEFJTDogIENvbHVtbiAiYiIgaXMgYSBnZW5l cmF0ZWQgY29sdW1uLgogSU5TRVJUIElOVE8gZ3Rlc3QxdiBWQUxVRVMgKDgsIERFRkFVTFQp LCAoOSwgREVGQVVMVCk7ICAtLSBlcnJvcgogRVJST1I6ICBjYW5ub3QgaW5zZXJ0IGEgbm9u LURFRkFVTFQgdmFsdWUgaW50byBjb2x1bW4gImIiCiBERVRBSUw6ICBDb2x1bW4gImIiIGlz IGEgZ2VuZXJhdGVkIGNvbHVtbi4KLVNFTEVDVCAqIEZST00gZ3Rlc3QxdjsKK1NFTEVDVCAq IEZST00gZ3Rlc3QxdiBPUkRFUiBCWSBhOwogIGEgfCBiCiAtLS0rLS0tLQogIDMgfCAgNgpk aWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC91cGRhdGFibGVfdmlld3Mu b3V0IGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC91cGRhdGFibGVfdmlld3Mub3V0Cmlu ZGV4IDljZWE1MzhiOGU4Li40ODc3YTFkZGNlOSAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVn cmVzcy9leHBlY3RlZC91cGRhdGFibGVfdmlld3Mub3V0CisrKyBiL3NyYy90ZXN0L3JlZ3Jl c3MvZXhwZWN0ZWQvdXBkYXRhYmxlX3ZpZXdzLm91dApAQCAtMzcyLDE1ICszNzIsMTUgQEAg SU5TRVJUIElOVE8gcndfdmlldzE2IChhLCBiKSBWQUxVRVMgKDMsICdSb3cgMycpOyAtLSBz aG91bGQgYmUgT0sKIFVQREFURSByd192aWV3MTYgU0VUIGE9MywgYWE9LTMgV0hFUkUgYT0z OyAtLSBzaG91bGQgZmFpbAogRVJST1I6ICBtdWx0aXBsZSBhc3NpZ25tZW50cyB0byBzYW1l IGNvbHVtbiAiYSIKIFVQREFURSByd192aWV3MTYgU0VUIGFhPS0zIFdIRVJFIGE9MzsgLS0g c2hvdWxkIGJlIE9LCi1TRUxFQ1QgKiBGUk9NIGJhc2VfdGJsOworU0VMRUNUICogRlJPTSBi YXNlX3RibCBPUkRFUiBCWSBhOwogIGEgIHwgICBiCiAtLS0tKy0tLS0tLS0tCisgLTMgfCBS b3cgMwogIC0yIHwgUm93IC0yCiAgLTEgfCBSb3cgLTEKICAgMCB8IFJvdyAwCiAgIDEgfCBS b3cgMQogICAyIHwgUm93IDIKLSAtMyB8IFJvdyAzCiAoNiByb3dzKQoKIERFTEVURSBGUk9N IHJ3X3ZpZXcxNiBXSEVSRSBhPS0zOyAtLSBzaG91bGQgYmUgT0sKZGlmZiAtLWdpdCBhL3Ny Yy90ZXN0L3JlZ3Jlc3Mvc3FsL2dlbmVyYXRlZF92aXJ0dWFsLnNxbCBiL3NyYy90ZXN0L3Jl Z3Jlc3Mvc3FsL2dlbmVyYXRlZF92aXJ0dWFsLnNxbAppbmRleCBlNzUwODY2ZDJkOC4uODc3 MTUyZDZkNjkgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2dlbmVyYXRlZF92 aXJ0dWFsLnNxbAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9nZW5lcmF0ZWRfdmlydHVh bC5zcWwKQEAgLTEyNyw3ICsxMjcsNyBAQCBBTFRFUiBWSUVXIGd0ZXN0MXYgQUxURVIgQ09M VU1OIGIgU0VUIERFRkFVTFQgMTAwOwogSU5TRVJUIElOVE8gZ3Rlc3QxdiBWQUxVRVMgKDgs IERFRkFVTFQpOyAgLS0gZXJyb3IKIElOU0VSVCBJTlRPIGd0ZXN0MXYgVkFMVUVTICg4LCBE RUZBVUxUKSwgKDksIERFRkFVTFQpOyAgLS0gZXJyb3IKCi1TRUxFQ1QgKiBGUk9NIGd0ZXN0 MXY7CitTRUxFQ1QgKiBGUk9NIGd0ZXN0MXYgT1JERVIgQlkgYTsKIERFTEVURSBGUk9NIGd0 ZXN0MXYgV0hFUkUgYSA+PSA1OwogRFJPUCBWSUVXIGd0ZXN0MXY7CgpkaWZmIC0tZ2l0IGEv c3JjL3Rlc3QvcmVncmVzcy9zcWwvdXBkYXRhYmxlX3ZpZXdzLnNxbCBiL3NyYy90ZXN0L3Jl Z3Jlc3Mvc3FsL3VwZGF0YWJsZV92aWV3cy5zcWwKaW5kZXggMTYzNWFkZGUyZDQuLjE2MGU3 Nzk5NzE1IDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL3NxbC91cGRhdGFibGVfdmll d3Muc3FsCisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3VwZGF0YWJsZV92aWV3cy5zcWwK QEAgLTEyNSw3ICsxMjUsNyBAQCBJTlNFUlQgSU5UTyByd192aWV3MTYgVkFMVUVTICgzLCAn Um93IDMnLCAzKTsgLS0gc2hvdWxkIGZhaWwKIElOU0VSVCBJTlRPIHJ3X3ZpZXcxNiAoYSwg YikgVkFMVUVTICgzLCAnUm93IDMnKTsgLS0gc2hvdWxkIGJlIE9LCiBVUERBVEUgcndfdmll dzE2IFNFVCBhPTMsIGFhPS0zIFdIRVJFIGE9MzsgLS0gc2hvdWxkIGZhaWwKIFVQREFURSBy d192aWV3MTYgU0VUIGFhPS0zIFdIRVJFIGE9MzsgLS0gc2hvdWxkIGJlIE9LCi1TRUxFQ1Qg KiBGUk9NIGJhc2VfdGJsOworU0VMRUNUICogRlJPTSBiYXNlX3RibCBPUkRFUiBCWSBhOwog REVMRVRFIEZST00gcndfdmlldzE2IFdIRVJFIGE9LTM7IC0tIHNob3VsZCBiZSBPSwogLS0g UmVhZC1vbmx5IHZpZXdzCiBJTlNFUlQgSU5UTyByb192aWV3MTcgVkFMVUVTICgzLCAnUk9X IDMnKTsKLS0KMi41MS4yCgo= --f893d3fc92324816820a9ab769f8f3a7 Content-Disposition: attachment; filename="perf-cf5556-v30.sh" Content-Type: application/x-shellscript; name="perf-cf5556-v30.sh" Content-Transfer-Encoding: base64 IyEvdXNyL2Jpbi9lbnYgYmFzaAojIENGLTU1NTYgUG9zdGdyZVNRTCBQZXJmb3JtYW5jZSBU ZXN0IFN1aXRlCiMgVGVzdHMgcGF0Y2hlcyB0aGF0IGlkZW50aWZ5IG1vZGlmaWVkIGluZGV4 ZWQgYXR0cmlidXRlcyBiZWZvcmUgYWNxdWlyaW5nIGV4Y2x1c2l2ZSBsb2NrcwojIEVuaGFu Y2VkIHdpdGggY29uY3VycmVudCByZWFkL3dyaXRlIHByZXNzdXJlIGFuYWx5c2lzCgpzZXQg LXUKCiMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PQojIENPTkZJR1VSQVRJT04KIyA9PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09CgpyZWFkb25seSBURVNUX0RVUkFUSU9OPSIke1RFU1RfRFVSQVRJ T046LTYwfSIKcmVhZG9ubHkgQ0xJRU5UUz0iJHtDTElFTlRTOi04fSIKcmVhZG9ubHkgSk9C Uz0iJHtKT0JTOi00fSIKcmVhZG9ubHkgV09SS0RJUj0iJHtXT1JLRElSOi0kKHB3ZCl9Igpy ZWFkb25seSBFWFRfRElSPSIke0VYVF9ESVI6LSR7V09SS0RJUn0vLi59IgpyZWFkb25seSBS RVNVTFRTX0JBU0U9Ii90bXAvY2Y1NTU2LXBlcmYtcmVzdWx0cyIKcmVhZG9ubHkgUkVTVUxU U19ESVI9IiR7UkVTVUxUU19CQVNFfS8kKGRhdGUgKyVZJW0lZF8lSCVNJVMpIgoKU0VUVVBf RVhURU5TSU9OUz0wClRFU1RfRVhURU5TSU9OUz0wCgojID09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT0KIyBBUkdVTUVOVCBQQVJTSU5HCiMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKd2hpbGUg WyAkIyAtZ3QgMCBdOyBkbwogICAgY2FzZSAiJDEiIGluCiAgICAgICAgLS1zZXR1cC1leHRl bnNpb25zKSBTRVRVUF9FWFRFTlNJT05TPTE7IHNoaWZ0IDs7CiAgICAgICAgLS10ZXN0LWV4 dGVuc2lvbnMpICBURVNUX0VYVEVOU0lPTlM9MTsgc2hpZnQgOzsKICAgICAgICAtLWhlbHB8 LWgpCiAgICAgICAgICAgIGNhdCA8PCdIRUxQJwpVc2FnZTogLi9wZXJmLWNmNTU1Ni5zaCBb T1BUSU9OU10KCk9wdGlvbnM6CiAgLS1zZXR1cC1leHRlbnNpb25zICAgIENsb25lLCBidWls ZCBhbmQgaW5zdGFsbCBhbGwgZXh0ZW5zaW9ucwogIC0tdGVzdC1leHRlbnNpb25zICAgICBJ bmNsdWRlIGV4dGVuc2lvbi1iYXNlZCB0ZXN0cwogIC0taGVscCAgICAgICAgICAgICAgICBT aG93IHRoaXMgaGVscCBtZXNzYWdlCgpFbnZpcm9ubWVudCBWYXJpYWJsZXM6CiAgVEVTVF9E VVJBVElPTiAgICAgICAgIER1cmF0aW9uIG9mIGVhY2ggdGVzdCBpbiBzZWNvbmRzIChkZWZh dWx0OiA2MCkKICBDTElFTlRTICAgICAgICAgICAgICAgTnVtYmVyIG9mIHBnYmVuY2ggY2xp ZW50cyAoZGVmYXVsdDogOCkKICBKT0JTICAgICAgICAgICAgICAgICAgTnVtYmVyIG9mIHBn YmVuY2ggam9icyAoZGVmYXVsdDogNCkKICBXT1JLRElSICAgICAgICAgICAgICAgV29ya2lu ZyBkaXJlY3RvcnkgKGRlZmF1bHQ6IGN1cnJlbnQgZGlyZWN0b3J5KQogIEVYVF9ESVIgICAg ICAgICAgICAgICBEaXJlY3RvcnkgY29udGFpbmluZyBleHRlbnNpb24gc291cmNlcwpIRUxQ CiAgICAgICAgICAgIGV4aXQgMAogICAgICAgICAgICA7OwogICAgICAgICopIGVjaG8gIlVu a25vd24gYXJndW1lbnQ6ICQxLiBVc2UgLS1oZWxwIGZvciB1c2FnZS4iOyBleGl0IDEgOzsK ICAgIGVzYWMKZG9uZQoKIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiMgVVRJTElUWSBGVU5D VElPTlMKIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cgpsb2dfaW5mbygpIHsgZWNobyAiICAk KiI7IH0KbG9nX2Vycm9yKCkgeyBlY2hvICIgIOKclyAkKiIgPiYyOyB9CmxvZ19zdWNjZXNz KCkgeyBlY2hvICIgIOKckyAkKiI7IH0KbG9nX3dhcm4oKSB7IGVjaG8gIiAg4pqgICQqIjsg fQpsb2dfc2VjdGlvbigpIHsgZWNobyAiIjsgZWNobyAi4pSB4pSB4pSB4pSB4pSB4pSB4pSB 4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB 4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB 4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB 4pSB4pSB4pSB4pSB4pSBIjsgZWNobyAiICAkKiI7IGVjaG8gIuKUgeKUgeKUgeKUgeKUgeKU geKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKU geKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKU geKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKU geKUgeKUgeKUgeKUgeKUgeKUgSI7IH0KbG9nX2hlYWRlcigpIHsgZWNobyAiIjsgZWNobyAi 4pWU4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ 4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ 4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ 4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWXIjsgZWNo byAi4pWRICAkKiI7IGVjaG8gIuKVmuKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKV kOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKV kOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKV kOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKV kOKVkOKVkOKVkOKVnSI7IH0KCmRldGVjdF9nbWFrZSgpIHsKICAgIGxvY2FsIGNtZAogICAg Zm9yIGNtZCBpbiBnbWFrZSBtYWtlOyBkbwogICAgICAgIGlmIGNvbW1hbmQgLXYgIiRjbWQi ID4vZGV2L251bGwgMj4mMSAmJiAiJGNtZCIgLS12ZXJzaW9uIDI+L2Rldi9udWxsIHwgZ3Jl cCAtcSAiR05VIE1ha2UiOyB0aGVuCiAgICAgICAgICAgIGVjaG8gIiRjbWQiCiAgICAgICAg ICAgIHJldHVybiAwCiAgICAgICAgZmkKICAgIGRvbmUKICAgIHJldHVybiAxCn0KCnByb21w dF95bigpIHsKICAgIGxvY2FsIG1lc3NhZ2U9JDEgZGVmYXVsdD0kezI6LW59CiAgICBbICEg LXQgMCBdICYmIHsgWyAiJGRlZmF1bHQiID0gInkiIF0gJiYgcmV0dXJuIDAgfHwgcmV0dXJu IDE7IH0KICAgIGxvY2FsIHByb21wdDsgWyAiJGRlZmF1bHQiID0gInkiIF0gJiYgcHJvbXB0 PSJbWS9uXSIgfHwgcHJvbXB0PSJbeS9OXSIKICAgIHByaW50ZiAiICAgICVzICVzOiAiICIk bWVzc2FnZSIgIiRwcm9tcHQiCiAgICByZWFkIC1yIGFuc3dlciA8IC9kZXYvdHR5IHx8IGFu c3dlcj0iIgogICAgY2FzZSAiJChlY2hvICIkYW5zd2VyIiB8IHRyICdbOnVwcGVyOl0nICdb Omxvd2VyOl0nKSIgaW4KICAgICAgICB5fHllcykgcmV0dXJuIDAgOzsgbnxubykgcmV0dXJu IDEgOzsKICAgICAgICAiIikgWyAiJGRlZmF1bHQiID0gInkiIF0gJiYgcmV0dXJuIDAgfHwg cmV0dXJuIDEgOzsKICAgICAgICAqKSByZXR1cm4gMSA7OwogICAgZXNhYwp9CgojID09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT0KIyBDTEVBTlVQICYgU0FGRVRZCiMgPT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PQoKY2hlY2tfcG9zdGdyZXNfbm90X3J1bm5pbmcoKSB7CiAgICBsb2dfaW5mbyAi Q2hlY2tpbmcgZm9yIHJ1bm5pbmcgUG9zdGdyZVNRTCBpbnN0YW5jZXMuLi4iCiAgICBpZiBw Z3JlcCAteCBwb3N0Z3JlcyA+IC9kZXYvbnVsbCAyPiYxOyB0aGVuCiAgICAgICAgbG9nX2Vy cm9yICJQb3N0Z3JlU1FMIGlzIGFscmVhZHkgcnVubmluZy4gU3RvcCBpdCBmaXJzdC4iCiAg ICAgICAgcGdyZXAgLWEgcG9zdGdyZXMgfHwgdHJ1ZQogICAgICAgIGV4aXQgMQogICAgZmkK ICAgIGxvZ19zdWNjZXNzICJObyBvdGhlciBQb3N0Z3JlU1FMIGluc3RhbmNlcyBydW5uaW5n Igp9CgpjbGVhbnVwKCkgewogICAgbG9jYWwgcmM9JD8KICAgIGVjaG8gIiIKICAgIGxvZ19p bmZvICJDbGVhbmluZyB1cC4uLiIKICAgIHBraWxsIC05IHBvc3RncmVzID4gL2Rldi9udWxs IDI+JjEgfHwgdHJ1ZQogICAgc2xlZXAgMQogICAgcm0gLXJmIC90bXAvcGdkYXRhXyogMj4v ZGV2L251bGwgfHwgdHJ1ZQogICAgbG9nX3N1Y2Nlc3MgIkNsZWFudXAgY29tcGxldGUiCiAg ICBleGl0ICRyYwp9Cgp0cmFwIGNsZWFudXAgRVhJVCBJTlQgVEVSTQoKIyA9PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09CiMgRVhURU5TSU9OIE1BTkFHRU1FTlQKIyA9PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09CgpkZWNsYXJlIC1BIEVYVF9VUkxTPSgKICAgIFtwZ19zdGF0X2tjYWNoZV09Imh0 dHBzOi8vZ2l0aHViLmNvbS9wb3dhLXRlYW0vcGdfc3RhdF9rY2FjaGUuZ2l0IgogICAgW3Bn X2pvYm1vbl09Imh0dHBzOi8vZ2l0aHViLmNvbS9vbW5pdGktbGFicy9wZ19qb2Jtb24uZ2l0 IgogICAgW3BnX3BhcnRtYW5dPSJodHRwczovL2dpdGh1Yi5jb20vcGdwYXJ0bWFuL3BnX3Bh cnRtYW4uZ2l0IgogICAgW3BndmVjdG9yXT0iaHR0cHM6Ly9naXRodWIuY29tL3BndmVjdG9y L3BndmVjdG9yLmdpdCIKICAgIFtkb2N1bWVudGRiXT0iaHR0cHM6Ly9naXRodWIuY29tL2Rv Y3VtZW50ZGIvZG9jdW1lbnRkYi5naXQiCikKCmRlY2xhcmUgLUEgRVhUX0FWQUlMQUJMRT0o KQpkZWNsYXJlIC1BIEVYVF9CVUlMVD0oKQoKY2hlY2tfYW5kX2Nsb25lX2V4dGVuc2lvbnMo KSB7CiAgICBsb2dfaW5mbyAiQ2hlY2tpbmcgZXh0ZW5zaW9uIHNvdXJjZXMuLi4iCiAgICBl Y2hvICIiCgogICAgZm9yIGV4dCBpbiBwZ19zdGF0X2tjYWNoZSBwZ19qb2Jtb24gcGdfcGFy dG1hbiBwZ3ZlY3RvciBkb2N1bWVudGRiOyBkbwogICAgICAgIGxvY2FsIHVybD0iJHtFWFRf VVJMU1skZXh0XX0iIGRpcj0iJEVYVF9ESVIvJGV4dCIKCiAgICAgICAgaWYgWyAtZCAiJGRp ciIgXTsgdGhlbgogICAgICAgICAgICBsb2dfc3VjY2VzcyAiJGV4dCBmb3VuZCBhdCAkZGly IgogICAgICAgICAgICBFWFRfQVZBSUxBQkxFWyRleHRdPTEKICAgICAgICBlbHNlCiAgICAg ICAgICAgIGxvZ193YXJuICIkZXh0IG5vdCBmb3VuZCBhdCAkZGlyIgogICAgICAgICAgICBp ZiBwcm9tcHRfeW4gIkNsb25lICRleHQgZnJvbSAkdXJsPyI7IHRoZW4KICAgICAgICAgICAg ICAgIG1rZGlyIC1wICIkRVhUX0RJUiIKICAgICAgICAgICAgICAgIGxvY2FsIGNsb25lX2xv Zz0iJFJFU1VMVFNfRElSLyR7ZXh0fV9jbG9uZS5sb2ciCiAgICAgICAgICAgICAgICBwcmlu dGYgIiAgICBDbG9uaW5nLi4uICIKICAgICAgICAgICAgICAgIGlmIGdpdCBjbG9uZSAtLWRl cHRoIDEgIiR1cmwiICIkZGlyIiA+ICIkY2xvbmVfbG9nIiAyPiYxOyB0aGVuCiAgICAgICAg ICAgICAgICAgICAgZWNobyAi4pyTIgogICAgICAgICAgICAgICAgICAgIEVYVF9BVkFJTEFC TEVbJGV4dF09MQogICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgIGVj aG8gIuKclyIKICAgICAgICAgICAgICAgICAgICB0YWlsIC0zICIkY2xvbmVfbG9nIiAyPi9k ZXYvbnVsbCB8IHNlZCAncy9eLyAgICAgIC8nCiAgICAgICAgICAgICAgICAgICAgRVhUX0FW QUlMQUJMRVskZXh0XT0wCiAgICAgICAgICAgICAgICBmaQogICAgICAgICAgICBlbHNlCiAg ICAgICAgICAgICAgICBsb2dfaW5mbyAiU2tpcHBpbmcgJGV4dCIKICAgICAgICAgICAgICAg IEVYVF9BVkFJTEFCTEVbJGV4dF09MAogICAgICAgICAgICBmaQogICAgICAgIGZpCiAgICBk b25lCiAgICBlY2hvICIiCn0KCmJ1aWxkX2V4dGVuc2lvbigpIHsKICAgIGxvY2FsIGV4dD0k MSBpbnN0YWxsX2Rpcj0kMiBsb2c9JDMKCiAgICBbICIke0VYVF9BVkFJTEFCTEVbJGV4dF06 LTB9IiAtbmUgMSBdICYmIHsgZWNobyAic2tpcHBlZCI7IHJldHVybiAwOyB9CgogICAgOiA+ ICIkbG9nIgoKICAgIGNhc2UgIiRleHQiIGluCiAgICAgICAgcGdfc3RhdF9rY2FjaGV8cGdf am9ibW9ufHBnX3BhcnRtYW58cGd2ZWN0b3IpCiAgICAgICAgICAgICgKICAgICAgICAgICAg ICAgIGV4cG9ydCBQQVRIPSIkaW5zdGFsbF9kaXIvYmluOiRQQVRIIgogICAgICAgICAgICAg ICAgY2QgIiRFWFRfRElSLyRleHQiIDI+L2Rldi9udWxsIHx8IHJldHVybiAxCiAgICAgICAg ICAgICAgICAiJEdNQUtFIiBjbGVhbiA+PiAiJGxvZyIgMj4mMSB8fCB0cnVlCiAgICAgICAg ICAgICAgICAiJEdNQUtFIiBVU0VfUEdYUz0xIFBHX0NPTkZJRz0iJGluc3RhbGxfZGlyL2Jp bi9wZ19jb25maWciID4+ICIkbG9nIiAyPiYxIHx8IHJldHVybiAxCiAgICAgICAgICAgICAg ICAiJEdNQUtFIiBVU0VfUEdYUz0xIFBHX0NPTkZJRz0iJGluc3RhbGxfZGlyL2Jpbi9wZ19j b25maWciIGluc3RhbGwgPj4gIiRsb2ciIDI+JjEgfHwgcmV0dXJuIDEKICAgICAgICAgICAg KSB8fCByZXR1cm4gMQogICAgICAgICAgICA7OwogICAgICAgIGRvY3VtZW50ZGIpCiAgICAg ICAgICAgICgKICAgICAgICAgICAgICAgIGV4cG9ydCBQQVRIPSIkaW5zdGFsbF9kaXIvYmlu OiRQQVRIIgogICAgICAgICAgICAgICAgY2QgIiRFWFRfRElSLyRleHQiIDI+L2Rldi9udWxs IHx8IHJldHVybiAxCiAgICAgICAgICAgICAgICBsb2NhbCBidWlsdD0wCiAgICAgICAgICAg ICAgICBmb3Igc3ViZGlyIGluIHBnX2RvY3VtZW50ZGJfY29yZSBwZ19kb2N1bWVudGRiOyBk bwogICAgICAgICAgICAgICAgICAgIGlmIFsgLWQgIiRzdWJkaXIiIF0gJiYgWyAtZiAiJHN1 YmRpci9NYWtlZmlsZSIgXTsgdGhlbgogICAgICAgICAgICAgICAgICAgICAgICAoCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICBjZCAiJHN1YmRpciIKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICIkR01BS0UiIGNsZWFuID4+ICIkbG9nIiAyPiYxIHx8IHRydWUKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICIkR01BS0UiIFVTRV9QR1hTPTEgUEdfQ09ORklHPSIk aW5zdGFsbF9kaXIvYmluL3BnX2NvbmZpZyIgPj4gIiRsb2ciIDI+JjEgfHwgdHJ1ZQogICAg ICAgICAgICAgICAgICAgICAgICAgICAgIiRHTUFLRSIgVVNFX1BHWFM9MSBQR19DT05GSUc9 IiRpbnN0YWxsX2Rpci9iaW4vcGdfY29uZmlnIiBpbnN0YWxsID4+ICIkbG9nIiAyPiYxIHx8 IHRydWUKICAgICAgICAgICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgICAgICAg ICBidWlsdD0xCiAgICAgICAgICAgICAgICAgICAgZmkKICAgICAgICAgICAgICAgIGRvbmUK ICAgICAgICAgICAgICAgIFsgJGJ1aWx0IC1lcSAwIF0gJiYgcmV0dXJuIDEKICAgICAgICAg ICAgKSB8fCByZXR1cm4gMQogICAgICAgICAgICA7OwogICAgZXNhYwoKICAgIHJldHVybiAw Cn0KCmJ1aWxkX2FsbF9leHRlbnNpb25zKCkgewogICAgbG9jYWwgdmVyc2lvbj0kMSBpbnN0 YWxsX2Rpcj0kMgogICAgbG9nX2luZm8gIkJ1aWxkaW5nIGV4dGVuc2lvbnMuLi4iCgogICAg Zm9yIGV4dCBpbiBwZ19zdGF0X2tjYWNoZSBwZ19qb2Jtb24gcGdfcGFydG1hbiBwZ3ZlY3Rv ciBkb2N1bWVudGRiOyBkbwogICAgICAgIEVYVF9CVUlMVFskZXh0XT0wCiAgICAgICAgbG9j YWwgbG9nPSIkUkVTVUxUU19ESVIvJHt2ZXJzaW9ufV8ke2V4dH1fYnVpbGQubG9nIgogICAg ICAgIHByaW50ZiAiICAgICUtMjBzIiAiJGV4dC4uLiIKICAgICAgICBpZiBidWlsZF9leHRl bnNpb24gIiRleHQiICIkaW5zdGFsbF9kaXIiICIkbG9nIjsgdGhlbgogICAgICAgICAgICBl Y2hvICLinJMiCiAgICAgICAgICAgIEVYVF9CVUlMVFskZXh0XT0xCiAgICAgICAgZWxzZQog ICAgICAgICAgICBlY2hvICLinJciCiAgICAgICAgZmkKICAgIGRvbmUKICAgIGVjaG8gIiIK fQoKIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09CiMgREFUQUJBU0UgU0VUVVAKIyA9PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09Cgpwc3FsX2V4ZWMoKSB7CiAgICBsb2NhbCBpbnN0YWxsX2Rpcj0k MSBkYj0kMiBsb2c9JDMKICAgICIkaW5zdGFsbF9kaXIvYmluL3BzcWwiIC1YIC1BIC10IC1x IC1kICIkZGIiID4+ICIkbG9nIiAyPiYxCn0KCmNyZWF0ZV9saWNlbnNlX3RhYmxlKCkgewog ICAgbG9jYWwgaW5zdGFsbF9kaXI9JDEgZGI9JDIgbG9nPSQzCgogICAgbG9nX2luZm8gIkNy ZWF0aW5nIGRyaXZlcl9saWNlbnNlIHRhYmxlICgxMDBrIHJvd3MsIDUgQlRSRUUgaW5kZXhl cykuLi4iCgogICAgcHNxbF9leGVjICIkaW5zdGFsbF9kaXIiICIkZGIiICIkbG9nIiA8PCdT UUwnCkRST1AgVEFCTEUgSUYgRVhJU1RTIGRyaXZlcl9saWNlbnNlIENBU0NBREU7CkNSRUFU RSBUQUJMRSBkcml2ZXJfbGljZW5zZSAoCiAgICBpZCAgICAgICBVVUlEIE5PVCBOVUxMIERF RkFVTFQgZ2VuX3JhbmRvbV91dWlkKCksCiAgICBzZXFfaWQgICBJTlQgIE5PVCBOVUxMLAog ICAgbGljZW5zZV9kYXRhIEpTT05CIE5PVCBOVUxMLAogICAgUFJJTUFSWSBLRVkgKGlkKQop OwpDUkVBVEUgSU5ERVggaWR4X2xpY19zZXEgICAgICAgT04gZHJpdmVyX2xpY2Vuc2UgVVNJ TkcgYnRyZWUgKHNlcV9pZCk7CkNSRUFURSBJTkRFWCBpZHhfbGljX2xhc3RfbmFtZSBPTiBk cml2ZXJfbGljZW5zZSBVU0lORyBidHJlZSAoKGxpY2Vuc2VfZGF0YS0+PidsYXN0X25hbWUn KSk7CkNSRUFURSBJTkRFWCBpZHhfbGljX2ZpcnN0X3NkeCBPTiBkcml2ZXJfbGljZW5zZSBV U0lORyBidHJlZSAoc291bmRleChsaWNlbnNlX2RhdGEtPj4nZmlyc3RfbmFtZScpKTsKQ1JF QVRFIElOREVYIGlkeF9saWNfbGFzdF9zZHggIE9OIGRyaXZlcl9saWNlbnNlIFVTSU5HIGJ0 cmVlIChzb3VuZGV4KGxpY2Vuc2VfZGF0YS0+PidsYXN0X25hbWUnKSk7CkNSRUFURSBVTklR VUUgSU5ERVggaWR4X2xpY19zc24gT04gZHJpdmVyX2xpY2Vuc2UgVVNJTkcgYnRyZWUgKChs aWNlbnNlX2RhdGEtPj4nc3NuJykpOwpTUUwKCiAgICBwc3FsX2V4ZWMgIiRpbnN0YWxsX2Rp ciIgIiRkYiIgIiRsb2ciIDw8J1NRTCcKSU5TRVJUIElOVE8gZHJpdmVyX2xpY2Vuc2UgKHNl cV9pZCwgbGljZW5zZV9kYXRhKQpTRUxFQ1QgaSwKICAgIGpzb25iX2J1aWxkX29iamVjdCgK ICAgICAgICAnZmlyc3RfbmFtZScsIChBUlJBWVsnSm9obicsJ0phbmUnLCdCb2InLCdBbGlj ZScsJ0NoYXJsaWUnXSlbZmxvb3IocmFuZG9tKCkqNSkrMV0sCiAgICAgICAgJ2xhc3RfbmFt ZScsICAoQVJSQVlbJ1NtaXRoJywnSm9obnNvbicsJ1dpbGxpYW1zJywnQnJvd24nLCdKb25l cyddKVtmbG9vcihyYW5kb20oKSo1KSsxXSwKICAgICAgICAnc3NuJywgICAgICAgIGxwYWQo aTo6dGV4dCwgOSwgJzAnKSwKICAgICAgICAnbGljZW5zZV9pZCcsICdMSUMnIHx8IGxwYWQo aTo6dGV4dCwgMTIsICcwJyksCiAgICAgICAgJ2JpcnRoX2RhdGUnLCAobm93KCkgLSAoKDE1 ICsgcmFuZG9tKCkqNTUpICogaW50ZXJ2YWwgJzEgeWVhcicpKTo6ZGF0ZTo6dGV4dCwKICAg ICAgICAnYWRkcmVzcycsICAgICcxMjMgTWFpbiBTdCcsCiAgICAgICAgJ2hlaWdodCcsICAg ICAoNjAgKyByYW5kb20oKSoxMik6OmludCwKICAgICAgICAnd2VpZ2h0JywgICAgICgxMDAg KyByYW5kb20oKSoyMDApOjppbnQsCiAgICAgICAgJ2V5ZV9jb2xvcicsICAoQVJSQVlbJ0Jy b3duJywnQmx1ZScsJ0dyZWVuJywnSGF6ZWwnXSlbZmxvb3IocmFuZG9tKCkqNCkrMV0sCiAg ICAgICAgJ2hhaXJfY29sb3InLCAoQVJSQVlbJ0Jyb3duJywnQmxhY2snLCdCbG9uZGUnLCdS ZWQnLCdHcmF5J10pW2Zsb29yKHJhbmRvbSgpKjUpKzFdLAogICAgICAgICdleHBpcmVzX2Rh dGUnLChub3coKSArIHJhbmRvbSgpICogaW50ZXJ2YWwgJzEwIHllYXJzJyk6OmRhdGU6OnRl eHQsCiAgICAgICAgJ2lzc3VlZF9kYXRlJywgKG5vdygpIC0gcmFuZG9tKCkgKiBpbnRlcnZh bCAnNSB5ZWFycycpOjpkYXRlOjp0ZXh0CiAgICApCkZST00gZ2VuZXJhdGVfc2VyaWVzKDEs IDEwMDAwMCkgQVMgaTsKVkFDVVVNIEFOQUxZWkUgZHJpdmVyX2xpY2Vuc2U7ClNRTAoKICAg IGxvY2FsIGNudD0kKCIkaW5zdGFsbF9kaXIvYmluL3BzcWwiIC1YIC10IC1BIC1kICIkZGIi IC1jICJTRUxFQ1QgY291bnQoKikgRlJPTSBkcml2ZXJfbGljZW5zZTsiIDI+L2Rldi9udWxs IHx8IGVjaG8gIjAiKQogICAgaWYgWyAiJHtjbnQ6LTB9IiAtZ3QgMCBdOyB0aGVuCiAgICAg ICAgbG9nX3N1Y2Nlc3MgImRyaXZlcl9saWNlbnNlIHJlYWR5ICgkY250IHJvd3MpIgogICAg ICAgIHJldHVybiAwCiAgICBlbHNlCiAgICAgICAgbG9nX2Vycm9yICJkcml2ZXJfbGljZW5z ZSBoYXMgbm8gZGF0YSIKICAgICAgICByZXR1cm4gMQogICAgZmkKfQoKY3JlYXRlX2pzb25i X3RhYmxlKCkgewogICAgbG9jYWwgaW5zdGFsbF9kaXI9JDEgZGI9JDIgbG9nPSQzCgogICAg bG9nX2luZm8gIkNyZWF0aW5nIHRfanNvbmIgdGFibGUgKDEwayByb3dzLCAzIEJUUkVFIGV4 cHJlc3Npb24gaW5kZXhlcykuLi4iCgogICAgcHNxbF9leGVjICIkaW5zdGFsbF9kaXIiICIk ZGIiICIkbG9nIiA8PCdTUUwnCkRST1AgVEFCTEUgSUYgRVhJU1RTIHRfanNvbmIgQ0FTQ0FE RTsKQ1JFQVRFIFRBQkxFIHRfanNvbmIgKGlkIElOVCBQUklNQVJZIEtFWSwgZGF0YSBKU09O QiBOT1QgTlVMTCk7CkNSRUFURSBJTkRFWCBpZHhfanNvbmJfY2F0ICAgIE9OIHRfanNvbmIg VVNJTkcgYnRyZWUgKChkYXRhLT4+J2NhdGVnb3J5JykpOwpDUkVBVEUgSU5ERVggaWR4X2pz b25iX3JlZ2lvbiBPTiB0X2pzb25iIFVTSU5HIGJ0cmVlICgoZGF0YS0+PidyZWdpb24nKSk7 CkNSRUFURSBJTkRFWCBpZHhfanNvbmJfc2NvcmUgIE9OIHRfanNvbmIgVVNJTkcgYnRyZWUg KCgoZGF0YS0+PidzY29yZScpOjppbnQpKTsKSU5TRVJUIElOVE8gdF9qc29uYgpTRUxFQ1Qg aSwganNvbmJfYnVpbGRfb2JqZWN0KAogICAgJ2NhdGVnb3J5JywgKEFSUkFZWydBJywnQics J0MnLCdEJ10pW2Zsb29yKHJhbmRvbSgpKjQpKzFdLAogICAgJ3JlZ2lvbicsICAgKEFSUkFZ Wyd1cy1lYXN0JywndXMtd2VzdCcsJ2V1LXdlc3QnLCdhcC1zb3V0aCddKVtmbG9vcihyYW5k b20oKSo0KSsxXSwKICAgICdzY29yZScsICAgIGZsb29yKHJhbmRvbSgpKjEwMDApOjppbnQs CiAgICAndmFsdWUnLCAgICAwCikgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwgMTAwMDApIGk7 ClZBQ1VVTSBBTkFMWVpFIHRfanNvbmI7ClNRTAogICAgbG9nX3N1Y2Nlc3MgInRfanNvbmIg cmVhZHkgKDEwayByb3dzKSIKfQoKY3JlYXRlX2dpbl90YWJsZSgpIHsKICAgIGxvY2FsIGlu c3RhbGxfZGlyPSQxIGRiPSQyIGxvZz0kMwoKICAgIGxvZ19pbmZvICJDcmVhdGluZyB0X2dp biB0YWJsZSAoMTBrIHJvd3MsIEdJTiBpbmRleCDigJQgY29udHJvbCkuLi4iCgogICAgcHNx bF9leGVjICIkaW5zdGFsbF9kaXIiICIkZGIiICIkbG9nIiA8PCdTUUwnCkRST1AgVEFCTEUg SUYgRVhJU1RTIHRfZ2luIENBU0NBREU7CkNSRUFURSBUQUJMRSB0X2dpbiAoaWQgSU5UIFBS SU1BUlkgS0VZLCBkYXRhIEpTT05CIE5PVCBOVUxMKTsKQ1JFQVRFIElOREVYIGlkeF9naW5f dGFncyBPTiB0X2dpbiBVU0lORyBHSU4gKChkYXRhLT4ndGFncycpKTsKSU5TRVJUIElOVE8g dF9naW4KU0VMRUNUIGksIGpzb25iX2J1aWxkX29iamVjdCgndGFncycsIGpzb25iX2J1aWxk X2FycmF5KCdwb3N0Z3JlcycsJ3NxbCcpLCAnY291bnRlcicsIDApCkZST00gZ2VuZXJhdGVf c2VyaWVzKDEsIDEwMDAwKSBpOwpWQUNVVU0gQU5BTFlaRSB0X2dpbjsKU1FMCiAgICBsb2df c3VjY2VzcyAidF9naW4gcmVhZHkgKDEwayByb3dzLCBHSU4g4oCUIGNvbnRyb2wpIgp9Cgoj ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT0KIyBTRVJWRVIgTUFOQUdFTUVOVAojID09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT0KCndyaXRlX3BnX2NvbmZpZygpIHsKICAgIGxvY2FsIGRhdGFkaXI9 JDEgc3BsPSQyCiAgICBjYXQgPiAiJGRhdGFkaXIvcG9zdGdyZXNxbC5jb25mIiA8PFBHQ09O RgphdXRvdmFjdXVtID0gb2ZmCm1heF9jb25uZWN0aW9ucyA9IDEwMApzaGFyZWRfYnVmZmVy cyA9IDI1Nk1CCndvcmtfbWVtID0gMTZNQgptYWludGVuYW5jZV93b3JrX21lbSA9IDEyOE1C CndhbF9sZXZlbCA9IG1pbmltYWwKbWF4X3dhbF9zZW5kZXJzID0gMApmc3luYyA9IG9mZgpz eW5jaHJvbm91c19jb21taXQgPSBvZmYKZnVsbF9wYWdlX3dyaXRlcyA9IG9mZgpjaGVja3Bv aW50X2NvbXBsZXRpb25fdGFyZ2V0ID0gMC45ClBHQ09ORgogICAgWyAtbiAiJHNwbCIgXSAm JiBlY2hvICJzaGFyZWRfcHJlbG9hZF9saWJyYXJpZXMgPSAnJHNwbCciID4+ICIkZGF0YWRp ci9wb3N0Z3Jlc3FsLmNvbmYiCn0KCnN0YXJ0X3NlcnZlcigpIHsKICAgIGxvY2FsIGluc3Rh bGxfZGlyPSQxIGRhdGFkaXI9JDIgc3BsPSQzIHNlcnZlcl9sb2c9JDQKCiAgICB3cml0ZV9w Z19jb25maWcgIiRkYXRhZGlyIiAiJHNwbCIKCiAgICBpZiAhICIkaW5zdGFsbF9kaXIvYmlu L3BnX2N0bCIgLUQgIiRkYXRhZGlyIiAtbCAiJHNlcnZlcl9sb2ciIHN0YXJ0ID4gL2Rldi9u dWxsIDI+JjE7IHRoZW4KICAgICAgICBsb2dfZXJyb3IgIlNlcnZlciBmYWlsZWQgdG8gc3Rh cnQuIENoZWNrICRzZXJ2ZXJfbG9nIgogICAgICAgIGNhdCAiJHNlcnZlcl9sb2ciIHwgaGVh ZCAtMjAgfCBzZWQgJ3MvXi8gICAgLycKICAgICAgICByZXR1cm4gMQogICAgZmkKCiAgICBz bGVlcCAyCgogICAgaWYgISAiJGluc3RhbGxfZGlyL2Jpbi9wc3FsIiAtWCAtZCBwb3N0Z3Jl cyAtYyAiU0VMRUNUIDE7IiA+IC9kZXYvbnVsbCAyPiYxOyB0aGVuCiAgICAgICAgbG9nX2Vy cm9yICJTZXJ2ZXIgc3RhcnRlZCBidXQgbm90IHJlc3BvbmRpbmcuIENoZWNrICRzZXJ2ZXJf bG9nIgogICAgICAgIGNhdCAiJHNlcnZlcl9sb2ciIHwgaGVhZCAtMjAgfCBzZWQgJ3MvXi8g ICAgLycKICAgICAgICByZXR1cm4gMQogICAgZmkKCiAgICBsb2dfc3VjY2VzcyAiU2VydmVy IHN0YXJ0ZWQiCiAgICBbIC1uICIkc3BsIiBdICYmIGxvZ19pbmZvICJzaGFyZWRfcHJlbG9h ZF9saWJyYXJpZXM6ICRzcGwiCiAgICByZXR1cm4gMAp9CgojID09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT0KIyBURVNUIEVYRUNVVElPTgojID09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCmV4dHJh Y3RfdHBzKCkgewogICAgbG9jYWwgZmlsZT0kMQogICAgZ3JlcCAiXnRwcyA9ICIgIiRmaWxl IiAyPi9kZXYvbnVsbCB8IHRhaWwgLTEgfCBhd2sgJ3twcmludCAkM30nIHx8IGVjaG8gIjAi Cn0KCmV4dHJhY3RfbGF0ZW5jeSgpIHsKICAgIGxvY2FsIGZpbGU9JDEKICAgIGdyZXAgIl5s YXRlbmN5IGF2ZXJhZ2UiICIkZmlsZSIgMj4vZGV2L251bGwgfCBhd2sgJ3twcmludCAkNH0n IHx8IGVjaG8gIjAiCn0KCnJ1bl90ZXN0KCkgewogICAgbG9jYWwgdmVyc2lvbj0kMSBpbnN0 YWxsX2Rpcj0kMiB0YWJsZT0kMyB3b3JrbG9hZD0kNCBsb2c9JDUKICAgIGxvY2FsIGRiPSIk e3RhYmxlfV9kYiIKCiAgICAiJGluc3RhbGxfZGlyL2Jpbi9wc3FsIiAtWCAtZCAiJGRiIiAt YyAiVkFDVVVNIEFOQUxZWkU7IiA+PiAiJGxvZyIgMj4mMSB8fCB0cnVlCgogICAgbG9jYWwg b3V0cHV0X2ZpbGU9IiRSRVNVTFRTX0RJUi8ke3ZlcnNpb259XyR7dGFibGV9XyR7d29ya2xv YWR9LnR4dCIKCiAgICAjIFJ1biBwZ2JlbmNoIHdpdGggZXhwbGljaXQgb3V0cHV0CiAgICBp ZiBbICIkd29ya2xvYWQiID0gInRwY2ItbGlrZSIgXSB8fCBbICIkd29ya2xvYWQiID0gInNp bXBsZS11cGRhdGUiIF07IHRoZW4KICAgICAgICAiJGluc3RhbGxfZGlyL2Jpbi9wZ2JlbmNo IiAtbiAtYyAiJENMSUVOVFMiIC1qICIkSk9CUyIgLVQgIiRURVNUX0RVUkFUSU9OIiBcCiAg ICAgICAgICAgICIkZGIiID4gIiRvdXRwdXRfZmlsZSIgMj4mMSB8fCB0cnVlCiAgICBlbHNl CiAgICAgICAgIiRpbnN0YWxsX2Rpci9iaW4vcGdiZW5jaCIgLW4gLWMgIiRDTElFTlRTIiAt aiAiJEpPQlMiIC1UICIkVEVTVF9EVVJBVElPTiIgXAogICAgICAgICAgICAtZiAiJFJFU1VM VFNfRElSLyR7dGFibGV9XyR7d29ya2xvYWR9LnNxbCIgIiRkYiIgPiAiJG91dHB1dF9maWxl IiAyPiYxIHx8IHRydWUKICAgIGZpCgogICAgIyBFeHRyYWN0IFRQUyBhbmQgbGF0ZW5jeQog ICAgbG9jYWwgdHBzPSQoZXh0cmFjdF90cHMgIiRvdXRwdXRfZmlsZSIpCiAgICBsb2NhbCBs YXQ9JChleHRyYWN0X2xhdGVuY3kgIiRvdXRwdXRfZmlsZSIpCgogICAgcHJpbnRmICIgICAg JS00MHMgVFBTOiAlLTEwcyBMYXQ6ICUtOHNcbiIgIiR7dGFibGV9XyR7d29ya2xvYWR9IiAi JHRwcyIgIiR7bGF0fW1zIgoKICAgICMgU3RvcmUgZm9yIGxhdGVyIGFuYWx5c2lzCiAgICBl Y2hvICIkdmVyc2lvbnwkdGFibGV8JHdvcmtsb2FkfCR0cHN8JGxhdCIgPj4gIiRSRVNVTFRT X0RJUi9yZXN1bHRzLnR4dCIKfQoKcnVuX2NvbmN1cnJlbnRfdGVzdCgpIHsKICAgIGxvY2Fs IHZlcnNpb249JDEgaW5zdGFsbF9kaXI9JDIgdGFibGU9JDMgd3JpdGVfY2xpZW50cz0kNCBy ZWFkX2NsaWVudHM9JDUgbG9nPSQ2CiAgICBsb2NhbCBkYj0iJHt0YWJsZX1fZGIiCiAgICBs b2NhbCB0b3RhbF9jbGllbnRzPSQoKHdyaXRlX2NsaWVudHMgKyByZWFkX2NsaWVudHMpKQoK ICAgICIkaW5zdGFsbF9kaXIvYmluL3BzcWwiIC1YIC1kICIkZGIiIC1jICJWQUNVVU0gQU5B TFlaRTsiID4+ICIkbG9nIiAyPiYxIHx8IHRydWUKCiAgICBsb2NhbCB3cml0ZV9vdXRwdXQ9 IiRSRVNVTFRTX0RJUi8ke3ZlcnNpb259XyR7dGFibGV9X2NvbmN1cnJlbnRfJHt3cml0ZV9j bGllbnRzfXdfJHtyZWFkX2NsaWVudHN9cl93cml0ZS50eHQiCiAgICBsb2NhbCByZWFkX291 dHB1dD0iJFJFU1VMVFNfRElSLyR7dmVyc2lvbn1fJHt0YWJsZX1fY29uY3VycmVudF8ke3dy aXRlX2NsaWVudHN9d18ke3JlYWRfY2xpZW50c31yX3JlYWQudHh0IgoKICAgIGxvZ19pbmZv ICJSdW5uaW5nIGNvbmN1cnJlbnQgdGVzdDogJHdyaXRlX2NsaWVudHMgd3JpdGVycyArICRy ZWFkX2NsaWVudHMgcmVhZGVycy4uLiIKCiAgICAjIFN0YXJ0IHdyaXRlIHdvcmtsb2FkIGlu IGJhY2tncm91bmQKICAgICIkaW5zdGFsbF9kaXIvYmluL3BnYmVuY2giIC1uIC1jICIkd3Jp dGVfY2xpZW50cyIgLWogIiRKT0JTIiAtVCAiJFRFU1RfRFVSQVRJT04iIFwKICAgICAgICAt ZiAiJFJFU1VMVFNfRElSLyR7dGFibGV9X3dyaXRlX2NvbmN1cnJlbnQuc3FsIiAiJGRiIiA+ ICIkd3JpdGVfb3V0cHV0IiAyPiYxICYKICAgIGxvY2FsIHdyaXRlX3BpZD0kIQoKICAgICMg R2l2ZSB3cml0ZXJzIGEgbW9tZW50IHRvIHN0YXJ0CiAgICBzbGVlcCAxCgogICAgIyBSdW4g cmVhZCB3b3JrbG9hZCBjb25jdXJyZW50bHkKICAgICIkaW5zdGFsbF9kaXIvYmluL3BnYmVu Y2giIC1uIC1jICIkcmVhZF9jbGllbnRzIiAtaiAiJEpPQlMiIC1UICIkKChURVNUX0RVUkFU SU9OIC0gMikpIiBcCiAgICAgICAgLWYgIiRSRVNVTFRTX0RJUi8ke3RhYmxlfV9yZWFkX2Nv bmN1cnJlbnQuc3FsIiAiJGRiIiA+ICIkcmVhZF9vdXRwdXQiIDI+JjEgJgogICAgbG9jYWwg cmVhZF9waWQ9JCEKCiAgICAjIFdhaXQgZm9yIGJvdGggdG8gY29tcGxldGUKICAgIHdhaXQg JHdyaXRlX3BpZCAyPi9kZXYvbnVsbCB8fCB0cnVlCiAgICB3YWl0ICRyZWFkX3BpZCAyPi9k ZXYvbnVsbCB8fCB0cnVlCgogICAgIyBFeHRyYWN0IG1ldHJpY3MKICAgIGxvY2FsIHdyaXRl X3Rwcz0kKGV4dHJhY3RfdHBzICIkd3JpdGVfb3V0cHV0IikKICAgIGxvY2FsIHdyaXRlX2xh dD0kKGV4dHJhY3RfbGF0ZW5jeSAiJHdyaXRlX291dHB1dCIpCiAgICBsb2NhbCByZWFkX3Rw cz0kKGV4dHJhY3RfdHBzICIkcmVhZF9vdXRwdXQiKQogICAgbG9jYWwgcmVhZF9sYXQ9JChl eHRyYWN0X2xhdGVuY3kgIiRyZWFkX291dHB1dCIpCgogICAgcHJpbnRmICIgICAgJS00MHMg V3JpdGU6ICUtOHMgVFBTICBSZWFkOiAlLThzIFRQU1xuIiAiJHt0YWJsZX1fJHt3cml0ZV9j bGllbnRzfXdfJHtyZWFkX2NsaWVudHN9ciIgIiR3cml0ZV90cHMiICIkcmVhZF90cHMiCiAg ICBwcmludGYgIiAgICAlLTQwcyBXcml0ZTogJS04cyBtcyAgIFJlYWQ6ICUtOHMgbXNcbiIg IiIgIiR3cml0ZV9sYXQiICIkcmVhZF9sYXQiCgogICAgIyBTdG9yZSBmb3IgbGF0ZXIgYW5h bHlzaXMKICAgIGVjaG8gIiR2ZXJzaW9ufCR0YWJsZXxjb25jdXJyZW50XyR7d3JpdGVfY2xp ZW50c313XyR7cmVhZF9jbGllbnRzfXJfd3JpdGV8JHdyaXRlX3Rwc3wkd3JpdGVfbGF0IiA+ PiAiJFJFU1VMVFNfRElSL3Jlc3VsdHMudHh0IgogICAgZWNobyAiJHZlcnNpb258JHRhYmxl fGNvbmN1cnJlbnRfJHt3cml0ZV9jbGllbnRzfXdfJHtyZWFkX2NsaWVudHN9cl9yZWFkfCRy ZWFkX3Rwc3wkcmVhZF9sYXQiID4+ICIkUkVTVUxUU19ESVIvcmVzdWx0cy50eHQiCn0KCiMg PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PQojIE1BSU4gRVhFQ1VUSU9OCiMgPT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PQoKbWtkaXIgLXAgIiRSRVNVTFRTX0RJUiIKY2QgIiRXT1JLRElSIgoKY2hl Y2tfcG9zdGdyZXNfbm90X3J1bm5pbmcKCmlmICEgR01BS0U9JChkZXRlY3RfZ21ha2UpOyB0 aGVuCiAgICBsb2dfZXJyb3IgIkdOVSBNYWtlIG5vdCBmb3VuZCIKICAgIGV4aXQgMQpmaQoK bG9nX2hlYWRlciAiQ0YtNTU1NiBQRVJGT1JNQU5DRSBURVNUIFNVSVRFIgoKbG9nX2luZm8g IkNvbmZpZ3VyYXRpb246Igpsb2dfaW5mbyAiICBUZXN0IGR1cmF0aW9uICAgICA6ICR7VEVT VF9EVVJBVElPTn1zIgpsb2dfaW5mbyAiICBDbGllbnRzIC8gSm9icyAgICA6ICRDTElFTlRT IC8gJEpPQlMiCmxvZ19pbmZvICIgIFJlc3VsdHMgZGlyZWN0b3J5IDogJFJFU1VMVFNfRElS Igpsb2dfaW5mbyAiICBTZXR1cCBleHRlbnNpb25zICA6ICQoWyAiJFNFVFVQX0VYVEVOU0lP TlMiIC1lcSAxIF0gJiYgZWNobyAiWUVTIiB8fCBlY2hvICJOTyIpIgpsb2dfaW5mbyAiICBU ZXN0IGV4dGVuc2lvbnMgICA6ICQoWyAiJFRFU1RfRVhURU5TSU9OUyIgLWVxIDEgXSAmJiBl Y2hvICJZRVMiIHx8IGVjaG8gIk5PIikiCmVjaG8gIiIKCiMgPT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PQojIEVYVEVOU0lPTiBTRVRVUAojID09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCmlmIFsg IiRTRVRVUF9FWFRFTlNJT05TIiAtZXEgMSBdOyB0aGVuCiAgICBsb2dfc2VjdGlvbiAiRVhU RU5TSU9OIFNFVFVQIgogICAgY2hlY2tfYW5kX2Nsb25lX2V4dGVuc2lvbnMKZmkKCiMgPT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PQojIEdJVCBTRVRVUCBQSEFTRQojID09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT0KCkJBU0VMSU5FX0NPTU1JVD0kKGdpdCByZXYtcGFyc2UgLS1zaG9ydD0xMSBv cmlnaW4vbWFzdGVyKQpQQVRDSEVTPSgkKGxzIC0xIHYqLSoucGF0Y2ggMj4vZGV2L251bGwg fCBzb3J0KSkKWyAkeyNQQVRDSEVTW0BdfSAtZXEgMCBdICYmIHsgbG9nX2Vycm9yICJObyB2 Ki0qLnBhdGNoIGZpbGVzIGZvdW5kIjsgZXhpdCAxOyB9CgpnaXQgc3Rhc2ggLXEgMj4vZGV2 L251bGwgfHwgdHJ1ZQpnaXQgYnJhbmNoIC1EIGNmLTU1NTYtdGVzdC0qIDI+L2Rldi9udWxs IHx8IHRydWUKZ2l0IGNoZWNrb3V0IC1xIG9yaWdpbi9tYXN0ZXIKCmxvZ19zZWN0aW9uICJC VUlMRElORyBBTkQgVEVTVElORyIKbG9nX2luZm8gIkJhc2VsaW5lOiAkQkFTRUxJTkVfQ09N TUlUIChvcmlnaW4vbWFzdGVyKSIKbG9nX2luZm8gIlBhdGNoZXM6ICAkeyNQQVRDSEVTW0Bd fSBwYXRjaChlcykgdG8gdGVzdCBjdW11bGF0aXZlbHkiCmVjaG8gIiIKCnBraWxsIC05IHBv c3RncmVzID4gL2Rldi9udWxsIDI+JjEgfHwgdHJ1ZQpzbGVlcCAyCnJtIC1yZiAvdG1wL3Bn ZGF0YV8qIDI+L2Rldi9udWxsIHx8IHRydWUKCjogPiAiJFJFU1VMVFNfRElSL3Jlc3VsdHMu dHh0IgoKIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiMgQlVJTEQgQU5EIFRFU1QgUEhBU0UK IyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09Cgp0ZXN0X3ZlcnNpb24oKSB7CiAgICBsb2NhbCB2 ZXJzaW9uPSQxIGNvbW1pdD0kMgogICAgbG9jYWwgY29tbWl0X3Nob3J0OyBjb21taXRfc2hv cnQ9JChnaXQgcmV2LXBhcnNlIC0tc2hvcnQ9MTEgIiRjb21taXQiKQogICAgbG9jYWwgYnVp bGRfZGlyPSIkV09SS0RJUi9idWlsZC0ke2NvbW1pdF9zaG9ydH0iCiAgICBsb2NhbCBpbnN0 YWxsX2Rpcj0iJFdPUktESVIvaW5zdGFsbC0ke2NvbW1pdF9zaG9ydH0iCiAgICBsb2NhbCBk YXRhZGlyPSIvdG1wL3BnZGF0YV8ke3ZlcnNpb259IgogICAgbG9jYWwgc2VydmVyX2xvZz0i JFJFU1VMVFNfRElSLyR7dmVyc2lvbn1fc2VydmVyLmxvZyIKICAgIGxvY2FsIHNldHVwX2xv Zz0iJFJFU1VMVFNfRElSLyR7dmVyc2lvbn1fc2V0dXAubG9nIgoKICAgIGxvZ19zZWN0aW9u ICJWRVJTSU9OOiAkdmVyc2lvbiAoJGNvbW1pdF9zaG9ydCkiCgogICAgZ2l0IGNoZWNrb3V0 IC1xICIkY29tbWl0IgoKICAgICMgQnVpbGQgUG9zdGdyZVNRTAogICAgaWYgWyAtZCAiJGlu c3RhbGxfZGlyIiBdICYmIFsgLWYgIiRpbnN0YWxsX2Rpci9iaW4vcG9zdGdyZXMiIF07IHRo ZW4KICAgICAgICBsb2dfc3VjY2VzcyAiVXNpbmcgY2FjaGVkIGJ1aWxkIgogICAgZWxzZQog ICAgICAgIGxvZ19pbmZvICJCdWlsZGluZyBQb3N0Z3JlU1FMLi4uIgogICAgICAgIGxvY2Fs IGJsb2c9IiRSRVNVTFRTX0RJUi8ke3ZlcnNpb259X2J1aWxkLmxvZyIKICAgICAgICBybSAt cmYgIiRidWlsZF9kaXIiCiAgICAgICAgaWYgISBtZXNvbiBzZXR1cCAtLWJ1aWxkdHlwZT1y ZWxlYXNlIC1EcmVhZGxpbmU9ZGlzYWJsZWQgXAogICAgICAgICAgICAtLXByZWZpeD0iJGlu c3RhbGxfZGlyIiAiJGJ1aWxkX2RpciIgIiRXT1JLRElSIiA+ICIkYmxvZyIgMj4mMTsgdGhl bgogICAgICAgICAgICBsb2dfZXJyb3IgIk1lc29uIHNldHVwIGZhaWxlZC4gQ2hlY2sgJGJs b2ciCiAgICAgICAgICAgIHRhaWwgLTEwICIkYmxvZyIgfCBzZWQgJ3MvXi8gICAgLycKICAg ICAgICAgICAgZXhpdCAxCiAgICAgICAgZmkKICAgICAgICBpZiAhIG1lc29uIGNvbXBpbGUg LUMgIiRidWlsZF9kaXIiID4+ICIkYmxvZyIgMj4mMTsgdGhlbgogICAgICAgICAgICBsb2df ZXJyb3IgIk1lc29uIGNvbXBpbGUgZmFpbGVkLiBDaGVjayAkYmxvZyIKICAgICAgICAgICAg dGFpbCAtMTAgIiRibG9nIiB8IHNlZCAncy9eLyAgICAvJwogICAgICAgICAgICBleGl0IDEK ICAgICAgICBmaQogICAgICAgIGlmICEgbWVzb24gaW5zdGFsbCAtQyAiJGJ1aWxkX2RpciIg Pj4gIiRibG9nIiAyPiYxOyB0aGVuCiAgICAgICAgICAgIGxvZ19lcnJvciAiTWVzb24gaW5z dGFsbCBmYWlsZWQuIENoZWNrICRibG9nIgogICAgICAgICAgICB0YWlsIC0xMCAiJGJsb2ci IHwgc2VkICdzL14vICAgIC8nCiAgICAgICAgICAgIGV4aXQgMQogICAgICAgIGZpCiAgICAg ICAgbG9nX3N1Y2Nlc3MgIlBvc3RncmVTUUwgYnVpbHQiCiAgICBmaQoKICAgICMgQnVpbGQg ZXh0ZW5zaW9ucyBpZiByZXF1ZXN0ZWQKICAgIGlmIFsgIiRTRVRVUF9FWFRFTlNJT05TIiAt ZXEgMSBdOyB0aGVuCiAgICAgICAgYnVpbGRfYWxsX2V4dGVuc2lvbnMgIiR2ZXJzaW9uIiAi JGluc3RhbGxfZGlyIgogICAgZmkKCiAgICAjIFN0YXJ0IHNlcnZlcgogICAgbG9nX2luZm8g IlN0YXJ0aW5nIHNlcnZlci4uLiIKICAgIHBraWxsIC05IHBvc3RncmVzID4gL2Rldi9udWxs IDI+JjEgfHwgdHJ1ZQogICAgc2xlZXAgMQogICAgcm0gLXJmICIkZGF0YWRpciIKICAgICIk aW5zdGFsbF9kaXIvYmluL2luaXRkYiIgLUQgIiRkYXRhZGlyIiA+IC9kZXYvbnVsbCAyPiYx CgogICAgaWYgISBzdGFydF9zZXJ2ZXIgIiRpbnN0YWxsX2RpciIgIiRkYXRhZGlyIiAicGdf c3RhdF9zdGF0ZW1lbnRzIiAiJHNlcnZlcl9sb2ciOyB0aGVuCiAgICAgICAgZXhpdCAxCiAg ICBmaQoKICAgICMgQ3JlYXRlIHRlc3QgZGF0YWJhc2VzIGFuZCB0YWJsZXMKICAgIGxvZ19p bmZvICJTZXR0aW5nIHVwIHRlc3QgZGF0YWJhc2VzLi4uIgogICAgOiA+ICIkc2V0dXBfbG9n IgoKICAgICIkaW5zdGFsbF9kaXIvYmluL2NyZWF0ZWRiIiAibGljZW5zZV9kYiIgMj4vZGV2 L251bGwgfHwgdHJ1ZQogICAgcHNxbF9leGVjICIkaW5zdGFsbF9kaXIiICJsaWNlbnNlX2Ri IiAiJHNldHVwX2xvZyIgPDwnU1FMJwpDUkVBVEUgRVhURU5TSU9OIElGIE5PVCBFWElTVFMg ZnV6enlzdHJtYXRjaCBDQVNDQURFOwpDUkVBVEUgRVhURU5TSU9OIElGIE5PVCBFWElTVFMg cGdfc3RhdF9zdGF0ZW1lbnRzIENBU0NBREU7ClNRTAoKICAgIGlmICEgY3JlYXRlX2xpY2Vu c2VfdGFibGUgIiRpbnN0YWxsX2RpciIgImxpY2Vuc2VfZGIiICIkc2V0dXBfbG9nIjsgdGhl bgogICAgICAgIGxvZ19lcnJvciAiRmFpbGVkIHRvIGNyZWF0ZSBsaWNlbnNlIHRhYmxlIgog ICAgICAgIGV4aXQgMQogICAgZmkKCiAgICAiJGluc3RhbGxfZGlyL2Jpbi9jcmVhdGVkYiIg Impzb25iX2RiIiAyPi9kZXYvbnVsbCB8fCB0cnVlCiAgICBwc3FsX2V4ZWMgIiRpbnN0YWxs X2RpciIgImpzb25iX2RiIiAiJHNldHVwX2xvZyIgPDwnU1FMJwpDUkVBVEUgRVhURU5TSU9O IElGIE5PVCBFWElTVFMgcGdfc3RhdF9zdGF0ZW1lbnRzIENBU0NBREU7ClNRTAogICAgY3Jl YXRlX2pzb25iX3RhYmxlICIkaW5zdGFsbF9kaXIiICJqc29uYl9kYiIgIiRzZXR1cF9sb2ci CgogICAgIiRpbnN0YWxsX2Rpci9iaW4vY3JlYXRlZGIiICJnaW5fZGIiIDI+L2Rldi9udWxs IHx8IHRydWUKICAgIHBzcWxfZXhlYyAiJGluc3RhbGxfZGlyIiAiZ2luX2RiIiAiJHNldHVw X2xvZyIgPDwnU1FMJwpDUkVBVEUgRVhURU5TSU9OIElGIE5PVCBFWElTVFMgcGdfc3RhdF9z dGF0ZW1lbnRzIENBU0NBREU7ClNRTAogICAgY3JlYXRlX2dpbl90YWJsZSAiJGluc3RhbGxf ZGlyIiAiZ2luX2RiIiAiJHNldHVwX2xvZyIKCiAgICAjIFNldHVwIHBnYmVuY2ggZGF0YWJh c2UKICAgICIkaW5zdGFsbF9kaXIvYmluL2NyZWF0ZWRiIiAicGdiZW5jaF9kYiIgMj4vZGV2 L251bGwgfHwgdHJ1ZQogICAgIiRpbnN0YWxsX2Rpci9iaW4vcGdiZW5jaCIgLWkgLXMgMTAg InBnYmVuY2hfZGIiID4+ICIkc2V0dXBfbG9nIiAyPiYxCgogICAgZWNobyAiIgogICAgbG9n X2luZm8gIlJ1bm5pbmcgaXNvbGF0ZWQgdGVzdHMgKCR7VEVTVF9EVVJBVElPTn1zIGVhY2gp Li4uIgogICAgZWNobyAiIgoKICAgICMgR2VuZXJhdGUgY3VzdG9tIHRlc3QgU1FMIHNjcmlw dHMKICAgIGNhdCA+ICIkUkVTVUxUU19ESVIvbGljZW5zZV93cml0ZV9zaW5nbGUuc3FsIiA8 PCdTUUwnClxzZXQgcm93X2lkIHJhbmRvbSgxLCAxMDAwMDApClVQREFURSBkcml2ZXJfbGlj ZW5zZSBTRVQgbGljZW5zZV9kYXRhID0ganNvbmJfc2V0KGxpY2Vuc2VfZGF0YSwgJ3thZGRy ZXNzfScsIHRvX2pzb25iKCdVcGRhdGVkJzo6dGV4dCkpIFdIRVJFIHNlcV9pZCA9IDpyb3df aWQ7ClNRTAoKICAgIGNhdCA+ICIkUkVTVUxUU19ESVIvanNvbmJfd3JpdGVfc2luZ2xlLnNx bCIgPDwnU1FMJwpcc2V0IHJvd19pZCByYW5kb20oMSwgMTAwMDApClVQREFURSB0X2pzb25i IFNFVCBkYXRhID0ganNvbmJfc2V0KGRhdGEsICd7dmFsdWV9JywgdG9fanNvbmIoZmxvb3Io cmFuZG9tKCkqMWU2KTo6aW50KSkgV0hFUkUgaWQgPSA6cm93X2lkOwpTUUwKCiAgICBjYXQg PiAiJFJFU1VMVFNfRElSL2pzb25iX3dyaXRlX2JhdGNoLnNxbCIgPDwnU1FMJwpcc2V0IGJh c2VfaWQgcmFuZG9tKDEsIDk5NTApClVQREFURSB0X2pzb25iIFNFVCBkYXRhID0ganNvbmJf c2V0KGRhdGEsICd7dmFsdWV9JywgdG9fanNvbmIoZmxvb3IocmFuZG9tKCkqMWU2KTo6aW50 KSkgV0hFUkUgaWQgPj0gOmJhc2VfaWQgQU5EIGlkIDwgOmJhc2VfaWQgKyA1MDsKU1FMCgog ICAgY2F0ID4gIiRSRVNVTFRTX0RJUi9naW5fd3JpdGVfc2luZ2xlLnNxbCIgPDwnU1FMJwpc c2V0IHJvd19pZCByYW5kb20oMSwgMTAwMDApClVQREFURSB0X2dpbiBTRVQgZGF0YSA9IGpz b25iX3NldChkYXRhLCAne2NvdW50ZXJ9JywgdG9fanNvbmIoZmxvb3IocmFuZG9tKCkqMWU2 KTo6aW50KSkgV0hFUkUgaWQgPSA6cm93X2lkOwpTUUwKCiAgICAjIFJ1biBpc29sYXRlZCB0 ZXN0cwogICAgcnVuX3Rlc3QgIiR2ZXJzaW9uIiAiJGluc3RhbGxfZGlyIiAibGljZW5zZSIg IndyaXRlX3NpbmdsZSIgIiRzZXR1cF9sb2ciCiAgICBydW5fdGVzdCAiJHZlcnNpb24iICIk aW5zdGFsbF9kaXIiICJqc29uYiIgIndyaXRlX3NpbmdsZSIgIiRzZXR1cF9sb2ciCiAgICBy dW5fdGVzdCAiJHZlcnNpb24iICIkaW5zdGFsbF9kaXIiICJqc29uYiIgIndyaXRlX2JhdGNo IiAiJHNldHVwX2xvZyIKICAgIHJ1bl90ZXN0ICIkdmVyc2lvbiIgIiRpbnN0YWxsX2RpciIg ImdpbiIgIndyaXRlX3NpbmdsZSIgIiRzZXR1cF9sb2ciCiAgICBydW5fdGVzdCAiJHZlcnNp b24iICIkaW5zdGFsbF9kaXIiICJwZ2JlbmNoIiAidHBjYi1saWtlIiAiJHNldHVwX2xvZyIK ICAgIHJ1bl90ZXN0ICIkdmVyc2lvbiIgIiRpbnN0YWxsX2RpciIgInBnYmVuY2giICJzaW1w bGUtdXBkYXRlIiAiJHNldHVwX2xvZyIKCiAgICBlY2hvICIiCiAgICBsb2dfaW5mbyAiUnVu bmluZyBjb25jdXJyZW50IHJlYWQvd3JpdGUgdGVzdHMuLi4iCiAgICBlY2hvICIiCgogICAg IyBHZW5lcmF0ZSBjb25jdXJyZW50IHRlc3QgU1FMIHNjcmlwdHMKICAgIGNhdCA+ICIkUkVT VUxUU19ESVIvanNvbmJfd3JpdGVfY29uY3VycmVudC5zcWwiIDw8J1NRTCcKXHNldCByb3df aWQgcmFuZG9tKDEsIDEwMDAwKQpVUERBVEUgdF9qc29uYiBTRVQgZGF0YSA9IGpzb25iX3Nl dChkYXRhLCAne3ZhbHVlfScsIHRvX2pzb25iKGZsb29yKHJhbmRvbSgpKjFlNik6OmludCkp IFdIRVJFIGlkID0gOnJvd19pZDsKU1FMCgogICAgY2F0ID4gIiRSRVNVTFRTX0RJUi9qc29u Yl9yZWFkX2NvbmN1cnJlbnQuc3FsIiA8PCdTUUwnClxzZXQgcm93X2lkIHJhbmRvbSgxLCAx MDAwMCkKU0VMRUNUICogRlJPTSB0X2pzb25iIFdIRVJFIGlkID0gOnJvd19pZDsKU1FMCgog ICAgY2F0ID4gIiRSRVNVTFRTX0RJUi9saWNlbnNlX3dyaXRlX2NvbmN1cnJlbnQuc3FsIiA8 PCdTUUwnClxzZXQgcm93X2lkIHJhbmRvbSgxLCAxMDAwMDApClVQREFURSBkcml2ZXJfbGlj ZW5zZSBTRVQgbGljZW5zZV9kYXRhID0ganNvbmJfc2V0KGxpY2Vuc2VfZGF0YSwgJ3thZGRy ZXNzfScsIHRvX2pzb25iKCdVcGRhdGVkJzo6dGV4dCkpIFdIRVJFIHNlcV9pZCA9IDpyb3df aWQ7ClNRTAoKICAgIGNhdCA+ICIkUkVTVUxUU19ESVIvbGljZW5zZV9yZWFkX2NvbmN1cnJl bnQuc3FsIiA8PCdTUUwnClxzZXQgcm93X2lkIHJhbmRvbSgxLCAxMDAwMDApClNFTEVDVCAq IEZST00gZHJpdmVyX2xpY2Vuc2UgV0hFUkUgc2VxX2lkID0gOnJvd19pZDsKU1FMCgogICAg IyBSdW4gY29uY3VycmVudCB0ZXN0cyB3aXRoIHZhcnlpbmcgd3JpdGUgcHJlc3N1cmUKICAg IHJ1bl9jb25jdXJyZW50X3Rlc3QgIiR2ZXJzaW9uIiAiJGluc3RhbGxfZGlyIiAianNvbmIi IDIgNiAiJHNldHVwX2xvZyIKICAgIHJ1bl9jb25jdXJyZW50X3Rlc3QgIiR2ZXJzaW9uIiAi JGluc3RhbGxfZGlyIiAianNvbmIiIDQgNCAiJHNldHVwX2xvZyIKICAgIHJ1bl9jb25jdXJy ZW50X3Rlc3QgIiR2ZXJzaW9uIiAiJGluc3RhbGxfZGlyIiAianNvbmIiIDYgMiAiJHNldHVw X2xvZyIKICAgIHJ1bl9jb25jdXJyZW50X3Rlc3QgIiR2ZXJzaW9uIiAiJGluc3RhbGxfZGly IiAibGljZW5zZSIgMiA2ICIkc2V0dXBfbG9nIgogICAgcnVuX2NvbmN1cnJlbnRfdGVzdCAi JHZlcnNpb24iICIkaW5zdGFsbF9kaXIiICJsaWNlbnNlIiA0IDQgIiRzZXR1cF9sb2ciCiAg ICBydW5fY29uY3VycmVudF90ZXN0ICIkdmVyc2lvbiIgIiRpbnN0YWxsX2RpciIgImxpY2Vu c2UiIDYgMiAiJHNldHVwX2xvZyIKCiAgICBlY2hvICIiCgogICAgIyBDbGVhbnVwCiAgICBs b2dfaW5mbyAiU3RvcHBpbmcgc2VydmVyLi4uIgogICAgIiRpbnN0YWxsX2Rpci9iaW4vcGdf Y3RsIiAtRCAiJGRhdGFkaXIiIHN0b3AgPiAvZGV2L251bGwgMj4mMSB8fCB0cnVlCiAgICBw a2lsbCAtOSBwb3N0Z3JlcyA+IC9kZXYvbnVsbCAyPiYxIHx8IHRydWUKICAgIGxvZ19zdWNj ZXNzICJTZXJ2ZXIgc3RvcHBlZCIKICAgIGVjaG8gIiIKfQoKIyBUZXN0IGJhc2VsaW5lCnRl c3RfdmVyc2lvbiAiYmFzZWxpbmUiICIkQkFTRUxJTkVfQ09NTUlUIgoKIyBUZXN0IGFsbCBw YXRjaGVzIGFwcGxpZWQgdG9nZXRoZXIgKGN1bXVsYXRpdmUpCmdpdCBjaGVja291dCAtcSBv cmlnaW4vbWFzdGVyCmdpdCBjaGVja291dCAtcSAtYiAiY2YtNTU1Ni10ZXN0LWFsbC1wYXRj aGVzIgoKbG9nX2luZm8gIkFwcGx5aW5nIGFsbCAkeyNQQVRDSEVTW0BdfSBwYXRjaGVzIGN1 bXVsYXRpdmVseS4uLiIKZm9yIHBhdGNoX2ZpbGUgaW4gIiR7UEFUQ0hFU1tAXX0iOyBkbwog ICAgbG9nX2luZm8gIiAgQXBwbHlpbmcgJHBhdGNoX2ZpbGUuLi4iCiAgICBpZiAhIGdpdCBh bSAiJHBhdGNoX2ZpbGUiID4gL2Rldi9udWxsIDI+JjE7IHRoZW4KICAgICAgICBsb2dfZXJy b3IgIkZhaWxlZCB0byBhcHBseSAkcGF0Y2hfZmlsZSIKICAgICAgICBnaXQgYW0gLS1hYm9y dCAyPi9kZXYvbnVsbCB8fCB0cnVlCiAgICAgICAgZXhpdCAxCiAgICBmaQpkb25lCgpQQVRD SEVEX0NPTU1JVD0kKGdpdCByZXYtcGFyc2UgLS1zaG9ydD0xMSBIRUFEKQp0ZXN0X3ZlcnNp b24gInBhdGNoZWQiICIkUEFUQ0hFRF9DT01NSVQiCgojID09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT0KIyBSRVBPUlRJTkcKIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cgpsb2dfaGVhZGVyICJS RVNVTFRTIFNVTU1BUlkiCgppZiBbIC1mICIkUkVTVUxUU19ESVIvcmVzdWx0cy50eHQiIF07 IHRoZW4KICAgIGVjaG8gIiIKICAgIGVjaG8gIuKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKV kOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKV kOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKV kOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKV kOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKV kOKVkOKVkCIKICAgIGVjaG8gIklTT0xBVEVEIFdPUktMT0FEIENPTVBBUklTT04gKFBhdGNo ZWQgdnMgQmFzZWxpbmUpIgogICAgZWNobyAi4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ 4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ 4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ 4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ 4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ 4pWQ4pWQIgogICAgcHJpbnRmICIlLTI1cyAlLTI1cyAlMTJzICUxMnMgJTEwc1xuIiAiVGFi bGUiICJXb3JrbG9hZCIgIkJhc2VsaW5lIFRQUyIgIlBhdGNoZWQgVFBTIiAizpQlIgogICAg ZWNobyAi4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA 4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA 4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA 4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA 4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAIgoKICAgICMgUGFyc2Ug cmVzdWx0cyBhbmQgY29tcHV0ZSBkZWx0YXMKICAgIGRlY2xhcmUgLUEgYmFzZWxpbmVfdHBz CiAgICBkZWNsYXJlIC1BIHBhdGNoZWRfdHBzCgogICAgd2hpbGUgSUZTPSd8JyByZWFkIC1y IHZlcnNpb24gdGFibGUgd29ya2xvYWQgdHBzIGxhdDsgZG8KICAgICAgICBpZiBbWyAiJHdv cmtsb2FkIiAhPSBjb25jdXJyZW50KiBdXTsgdGhlbgogICAgICAgICAgICBrZXk9IiR7dGFi bGV9fCR7d29ya2xvYWR9IgogICAgICAgICAgICBpZiBbICIkdmVyc2lvbiIgPSAiYmFzZWxp bmUiIF07IHRoZW4KICAgICAgICAgICAgICAgIGJhc2VsaW5lX3Rwc1siJGtleSJdPSIkdHBz IgogICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICBwYXRjaGVkX3Rwc1siJGtleSJd PSIkdHBzIgogICAgICAgICAgICBmaQogICAgICAgIGZpCiAgICBkb25lIDwgIiRSRVNVTFRT X0RJUi9yZXN1bHRzLnR4dCIKCiAgICBmb3Iga2V5IGluICIkeyFiYXNlbGluZV90cHNbQF19 IjsgZG8KICAgICAgICBidHBzPSIke2Jhc2VsaW5lX3Rwc1ska2V5XX0iCiAgICAgICAgcHRw cz0iJHtwYXRjaGVkX3Rwc1ska2V5XTotMH0iCgogICAgICAgIGlmIFsgLW4gIiRidHBzIiBd ICYmIFsgLW4gIiRwdHBzIiBdICYmIFsgIiRidHBzIiAhPSAiMCIgXSAmJiBbICIkcHRwcyIg IT0gIjAiIF07IHRoZW4KICAgICAgICAgICAgZGVsdGE9JChhd2sgIkJFR0lOIHtwcmludGYg XCIlLjFmXCIsICgkcHRwcyAtICRidHBzKSAvICRidHBzICogMTAwfSIpCiAgICAgICAgICAg IHRhYmxlPSQoZWNobyAiJGtleSIgfCBjdXQgLWQnfCcgLWYxKQogICAgICAgICAgICB3b3Jr bG9hZD0kKGVjaG8gIiRrZXkiIHwgY3V0IC1kJ3wnIC1mMikKICAgICAgICAgICAgcHJpbnRm ICIlLTI1cyAlLTI1cyAlMTIuMWYgJTEyLjFmICUrOS4xZiUlXG4iICIkdGFibGUiICIkd29y a2xvYWQiICIkYnRwcyIgIiRwdHBzIiAiJGRlbHRhIgogICAgICAgIGZpCiAgICBkb25lIHwg c29ydAoKICAgIGVjaG8gIuKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKU gOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKU gOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKU gOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKU gOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgCIKICAg IGVjaG8gIiIKICAgIGVjaG8gIuKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKV kOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKV kOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKV kOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKV kOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkCIK ICAgIGVjaG8gIkNPTkNVUlJFTlQgV09SS0xPQUQgQU5BTFlTSVMgKFdyaXRlIFByZXNzdXJl IEltcGFjdCBvbiBSZWFkcykiCiAgICBlY2hvICLilZDilZDilZDilZDilZDilZDilZDilZDi lZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDi lZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDi lZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDi lZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDi lZDilZDilZAiCiAgICBwcmludGYgIiUtMjVzICUtMjBzICUxMnMgJTEycyAlMTJzICUxMnNc biIgIlRhYmxlIiAiV3JpdGU6UmVhZCIgIkJhc2UgV3JpdGUiICJQYXRjaCBXcml0ZSIgIkJh c2UgUmVhZCIgIlBhdGNoIFJlYWQiCiAgICBlY2hvICLilIDilIDilIDilIDilIDilIDilIDi lIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDi lIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDi lIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDi lIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDi lIDilIDilIDilIAiCgogICAgZGVjbGFyZSAtQSBjb25jX3Jlc3VsdHMKCiAgICB3aGlsZSBJ RlM9J3wnIHJlYWQgLXIgdmVyc2lvbiB0YWJsZSB3b3JrbG9hZCB0cHMgbGF0OyBkbwogICAg ICAgIGlmIFtbICIkd29ya2xvYWQiID09IGNvbmN1cnJlbnQqIF1dOyB0aGVuCiAgICAgICAg ICAgIGNvbmNfcmVzdWx0c1siJHt2ZXJzaW9ufXwke3RhYmxlfXwke3dvcmtsb2FkfSJdPSIk dHBzIgogICAgICAgIGZpCiAgICBkb25lIDwgIiRSRVNVTFRTX0RJUi9yZXN1bHRzLnR4dCIK CiAgICBmb3IgcmF0aW8gaW4gIjJ3XzZyIiAiNHdfNHIiICI2d18yciI7IGRvCiAgICAgICAg Zm9yIHRhYmxlIGluICJqc29uYiIgImxpY2Vuc2UiOyBkbwogICAgICAgICAgICBidz0iJHtj b25jX3Jlc3VsdHNbYmFzZWxpbmV8JHt0YWJsZX18Y29uY3VycmVudF8ke3JhdGlvfV93cml0 ZV06LTB9IgogICAgICAgICAgICBwdz0iJHtjb25jX3Jlc3VsdHNbcGF0Y2hlZHwke3RhYmxl fXxjb25jdXJyZW50XyR7cmF0aW99X3dyaXRlXTotMH0iCiAgICAgICAgICAgIGJyPSIke2Nv bmNfcmVzdWx0c1tiYXNlbGluZXwke3RhYmxlfXxjb25jdXJyZW50XyR7cmF0aW99X3JlYWRd Oi0wfSIKICAgICAgICAgICAgcHI9IiR7Y29uY19yZXN1bHRzW3BhdGNoZWR8JHt0YWJsZX18 Y29uY3VycmVudF8ke3JhdGlvfV9yZWFkXTotMH0iCgogICAgICAgICAgICBpZiBbIC1uICIk YnciIF0gJiYgWyAtbiAiJHB3IiBdICYmIFsgLW4gIiRiciIgXSAmJiBbIC1uICIkcHIiIF0g JiYgXAogICAgICAgICAgICAgICBbICIkYnciICE9ICIwIiBdICYmIFsgIiRwdyIgIT0gIjAi IF0gJiYgWyAiJGJyIiAhPSAiMCIgXSAmJiBbICIkcHIiICE9ICIwIiBdOyB0aGVuCiAgICAg ICAgICAgICAgICBwcmludGYgIiUtMjVzICUtMjBzICUxMi4xZiAlMTIuMWYgJTEyLjFmICUx Mi4xZlxuIiAiJHRhYmxlIiAiJHJhdGlvIiAiJGJ3IiAiJHB3IiAiJGJyIiAiJHByIgogICAg ICAgICAgICBmaQogICAgICAgIGRvbmUKICAgIGRvbmUKCiAgICBlY2hvICLilIDilIDilIDi lIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDi lIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDi lIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDi lIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDi lIDilIDilIDilIDilIDilIDilIDilIAiCiAgICBlY2hvICIiCiAgICBlY2hvICJPdXRwdXQg ZmlsZXM6IgogICAgZWNobyAiICAkUkVTVUxUU19ESVIvcmVzdWx0cy50eHQgKHJhdyByZXN1 bHRzKSIKICAgIGVjaG8gIiAgJFJFU1VMVFNfRElSLypfc2VydmVyLmxvZyAoc2VydmVyIHN0 YXJ0dXAvZXJyb3IgbG9ncykiCiAgICBlY2hvICIgICRSRVNVTFRTX0RJUi8qX3NldHVwLmxv ZyAoZGF0YWJhc2Ugc2V0dXAgbG9ncykiCiAgICBlY2hvICIgICRSRVNVTFRTX0RJUi8qX2J1 aWxkLmxvZyAoYnVpbGQgbG9ncykiCiAgICBlY2hvICIgICRSRVNVTFRTX0RJUi8qXyoudHh0 IChwZ2JlbmNoIG91dHB1dCkiCiAgICBlY2hvICIgICRSRVNVTFRTX0RJUi8qXyouc3FsICh0 ZXN0IHF1ZXJpZXMpIgogICAgZWNobyAiIgpmaQoKZ2l0IGNoZWNrb3V0IC1xIC0gMj4vZGV2 L251bGwgfHwgdHJ1ZQo= --f893d3fc92324816820a9ab769f8f3a7--