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.94.2) (envelope-from ) id 1uRoF4-00Gf9u-DY for pgsql-hackers@arkaria.postgresql.org; Wed, 18 Jun 2025 08:33:58 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.94.2) (envelope-from ) id 1uRoF2-00HKIq-HO for pgsql-hackers@arkaria.postgresql.org; Wed, 18 Jun 2025 08:33:57 +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.94.2) (envelope-from ) id 1uRoF1-00HKIi-NC for pgsql-hackers@lists.postgresql.org; Wed, 18 Jun 2025 08:33:56 +0000 Received: from mail-yw1-x112f.google.com ([2607:f8b0:4864:20::112f]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1uRoEx-002fZP-09 for pgsql-hackers@lists.postgresql.org; Wed, 18 Jun 2025 08:33:55 +0000 Received: by mail-yw1-x112f.google.com with SMTP id 00721157ae682-70e4b1acf41so52143127b3.3 for ; Wed, 18 Jun 2025 01:33:50 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1750235630; x=1750840430; darn=lists.postgresql.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=cvqk7Lwm9Lb94V7HQ4vDxopZKBohnIlsEEUIOgao1Go=; b=YOcnENWOfoLZJbiOrST9WIhwUyPcHUTGAPYrIbT29P6yDyjSQVmjOv4X5urBfbILs/ cXCcS5PIbzibO5JyCBCd86uoElrw3ngfFxaPScTLauWnFnYZ8Fp8073Cx29DPZLvohAq /oTO7TAoqjwqVEuyh0MHbN2lz4qdBthN+rljRREAG2Df5D8Li/LygvEx72IxkIPRpwyw M+GeCcjxbXsn1GuINJfWr14sMBJ8MH1aFWU/wBDW4ROfxMs/Sv5a88c96KT0tgPMnbxa GkWR3pg9nPPIU2U90wo2vuMXrvQqWdAw+AFS985kYLkADjteZttBC4DIuGdQ3NvOQSjb r16g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1750235630; x=1750840430; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=cvqk7Lwm9Lb94V7HQ4vDxopZKBohnIlsEEUIOgao1Go=; b=Okpt8oVzl2kfUODRBSM7LyOhGJj0aXJ0ZXdiFphdLVuN0Kyjt23Q3r9VMNhwDag1WH iVlEpxX5tiQCHbNC55RTVPz3jrKo7KSZMfopOUZkuDOadIjIgRi5WnwcMzZv7dyW7ay7 xgEf/IPNCvXVcKM2a2BwQ5siJCdmu9Dfxvx26cwxI5u1OX5KwZ4wEueVtVgDv5gKdVK+ dGu9ruVWCC5U86Krieib0cYf2WD5MKPRENxcCvkA+Ob5XSWlOEda19/oQojcdz8dT/XL s8itJcbWhWwFuIW11UipCE1Ja/49+JZ06Ti9ZVhnFCN+u7jU6xkfhZVRJqm6XVOPBeiG RCnQ== X-Gm-Message-State: AOJu0YypOiEENOFlzPVKOoikEjvgtnl6veNZH0zij1HpaVAc9/Vobw1T gSP+wuYYn9ISVIcho+ca1L/xMrwEJWnjAJGlNWeNUgtdYHWAyuAO+D7QMAoMQUGZ7JksMAN4cwg MjocLlY+7XNNHv2446flKax+ktEwH71M= X-Gm-Gg: ASbGncthRC+wnHpYiTlIiP77FXQb6RNuSnkvgb1IMJoL7Jwi8/DZWas1JWDRQvT4Dej vic5PoonVEZdV12xGH+DvY7vFVeFXBUOhovCrUd9bzYjW6TWpGBRP/+djockr81wWVD0uolegl0 Mi/cfFyfmcwiwvDdJZNntEpwfTRc7FWwfQNb/PGtqm0nZw X-Google-Smtp-Source: AGHT+IFgRoGTqtx4miieohOrt2OtSA7kaO5C9FXwfJnFigNWtOVCMvU3d10EGtq8lx7a0P9BJtPJ6Z3oH5Q8ChFgtgw= X-Received: by 2002:a05:690c:48c2:b0:710:ed16:267a with SMTP id 00721157ae682-7117552f2d9mr246695567b3.30.1750235629733; Wed, 18 Jun 2025 01:33:49 -0700 (PDT) MIME-Version: 1.0 References: <0C842FA2-8ACF-4C81-9F0E-F0BDB479AC28@yandex-team.ru> In-Reply-To: <0C842FA2-8ACF-4C81-9F0E-F0BDB479AC28@yandex-team.ru> From: Arseniy Mukhin Date: Wed, 18 Jun 2025 11:33:38 +0300 X-Gm-Features: AX0GCFvmJPhX3Nlc6bg6WL1vyJtVP9GEFfF4MzvJ9YqCcSi-l3pQYdAUoRku6Ao Message-ID: Subject: Re: amcheck support for BRIN indexes To: Andrey Borodin Cc: PostgreSQL Hackers Content-Type: multipart/mixed; boundary="000000000000fc23510637d47cf8" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000fc23510637d47cf8 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Mon, Jun 9, 2025 at 1:16=E2=80=AFAM Tomas Vondra wrote= : > > On 6/8/25 14:39, Arseniy Mukhin wrote: > > Hi, > > > > Here is a new version. > > > > TAP tests were added. Tried to reproduce more or less every violation. > > I don't include 2 tests where disk representation ItemIdData needs to > > be changed: it works locally, but I don't think these tests are > > portable. While writing tests some minor issues were found and fixed. > > Also ci compiler warnings were fixed. > > > > Thanks. I've added myself as a reviewer, so that I don't forget about > this for the next CF. > Thank you, looking forward to hearing your thoughts. On Mon, Jun 16, 2025 at 8:11=E2=80=AFPM Andrey Borodin wrote: > > Hi! > > Nice feature! > Hi Andrey, thank you for your interest in the patch! > > On 8 Jun 2025, at 17:39, Arseniy Mukhin = wrote: > > > > > > > +#define BRIN_MAX_PAGES_PER_RANGE 131072 > > I'd personally prefer some words on where does this limit come from. I'm = not a BRIN pro, just curious. > Or, at least, maybe we can use a form 128 * 1024, if it's just a sane lim= it. > Actually I don't know where this value came from, this limit already exists in reloptions.c, so patch just creates macros so that it can be reused in the check without duplication. > > > On 8 Jun 2025, at 17:39, Arseniy Mukhin = wrote: > > > > > A bit more detailed commit message would be very useful. > Agree, it was too concise. Added commit messages. > The test coverage is very decent. The number of possible corruptions in t= ests is impressive. I don't really have an experience with BRIN to say how = different they are, but I want to ask if you are sure that these types of c= orruption will be portable across big-endian machines and such stuff. > Yeah, it seems that there are a lot of things that can go wrong with the test's portability. What I think can be done to make it more robust: - using regular expressions to find places we want to corrupt instead of concrete offsets. This way we avoid problems with different alignments for 32 bit and 64 bit systems. - using perl pack() function, so it uses the endianness of the system where you run tests. This helps to avoid problems with different endianness. - don't touch things like varlena len that have different values on different machines. And if some test turned out to be not portable we can drop it, but at least we would know that the code works, so it also would not be a useless effort. > Copyright year in all new files should be 2025. Fixed. > > Some documentation about brin_index_check() would be handy, especially ab= out its parameters. Perhaps, somewhere near gin_index_check() in amcheck.sg= ml. Thanks, I'm gonna do it soon. > > brin_check_ereport() reports ERRCODE_DATA_CORRUPTED. We should distinguis= h between ERRCODE_INDEX_CORRUPTED which is a stormbringer and ERRCODE_DATA_= CORRUPTED which is an actual disaster. Fixed. Interesting, I used btree check as reference when started writing brin check, and in btree check there 53 ERRCODE_INDEX_CORRUPTED ereports and only 1 ERRCODE_DATA_CORRUPTED ereport. So it was very hard to do, but I managed to pick the wrong one. I wonder if this btree check ereport should also be changed to ERRCODE_INDEX_CORRUPTED? > If it's not very difficult - it would be great to use read_stream infrast= ructure. See btvacuumscan() in nbtree.c calling read_stream_begin_relation(= ) for example. We cannot use it in logical scans in B-tree\GiST\GIN, but ma= ybe BRIN can take some advantage of this new shiny technology. Thanks, I will look into it. > > + state->revmapbuf =3D ReadBufferExtended(idxrel, MAIN_FORK= NUM, state->revmapBlk, RBM_NORMAL, > + = state->checkstrategy); > + LockBuffer(state->revmapbuf, BUFFER_LOCK_SHARE); > // usage of state->revmapbuf > + LockBuffer(state->revmapbuf, BUFFER_LOCK_UNLOCK); > // more usage of state->revmapbuf > + ReleaseBuffer(state->revmapbuf); > > I hope you know what you are doing. BRIN concurrency is not known to me a= t all. > It seems alright, here we lock the revmap page again inside check_revmap_item() for every revmap item. > > That's all for first pass through patches. Thanks for working on it! Thank you for the review! Here is a new version of the patch. It's rebased and It fixes points from Andrey's review. Two tests fail on the 32 bit build, a new version should fix it. Also the 'all_heap_consistent' part was moved to a separate patch, it's about 400 lines of code, so I hope it is more reviewable now. I tried the patch with postgis extension brin op classes and found a small bug, the new version fixes it too. Best regards, Arseniy Mukhin --000000000000fc23510637d47cf8 Content-Type: text/x-patch; charset="US-ASCII"; name="v3-0001-brin-refactoring.patch" Content-Disposition: attachment; filename="v3-0001-brin-refactoring.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mc1p337g0 RnJvbSA0OWQ0ZDk2NTFlOWJmMzc3Y2EzOGQzYjU3MWJmMTljZmMyNTBmYTY1IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBcnNlbml5IE11a2hpbiA8YXJzZW5peS5tdWtoaW4uZGV2QGdt YWlsLmNvbT4KRGF0ZTogV2VkLCAxNiBBcHIgMjAyNSAxMToyNjo0NSArMDMwMApTdWJqZWN0OiBb UEFUQ0ggdjMgMS8zXSBicmluIHJlZmFjdG9yaW5nCgpGb3IgYWRkaW5nIEJSSU4gaW5kZXggc3Vw cG9ydCBpbiBhbWNoZWNrIHdlIG5lZWQgc29tZSB0aW55IGNoYW5nZXMgaW4gQlJJTgpjb3JlIGNv ZGU6CgoqIFdlIG5lZWQgdG8gaGF2ZSB0dXBsZSBkZXNjcmlwdG9yIGZvciBvbi1kaXNrIHN0b3Jh Z2Ugb2YgQlJJTiB0dXBsZXMuCiAgSXQgaXMgYSBwdWJsaWMgZmllbGQgJ2JkX2Rpc2t0ZGVzYycg aW4gQnJpbkRlc2MsIGJ1dCB0byBhY2Nlc3MgaXQgd2UKICBuZWVkIGZ1bmN0aW9uICdicnR1cGxl X2Rpc2tfdHVwZGVzYycgd2hpY2ggaXMgaW50ZXJuYWwuIFRoaXMgY29tbWl0CiAgbWFrZXMgaXQg ZXh0ZXJuLgoKKiBGb3IgbWV0YSBwYWdlIGNoZWNrIHdlIG5lZWQgdG8ga25vdyBwYWdlc19wZXJf cmFuZ2UgdXBwZXIgbGltaXQuIEl0J3MKICBoYXJkY29kZWQgbm93LiBUaGlzIGNvbW1pdCBtb3Zl cyBpdHMgdmFsdWUgdG8gbWFjcm9zIEJSSU5fTUFYX1BBR0VTX1BFUl9SQU5HRQogIHNvIHRoYXQg d2UgY2FuIHVzZSBpdCBpbiBhbWNoZWNrIHRvby4KLS0tCiBzcmMvYmFja2VuZC9hY2Nlc3MvYnJp bi9icmluX3R1cGxlLmMgICB8IDIgKy0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9jb21tb24vcmVsb3B0 aW9ucy5jIHwgMyArKy0KIHNyYy9pbmNsdWRlL2FjY2Vzcy9icmluLmggICAgICAgICAgICAgIHwg MSArCiBzcmMvaW5jbHVkZS9hY2Nlc3MvYnJpbl90dXBsZS5oICAgICAgICB8IDIgKysKIDQgZmls ZXMgY2hhbmdlZCwgNiBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBh L3NyYy9iYWNrZW5kL2FjY2Vzcy9icmluL2JyaW5fdHVwbGUuYyBiL3NyYy9iYWNrZW5kL2FjY2Vz cy9icmluL2JyaW5fdHVwbGUuYwppbmRleCA4NjFmMzk3ZTZkYi4uNGQxZDhkOWFkZGQgMTAwNjQ0 Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9icmluL2JyaW5fdHVwbGUuYworKysgYi9zcmMvYmFj a2VuZC9hY2Nlc3MvYnJpbi9icmluX3R1cGxlLmMKQEAgLTU3LDcgKzU3LDcgQEAgc3RhdGljIGlu bGluZSB2b2lkIGJyaW5fZGVjb25zdHJ1Y3RfdHVwbGUoQnJpbkRlc2MgKmJyZGVzYywKIC8qCiAg KiBSZXR1cm4gYSB0dXBsZSBkZXNjcmlwdG9yIHVzZWQgZm9yIG9uLWRpc2sgc3RvcmFnZSBvZiBC UklOIHR1cGxlcy4KICAqLwotc3RhdGljIFR1cGxlRGVzYworVHVwbGVEZXNjCiBicnR1cGxlX2Rp c2tfdHVwZGVzYyhCcmluRGVzYyAqYnJkZXNjKQogewogCS8qIFdlIGNhY2hlIHRoZXNlIGluIHRo ZSBCcmluRGVzYyAqLwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2NvbW1vbi9yZWxv cHRpb25zLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvY29tbW9uL3JlbG9wdGlvbnMuYwppbmRleCA1 MDc0N2MxNjM5Ni4uYmM0OTQ4NDczNDEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9j b21tb24vcmVsb3B0aW9ucy5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9jb21tb24vcmVsb3B0 aW9ucy5jCkBAIC0yMiw2ICsyMiw3IEBACiAjaW5jbHVkZSAiYWNjZXNzL2hlYXB0b2FzdC5oIgog I2luY2x1ZGUgImFjY2Vzcy9odHVwX2RldGFpbHMuaCIKICNpbmNsdWRlICJhY2Nlc3MvbmJ0cmVl LmgiCisjaW5jbHVkZSAiYWNjZXNzL2JyaW4uaCIKICNpbmNsdWRlICJhY2Nlc3MvcmVsb3B0aW9u cy5oIgogI2luY2x1ZGUgImFjY2Vzcy9zcGdpc3RfcHJpdmF0ZS5oIgogI2luY2x1ZGUgImNhdGFs b2cvcGdfdHlwZS5oIgpAQCAtMzQzLDcgKzM0NCw3IEBAIHN0YXRpYyByZWxvcHRfaW50IGludFJl bE9wdHNbXSA9CiAJCQkiTnVtYmVyIG9mIHBhZ2VzIHRoYXQgZWFjaCBwYWdlIHJhbmdlIGNvdmVy cyBpbiBhIEJSSU4gaW5kZXgiLAogCQkJUkVMT1BUX0tJTkRfQlJJTiwKIAkJCUFjY2Vzc0V4Y2x1 c2l2ZUxvY2sKLQkJfSwgMTI4LCAxLCAxMzEwNzIKKwkJfSwgMTI4LCAxLCBCUklOX01BWF9QQUdF U19QRVJfUkFOR0UKIAl9LAogCXsKIAkJewpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvYWNjZXNz L2JyaW4uaCBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9icmluLmgKaW5kZXggODIxZjFlMDI4MDYuLjMz NGNlOTczYjY3IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9hY2Nlc3MvYnJpbi5oCisrKyBiL3Ny Yy9pbmNsdWRlL2FjY2Vzcy9icmluLmgKQEAgLTM3LDYgKzM3LDcgQEAgdHlwZWRlZiBzdHJ1Y3Qg QnJpblN0YXRzRGF0YQogCiAKICNkZWZpbmUgQlJJTl9ERUZBVUxUX1BBR0VTX1BFUl9SQU5HRQkx MjgKKyNkZWZpbmUgQlJJTl9NQVhfUEFHRVNfUEVSX1JBTkdFCTEzMTA3MgogI2RlZmluZSBCcmlu R2V0UGFnZXNQZXJSYW5nZShyZWxhdGlvbikgXAogCShBc3NlcnRNYWNybyhyZWxhdGlvbi0+cmRf cmVsLT5yZWxraW5kID09IFJFTEtJTkRfSU5ERVggJiYgXAogCQkJCSByZWxhdGlvbi0+cmRfcmVs LT5yZWxhbSA9PSBCUklOX0FNX09JRCksIFwKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vz cy9icmluX3R1cGxlLmggYi9zcmMvaW5jbHVkZS9hY2Nlc3MvYnJpbl90dXBsZS5oCmluZGV4IDAx MGJhNGVhM2MwLi45NDcyY2E2MzhkZCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvYWNjZXNzL2Jy aW5fdHVwbGUuaAorKysgYi9zcmMvaW5jbHVkZS9hY2Nlc3MvYnJpbl90dXBsZS5oCkBAIC0xMDks NCArMTA5LDYgQEAgZXh0ZXJuIEJyaW5NZW1UdXBsZSAqYnJpbl9tZW10dXBsZV9pbml0aWFsaXpl KEJyaW5NZW1UdXBsZSAqZHR1cGxlLAogZXh0ZXJuIEJyaW5NZW1UdXBsZSAqYnJpbl9kZWZvcm1f dHVwbGUoQnJpbkRlc2MgKmJyZGVzYywKIAkJCQkJCQkJCSAgIEJyaW5UdXBsZSAqdHVwbGUsIEJy aW5NZW1UdXBsZSAqZE1lbXR1cGxlKTsKIAorZXh0ZXJuIFR1cGxlRGVzYyBicnR1cGxlX2Rpc2tf dHVwZGVzYyhCcmluRGVzYyAqYnJkZXNjKTsKKwogI2VuZGlmCQkJCQkJCS8qIEJSSU5fVFVQTEVf SCAqLwotLSAKMi40My4wCgo= --000000000000fc23510637d47cf8 Content-Type: text/x-patch; charset="US-ASCII"; name="v3-0002-amcheck-brin_index_check-index-structure-check.patch" Content-Disposition: attachment; filename="v3-0002-amcheck-brin_index_check-index-structure-check.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mc1p337o1 RnJvbSA0ZDMyNzdmYmE3ZGMzOWUyYjRjNzIwMGQ2YTc3NzE0YzA3MjU1MDM3IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBcnNlbml5IE11a2hpbiA8YXJzZW5peS5tdWtoaW4uZGV2QGdt YWlsLmNvbT4KRGF0ZTogTW9uLCAxNiBKdW4gMjAyNSAxODoxMToyNyArMDMwMApTdWJqZWN0OiBb UEFUQ0ggdjMgMi8zXSBhbWNoZWNrOiBicmluX2luZGV4X2NoZWNrKCkgLSBpbmRleCBzdHJ1Y3R1 cmUgY2hlY2sKCkFkZHMgYSBuZXcgZnVuY3Rpb24gYnJpbl9pbmRleF9jaGVjaygpIGZvciB2YWxp ZGF0aW5nIEJSSU4gaW5kZXhlcy4KSXQgaW5jdWRlcyBuZXh0IGNoZWNrczoKLSBtZXRhIHBhZ2Ug Y2hlY2tzCi0gcmV2bWFwIHBvaW50ZXJzIGlzIHZhbGlkIGFuZCBwb2ludHMgdG8gaW5kZXggdHVw bGVzIHdpdGggZXhwZWN0ZWQgcmFuZ2UgYmxrbm8KLSBpbmRleCB0dXBsZXMgaGF2ZSBleHBlY3Rl ZCBmb3JtYXQKLSBzb21lIHNwZWNpYWwgY2hlY2tzIGZvciBlbXB0eV9yYW5nZXMKLSBldmVyeSBp bmRleCB0dXBsZSBoYXMgY29ycmVzcG9uZGluZyByZXZtYXAgaXRlbSB0aGF0IHBvaW50cyB0byBp dCAob3B0aW9uYWwpCi0tLQogY29udHJpYi9hbWNoZWNrL01ha2VmaWxlICAgICAgICAgICAgICAg IHwgICA1ICstCiBjb250cmliL2FtY2hlY2svYW1jaGVjay0tMS41LS0xLjYuc3FsICAgfCAgMTgg KwogY29udHJpYi9hbWNoZWNrL2FtY2hlY2suY29udHJvbCAgICAgICAgIHwgICAyICstCiBjb250 cmliL2FtY2hlY2svZXhwZWN0ZWQvY2hlY2tfYnJpbi5vdXQgfCAxMzQgKysrKwogY29udHJpYi9h bWNoZWNrL21lc29uLmJ1aWxkICAgICAgICAgICAgIHwgICA0ICsKIGNvbnRyaWIvYW1jaGVjay9z cWwvY2hlY2tfYnJpbi5zcWwgICAgICB8IDEwMiArKysKIGNvbnRyaWIvYW1jaGVjay90LzAwN192 ZXJpZnlfYnJpbi5wbCAgICB8IDI5MSArKysrKysrKysKIGNvbnRyaWIvYW1jaGVjay92ZXJpZnlf YnJpbi5jICAgICAgICAgICB8IDgwNyArKysrKysrKysrKysrKysrKysrKysrKysKIDggZmlsZXMg Y2hhbmdlZCwgMTM2MCBpbnNlcnRpb25zKCspLCAzIGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUg MTAwNjQ0IGNvbnRyaWIvYW1jaGVjay9hbWNoZWNrLS0xLjUtLTEuNi5zcWwKIGNyZWF0ZSBtb2Rl IDEwMDY0NCBjb250cmliL2FtY2hlY2svZXhwZWN0ZWQvY2hlY2tfYnJpbi5vdXQKIGNyZWF0ZSBt b2RlIDEwMDY0NCBjb250cmliL2FtY2hlY2svc3FsL2NoZWNrX2JyaW4uc3FsCiBjcmVhdGUgbW9k ZSAxMDA2NDQgY29udHJpYi9hbWNoZWNrL3QvMDA3X3ZlcmlmeV9icmluLnBsCiBjcmVhdGUgbW9k ZSAxMDA2NDQgY29udHJpYi9hbWNoZWNrL3ZlcmlmeV9icmluLmMKCmRpZmYgLS1naXQgYS9jb250 cmliL2FtY2hlY2svTWFrZWZpbGUgYi9jb250cmliL2FtY2hlY2svTWFrZWZpbGUKaW5kZXggMWI3 YTYzY2JhYTQuLmJkZmIyNzRjODljIDEwMDY0NAotLS0gYS9jb250cmliL2FtY2hlY2svTWFrZWZp bGUKKysrIGIvY29udHJpYi9hbWNoZWNrL01ha2VmaWxlCkBAIC02LDExICs2LDEyIEBAIE9CSlMg PSBcCiAJdmVyaWZ5X2NvbW1vbi5vIFwKIAl2ZXJpZnlfZ2luLm8gXAogCXZlcmlmeV9oZWFwYW0u byBcCi0JdmVyaWZ5X25idHJlZS5vCisJdmVyaWZ5X25idHJlZS5vIFwKKwl2ZXJpZnlfYnJpbi5v CiAKIEVYVEVOU0lPTiA9IGFtY2hlY2sKIERBVEEgPSBhbWNoZWNrLS0xLjItLTEuMy5zcWwgYW1j aGVjay0tMS4xLS0xLjIuc3FsIGFtY2hlY2stLTEuMC0tMS4xLnNxbCBhbWNoZWNrLS0xLjAuc3Fs IFwKLQkJYW1jaGVjay0tMS4zLS0xLjQuc3FsIGFtY2hlY2stLTEuNC0tMS41LnNxbAorCQlhbWNo ZWNrLS0xLjMtLTEuNC5zcWwgYW1jaGVjay0tMS40LS0xLjUuc3FsIGFtY2hlY2stLTEuNS0tMS42 LnNxbAogUEdGSUxFREVTQyA9ICJhbWNoZWNrIC0gZnVuY3Rpb24gZm9yIHZlcmlmeWluZyByZWxh dGlvbiBpbnRlZ3JpdHkiCiAKIFJFR1JFU1MgPSBjaGVjayBjaGVja19idHJlZSBjaGVja19naW4g Y2hlY2tfaGVhcApkaWZmIC0tZ2l0IGEvY29udHJpYi9hbWNoZWNrL2FtY2hlY2stLTEuNS0tMS42 LnNxbCBiL2NvbnRyaWIvYW1jaGVjay9hbWNoZWNrLS0xLjUtLTEuNi5zcWwKbmV3IGZpbGUgbW9k ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjllYzA0NmJiMWNmCi0tLSAvZGV2L251bGwKKysr IGIvY29udHJpYi9hbWNoZWNrL2FtY2hlY2stLTEuNS0tMS42LnNxbApAQCAtMCwwICsxLDE4IEBA CisvKiBjb250cmliL2FtY2hlY2svYW1jaGVjay0tMS41LS0xLjYuc3FsICovCisKKy0tIGNvbXBs YWluIGlmIHNjcmlwdCBpcyBzb3VyY2VkIGluIHBzcWwsIHJhdGhlciB0aGFuIHZpYSBDUkVBVEUg RVhURU5TSU9OCitcZWNobyBVc2UgIkFMVEVSIEVYVEVOU0lPTiBhbWNoZWNrIFVQREFURSBUTyAn MS42JyIgdG8gbG9hZCB0aGlzIGZpbGUuIFxxdWl0CisKKworLS0KKy0tIGJyaW5faW5kZXhfY2hl Y2soKQorLS0KK0NSRUFURSBGVU5DVElPTiBicmluX2luZGV4X2NoZWNrKGluZGV4IHJlZ2NsYXNz LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVndWxhcl9wYWdlc19jaGVjayBi b29sZWFuIGRlZmF1bHQgZmFsc2UKKykKKyAgICBSRVRVUk5TIFZPSUQKK0FTICdNT0RVTEVfUEFU SE5BTUUnLCAnYnJpbl9pbmRleF9jaGVjaycKK0xBTkdVQUdFIEMgU1RSSUNUIFBBUkFMTEVMIFJF U1RSSUNURUQ7CisKKy0tIFdlIGRvbid0IHdhbnQgdGhpcyB0byBiZSBhdmFpbGFibGUgdG8gcHVi bGljCitSRVZPS0UgQUxMIE9OIEZVTkNUSU9OIGJyaW5faW5kZXhfY2hlY2socmVnY2xhc3MsIGJv b2xlYW4pIEZST00gUFVCTElDOwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdp dCBhL2NvbnRyaWIvYW1jaGVjay9hbWNoZWNrLmNvbnRyb2wgYi9jb250cmliL2FtY2hlY2svYW1j aGVjay5jb250cm9sCmluZGV4IGM4YmE2ZDdjOWJjLi4yZjMyOWVmMmNmNCAxMDA2NDQKLS0tIGEv Y29udHJpYi9hbWNoZWNrL2FtY2hlY2suY29udHJvbAorKysgYi9jb250cmliL2FtY2hlY2svYW1j aGVjay5jb250cm9sCkBAIC0xLDUgKzEsNSBAQAogIyBhbWNoZWNrIGV4dGVuc2lvbgogY29tbWVu dCA9ICdmdW5jdGlvbnMgZm9yIHZlcmlmeWluZyByZWxhdGlvbiBpbnRlZ3JpdHknCi1kZWZhdWx0 X3ZlcnNpb24gPSAnMS41JworZGVmYXVsdF92ZXJzaW9uID0gJzEuNicKIG1vZHVsZV9wYXRobmFt ZSA9ICckbGliZGlyL2FtY2hlY2snCiByZWxvY2F0YWJsZSA9IHRydWUKZGlmZiAtLWdpdCBhL2Nv bnRyaWIvYW1jaGVjay9leHBlY3RlZC9jaGVja19icmluLm91dCBiL2NvbnRyaWIvYW1jaGVjay9l eHBlY3RlZC9jaGVja19icmluLm91dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw MDAwMC4uYmViY2E5M2QzMmYKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL2FtY2hlY2svZXhw ZWN0ZWQvY2hlY2tfYnJpbi5vdXQKQEAgLTAsMCArMSwxMzQgQEAKKy0tIGhlbHBlciBmdW5jCitD UkVBVEUgT1IgUkVQTEFDRSBGVU5DVElPTiAgcmFuZG9tX3N0cmluZyggSU5UICkgUkVUVVJOUyBU RVhUIEFTICQkCitTRUxFQ1Qgc3RyaW5nX2FnZyhzdWJzdHJpbmcoJzAxMjM0NTY3ODlhYmNkZWZn aGlqa2xtbm9wcXJzdHV2d3h5eicsIGNlaWwocmFuZG9tKCkgKiAzNik6OklOVEVHRVIsIDEpLCAn JykgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwgJDEpOworJCQgTEFOR1VBR0Ugc3FsOworLS0gZW1w dHkgdGFibGUgaW5kZXggc2hvdWxkIGJlIHZhbGlkCitDUkVBVEUgVEFCTEUgYnJpbnRlc3QgKGEg QklHSU5UKSBXSVRIIChGSUxMRkFDVE9SID0gMTApOworQ1JFQVRFIElOREVYIGJyaW50ZXN0X2lk eCBPTiBicmludGVzdCBVU0lORyBCUklOIChhKTsKK1NFTEVDVCBicmluX2luZGV4X2NoZWNrKCdi cmludGVzdF9pZHgnOjpSRUdDTEFTUywgdHJ1ZSk7CisgYnJpbl9pbmRleF9jaGVjayAKKy0tLS0t LS0tLS0tLS0tLS0tLQorIAorKDEgcm93KQorCistLSBjbGVhbnVwCitEUk9QIFRBQkxFIGJyaW50 ZXN0OworLS0gbXVsdGkgYXR0cmlidXRlcyB3aXRoIHZhcmxlbmEgYXR0cmlidXRlIHRlc3QKK0NS RUFURSBUQUJMRSBicmludGVzdCAoaWQgQklHU0VSSUFMLCBhIFRFWFQpIFdJVEggKEZJTExGQUNU T1IgPSAxMCk7CitDUkVBVEUgSU5ERVggYnJpbnRlc3RfaWR4IE9OIGJyaW50ZXN0IFVTSU5HIEJS SU4gKGEgVEVYVF9taW5tYXhfb3BzLCBpZCBpbnQ4X21pbm1heF9vcHMpIFdJVEggKFBBR0VTX1BF Ul9SQU5HRSA9IDIpOworSU5TRVJUIElOVE8gYnJpbnRlc3QgKGEpIFNFTEVDVCByYW5kb21fc3Ry aW5nKCh4ICUgMTAwKSkgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSw1MDAwKSB4OworLS0gY3JlYXRl IHNvbWUgZW1wdHkgcmFuZ2VzCitERUxFVEUgRlJPTSBicmludGVzdCBXSEVSRSBpZCA+IDIwMDAg QU5EIGlkIDwgNDAwMDsKK1NFTEVDVCBicmluX2luZGV4X2NoZWNrKCdicmludGVzdF9pZHgnOjpS RUdDTEFTUyk7CisgYnJpbl9pbmRleF9jaGVjayAKKy0tLS0tLS0tLS0tLS0tLS0tLQorIAorKDEg cm93KQorCistLSByZWJ1aWxkIGluZGV4CitEUk9QIElOREVYIGJyaW50ZXN0X2lkeDsKK0NSRUFU RSBJTkRFWCBicmludGVzdF9pZHggT04gYnJpbnRlc3QgVVNJTkcgQlJJTiAoYSBURVhUX21pbm1h eF9vcHMpIFdJVEggKFBBR0VTX1BFUl9SQU5HRSA9IDIpOworU0VMRUNUIGJyaW5faW5kZXhfY2hl Y2soJ2JyaW50ZXN0X2lkeCc6OlJFR0NMQVNTKTsKKyBicmluX2luZGV4X2NoZWNrIAorLS0tLS0t LS0tLS0tLS0tLS0tCisgCisoMSByb3cpCisKKy0tIGNsZWFudXAKK0RST1AgVEFCTEUgYnJpbnRl c3Q7CistLSBtaW5fbWF4IG9wY2xhc3MKK0NSRUFURSBUQUJMRSBicmludGVzdCAoYSBCSUdJTlQp IFdJVEggKEZJTExGQUNUT1IgPSAxMCk7CitDUkVBVEUgSU5ERVggYnJpbnRlc3RfaWR4IE9OIGJy aW50ZXN0IFVTSU5HIEJSSU4gKGEgaW50OF9taW5tYXhfb3BzKSBXSVRIIChQQUdFU19QRVJfUkFO R0UgPSAyKTsKK0lOU0VSVCBJTlRPIGJyaW50ZXN0IChhKSBTRUxFQ1QgeCBGUk9NIGdlbmVyYXRl X3NlcmllcygxLDEwMDAwMCkgeDsKKy0tIGNyZWF0ZSBzb21lIGVtcHR5IHJhbmdlcworREVMRVRF IEZST00gYnJpbnRlc3QgV0hFUkUgYSA+IDIwMDAwIEFORCBhIDwgNDAwMDA7CitTRUxFQ1QgYnJp bl9pbmRleF9jaGVjaygnYnJpbnRlc3RfaWR4Jzo6UkVHQ0xBU1MsIHRydWUpOworIGJyaW5faW5k ZXhfY2hlY2sgCistLS0tLS0tLS0tLS0tLS0tLS0KKyAKKygxIHJvdykKKworLS0gcmVidWlsZCBp bmRleAorRFJPUCBJTkRFWCBicmludGVzdF9pZHg7CitDUkVBVEUgSU5ERVggYnJpbnRlc3RfaWR4 IE9OIGJyaW50ZXN0IFVTSU5HIEJSSU4gKGEgaW50OF9taW5tYXhfb3BzKSBXSVRIIChQQUdFU19Q RVJfUkFOR0UgPSAyKTsKK1NFTEVDVCBicmluX2luZGV4X2NoZWNrKCdicmludGVzdF9pZHgnOjpS RUdDTEFTUywgdHJ1ZSk7CisgYnJpbl9pbmRleF9jaGVjayAKKy0tLS0tLS0tLS0tLS0tLS0tLQor IAorKDEgcm93KQorCistLSBjbGVhbnVwCitEUk9QIFRBQkxFIGJyaW50ZXN0OworLS0gbXVsdGlf bWluX21heCBvcGNsYXNzCitDUkVBVEUgVEFCTEUgYnJpbnRlc3QgKGEgQklHSU5UKSBXSVRIIChG SUxMRkFDVE9SID0gMTApOworQ1JFQVRFIElOREVYIGJyaW50ZXN0X2lkeCBPTiBicmludGVzdCBV U0lORyBCUklOIChhIGludDhfbWlubWF4X211bHRpX29wcykgV0lUSCAoUEFHRVNfUEVSX1JBTkdF ID0gMik7CitJTlNFUlQgSU5UTyBicmludGVzdCAoYSkgU0VMRUNUIHggRlJPTSBnZW5lcmF0ZV9z ZXJpZXMoMSwxMDAwMDApIHg7CistLSBjcmVhdGUgc29tZSBlbXB0eSByYW5nZXMKK0RFTEVURSBG Uk9NIGJyaW50ZXN0IFdIRVJFIGEgPiAyMDAwMCBBTkQgYSA8IDQwMDAwOworU0VMRUNUIGJyaW5f aW5kZXhfY2hlY2soJ2JyaW50ZXN0X2lkeCc6OlJFR0NMQVNTLCB0cnVlKTsKKyBicmluX2luZGV4 X2NoZWNrIAorLS0tLS0tLS0tLS0tLS0tLS0tCisgCisoMSByb3cpCisKKy0tIHJlYnVpbGQgaW5k ZXgKK0RST1AgSU5ERVggYnJpbnRlc3RfaWR4OworQ1JFQVRFIElOREVYIGJyaW50ZXN0X2lkeCBP TiBicmludGVzdCBVU0lORyBCUklOIChhIGludDhfbWlubWF4X211bHRpX29wcykgV0lUSCAoUEFH RVNfUEVSX1JBTkdFID0gMik7CitTRUxFQ1QgYnJpbl9pbmRleF9jaGVjaygnYnJpbnRlc3RfaWR4 Jzo6UkVHQ0xBU1MsIHRydWUpOworIGJyaW5faW5kZXhfY2hlY2sgCistLS0tLS0tLS0tLS0tLS0t LS0KKyAKKygxIHJvdykKKworLS0gY2xlYW51cAorRFJPUCBUQUJMRSBicmludGVzdDsKKy0tIGJs b29tIG9wY2xhc3MKK0NSRUFURSBUQUJMRSBicmludGVzdCAoYSBCSUdJTlQpIFdJVEggKEZJTExG QUNUT1IgPSAxMCk7CitDUkVBVEUgSU5ERVggYnJpbnRlc3RfaWR4IE9OIGJyaW50ZXN0IFVTSU5H IEJSSU4gKGEgaW50OF9ibG9vbV9vcHMpIFdJVEggKFBBR0VTX1BFUl9SQU5HRSA9IDIpOworSU5T RVJUIElOVE8gYnJpbnRlc3QgKGEpIFNFTEVDVCB4IEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsMTAw MDAwKSB4OworLS0gY3JlYXRlIHNvbWUgZW1wdHkgcmFuZ2VzCitERUxFVEUgRlJPTSBicmludGVz dCBXSEVSRSBhID4gMjAwMDAgQU5EIGEgPCA0MDAwMDsKK1NFTEVDVCBicmluX2luZGV4X2NoZWNr KCdicmludGVzdF9pZHgnOjpSRUdDTEFTUywgdHJ1ZSk7CisgYnJpbl9pbmRleF9jaGVjayAKKy0t LS0tLS0tLS0tLS0tLS0tLQorIAorKDEgcm93KQorCistLSByZWJ1aWxkIGluZGV4CitEUk9QIElO REVYIGJyaW50ZXN0X2lkeDsKK0NSRUFURSBJTkRFWCBicmludGVzdF9pZHggT04gYnJpbnRlc3Qg VVNJTkcgQlJJTiAoYSBpbnQ4X2Jsb29tX29wcykgV0lUSCAoUEFHRVNfUEVSX1JBTkdFID0gMik7 CitTRUxFQ1QgYnJpbl9pbmRleF9jaGVjaygnYnJpbnRlc3RfaWR4Jzo6UkVHQ0xBU1MsIHRydWUp OworIGJyaW5faW5kZXhfY2hlY2sgCistLS0tLS0tLS0tLS0tLS0tLS0KKyAKKygxIHJvdykKKwor LS0gY2xlYW51cAorRFJPUCBUQUJMRSBicmludGVzdDsKKy0tIGluY2x1c2lvbiBvcGNsYXNzCitD UkVBVEUgVEFCTEUgYnJpbnRlc3QgKGlkIFNFUklBTCBQUklNQVJZIEtFWSwgYSBCT1gpOworQ1JF QVRFIElOREVYIGJyaW50ZXN0X2lkeCBPTiBicmludGVzdCBVU0lORyBCUklOIChhIEJPWF9JTkNM VVNJT05fT1BTKSBXSVRIIChQQUdFU19QRVJfUkFOR0UgPSAyKTsKK0lOU0VSVCBJTlRPIGJyaW50 ZXN0IChhKQorU0VMRUNUIEJPWChwb2ludChyYW5kb20oKSAqIDEwMDAsIHJhbmRvbSgpICogMTAw MCksIHBvaW50KHJhbmRvbSgpICogMTAwMCwgcmFuZG9tKCkgKiAxMDAwKSkKK0ZST00gZ2VuZXJh dGVfc2VyaWVzKDEsIDEwMDAwKTsKKy0tIGNyZWF0ZSBzb21lIGVtcHR5IHJhbmdlcworREVMRVRF IEZST00gYnJpbnRlc3QgV0hFUkUgaWQgPiAyMDAwIEFORCBpZCA8IDQwMDA7CitTRUxFQ1QgYnJp bl9pbmRleF9jaGVjaygnYnJpbnRlc3RfaWR4Jzo6UkVHQ0xBU1MsIHRydWUpOworIGJyaW5faW5k ZXhfY2hlY2sgCistLS0tLS0tLS0tLS0tLS0tLS0KKyAKKygxIHJvdykKKworLS0gcmVidWlsZCBp bmRleAorRFJPUCBJTkRFWCBicmludGVzdF9pZHg7CitDUkVBVEUgSU5ERVggYnJpbnRlc3RfaWR4 IE9OIGJyaW50ZXN0IFVTSU5HIEJSSU4gKGEgQk9YX0lOQ0xVU0lPTl9PUFMpIFdJVEggKFBBR0VT X1BFUl9SQU5HRSA9IDIpOworU0VMRUNUIGJyaW5faW5kZXhfY2hlY2soJ2JyaW50ZXN0X2lkeCc6 OlJFR0NMQVNTLCB0cnVlKTsKKyBicmluX2luZGV4X2NoZWNrIAorLS0tLS0tLS0tLS0tLS0tLS0t CisgCisoMSByb3cpCisKKy0tIGNsZWFudXAKK0RST1AgVEFCTEUgYnJpbnRlc3Q7CistLSBjbGVh bnVwCitEUk9QIEZVTkNUSU9OIHJhbmRvbV9zdHJpbmc7CmRpZmYgLS1naXQgYS9jb250cmliL2Ft Y2hlY2svbWVzb24uYnVpbGQgYi9jb250cmliL2FtY2hlY2svbWVzb24uYnVpbGQKaW5kZXggMWYw YzM0N2VkNTQuLmJhODE2YzJmYWYwIDEwMDY0NAotLS0gYS9jb250cmliL2FtY2hlY2svbWVzb24u YnVpbGQKKysrIGIvY29udHJpYi9hbWNoZWNrL21lc29uLmJ1aWxkCkBAIC01LDYgKzUsNyBAQCBh bWNoZWNrX3NvdXJjZXMgPSBmaWxlcygKICAgJ3ZlcmlmeV9naW4uYycsCiAgICd2ZXJpZnlfaGVh cGFtLmMnLAogICAndmVyaWZ5X25idHJlZS5jJywKKyAgJ3ZlcmlmeV9icmluLmMnCiApCiAKIGlm IGhvc3Rfc3lzdGVtID09ICd3aW5kb3dzJwpAQCAtMjcsNiArMjgsNyBAQCBpbnN0YWxsX2RhdGEo CiAgICdhbWNoZWNrLS0xLjItLTEuMy5zcWwnLAogICAnYW1jaGVjay0tMS4zLS0xLjQuc3FsJywK ICAgJ2FtY2hlY2stLTEuNC0tMS41LnNxbCcsCisgICdhbWNoZWNrLS0xLjUtLTEuNi5zcWwnLAog ICBrd2FyZ3M6IGNvbnRyaWJfZGF0YV9hcmdzLAogKQogCkBAIC00MCw2ICs0Miw3IEBAIHRlc3Rz ICs9IHsKICAgICAgICdjaGVja19idHJlZScsCiAgICAgICAnY2hlY2tfZ2luJywKICAgICAgICdj aGVja19oZWFwJywKKyAgICAgICdjaGVja19icmluJwogICAgIF0sCiAgIH0sCiAgICd0YXAnOiB7 CkBAIC01MCw2ICs1Myw3IEBAIHRlc3RzICs9IHsKICAgICAgICd0LzAwNF92ZXJpZnlfbmJ0cmVl X3VuaXF1ZS5wbCcsCiAgICAgICAndC8wMDVfcGl0ci5wbCcsCiAgICAgICAndC8wMDZfdmVyaWZ5 X2dpbi5wbCcsCisgICAgICAndC8wMDdfdmVyaWZ5X2JyaW4ucGwnLAogICAgIF0sCiAgIH0sCiB9 CmRpZmYgLS1naXQgYS9jb250cmliL2FtY2hlY2svc3FsL2NoZWNrX2JyaW4uc3FsIGIvY29udHJp Yi9hbWNoZWNrL3NxbC9jaGVja19icmluLnNxbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw MDAwMDAwMDAwMC4uMGE1ZTI2ZWE4ZjUKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL2FtY2hl Y2svc3FsL2NoZWNrX2JyaW4uc3FsCkBAIC0wLDAgKzEsMTAyIEBACistLSBoZWxwZXIgZnVuYwor Q1JFQVRFIE9SIFJFUExBQ0UgRlVOQ1RJT04gIHJhbmRvbV9zdHJpbmcoIElOVCApIFJFVFVSTlMg VEVYVCBBUyAkJAorU0VMRUNUIHN0cmluZ19hZ2coc3Vic3RyaW5nKCcwMTIzNDU2Nzg5YWJjZGVm Z2hpamtsbW5vcHFyc3R1dnd4eXonLCBjZWlsKHJhbmRvbSgpICogMzYpOjpJTlRFR0VSLCAxKSwg JycpIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsICQxKTsKKyQkIExBTkdVQUdFIHNxbDsKKworCist LSBlbXB0eSB0YWJsZSBpbmRleCBzaG91bGQgYmUgdmFsaWQKK0NSRUFURSBUQUJMRSBicmludGVz dCAoYSBCSUdJTlQpIFdJVEggKEZJTExGQUNUT1IgPSAxMCk7CitDUkVBVEUgSU5ERVggYnJpbnRl c3RfaWR4IE9OIGJyaW50ZXN0IFVTSU5HIEJSSU4gKGEpOworU0VMRUNUIGJyaW5faW5kZXhfY2hl Y2soJ2JyaW50ZXN0X2lkeCc6OlJFR0NMQVNTLCB0cnVlKTsKKy0tIGNsZWFudXAKK0RST1AgVEFC TEUgYnJpbnRlc3Q7CisKKworLS0gbXVsdGkgYXR0cmlidXRlcyB3aXRoIHZhcmxlbmEgYXR0cmli dXRlIHRlc3QKK0NSRUFURSBUQUJMRSBicmludGVzdCAoaWQgQklHU0VSSUFMLCBhIFRFWFQpIFdJ VEggKEZJTExGQUNUT1IgPSAxMCk7CitDUkVBVEUgSU5ERVggYnJpbnRlc3RfaWR4IE9OIGJyaW50 ZXN0IFVTSU5HIEJSSU4gKGEgVEVYVF9taW5tYXhfb3BzLCBpZCBpbnQ4X21pbm1heF9vcHMpIFdJ VEggKFBBR0VTX1BFUl9SQU5HRSA9IDIpOworSU5TRVJUIElOVE8gYnJpbnRlc3QgKGEpIFNFTEVD VCByYW5kb21fc3RyaW5nKCh4ICUgMTAwKSkgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSw1MDAwKSB4 OworLS0gY3JlYXRlIHNvbWUgZW1wdHkgcmFuZ2VzCitERUxFVEUgRlJPTSBicmludGVzdCBXSEVS RSBpZCA+IDIwMDAgQU5EIGlkIDwgNDAwMDsKK1NFTEVDVCBicmluX2luZGV4X2NoZWNrKCdicmlu dGVzdF9pZHgnOjpSRUdDTEFTUyk7CisKKy0tIHJlYnVpbGQgaW5kZXgKK0RST1AgSU5ERVggYnJp bnRlc3RfaWR4OworQ1JFQVRFIElOREVYIGJyaW50ZXN0X2lkeCBPTiBicmludGVzdCBVU0lORyBC UklOIChhIFRFWFRfbWlubWF4X29wcykgV0lUSCAoUEFHRVNfUEVSX1JBTkdFID0gMik7CitTRUxF Q1QgYnJpbl9pbmRleF9jaGVjaygnYnJpbnRlc3RfaWR4Jzo6UkVHQ0xBU1MpOworLS0gY2xlYW51 cAorRFJPUCBUQUJMRSBicmludGVzdDsKKworCisKKy0tIG1pbl9tYXggb3BjbGFzcworQ1JFQVRF IFRBQkxFIGJyaW50ZXN0IChhIEJJR0lOVCkgV0lUSCAoRklMTEZBQ1RPUiA9IDEwKTsKK0NSRUFU RSBJTkRFWCBicmludGVzdF9pZHggT04gYnJpbnRlc3QgVVNJTkcgQlJJTiAoYSBpbnQ4X21pbm1h eF9vcHMpIFdJVEggKFBBR0VTX1BFUl9SQU5HRSA9IDIpOworSU5TRVJUIElOVE8gYnJpbnRlc3Qg KGEpIFNFTEVDVCB4IEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsMTAwMDAwKSB4OworLS0gY3JlYXRl IHNvbWUgZW1wdHkgcmFuZ2VzCitERUxFVEUgRlJPTSBicmludGVzdCBXSEVSRSBhID4gMjAwMDAg QU5EIGEgPCA0MDAwMDsKK1NFTEVDVCBicmluX2luZGV4X2NoZWNrKCdicmludGVzdF9pZHgnOjpS RUdDTEFTUywgdHJ1ZSk7CisKKy0tIHJlYnVpbGQgaW5kZXgKK0RST1AgSU5ERVggYnJpbnRlc3Rf aWR4OworQ1JFQVRFIElOREVYIGJyaW50ZXN0X2lkeCBPTiBicmludGVzdCBVU0lORyBCUklOIChh IGludDhfbWlubWF4X29wcykgV0lUSCAoUEFHRVNfUEVSX1JBTkdFID0gMik7CitTRUxFQ1QgYnJp bl9pbmRleF9jaGVjaygnYnJpbnRlc3RfaWR4Jzo6UkVHQ0xBU1MsIHRydWUpOworLS0gY2xlYW51 cAorRFJPUCBUQUJMRSBicmludGVzdDsKKworCisKKy0tIG11bHRpX21pbl9tYXggb3BjbGFzcwor Q1JFQVRFIFRBQkxFIGJyaW50ZXN0IChhIEJJR0lOVCkgV0lUSCAoRklMTEZBQ1RPUiA9IDEwKTsK K0NSRUFURSBJTkRFWCBicmludGVzdF9pZHggT04gYnJpbnRlc3QgVVNJTkcgQlJJTiAoYSBpbnQ4 X21pbm1heF9tdWx0aV9vcHMpIFdJVEggKFBBR0VTX1BFUl9SQU5HRSA9IDIpOworSU5TRVJUIElO VE8gYnJpbnRlc3QgKGEpIFNFTEVDVCB4IEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsMTAwMDAwKSB4 OworLS0gY3JlYXRlIHNvbWUgZW1wdHkgcmFuZ2VzCitERUxFVEUgRlJPTSBicmludGVzdCBXSEVS RSBhID4gMjAwMDAgQU5EIGEgPCA0MDAwMDsKK1NFTEVDVCBicmluX2luZGV4X2NoZWNrKCdicmlu dGVzdF9pZHgnOjpSRUdDTEFTUywgdHJ1ZSk7CisKKy0tIHJlYnVpbGQgaW5kZXgKK0RST1AgSU5E RVggYnJpbnRlc3RfaWR4OworQ1JFQVRFIElOREVYIGJyaW50ZXN0X2lkeCBPTiBicmludGVzdCBV U0lORyBCUklOIChhIGludDhfbWlubWF4X211bHRpX29wcykgV0lUSCAoUEFHRVNfUEVSX1JBTkdF ID0gMik7CitTRUxFQ1QgYnJpbl9pbmRleF9jaGVjaygnYnJpbnRlc3RfaWR4Jzo6UkVHQ0xBU1Ms IHRydWUpOworLS0gY2xlYW51cAorRFJPUCBUQUJMRSBicmludGVzdDsKKworCisKKy0tIGJsb29t IG9wY2xhc3MKK0NSRUFURSBUQUJMRSBicmludGVzdCAoYSBCSUdJTlQpIFdJVEggKEZJTExGQUNU T1IgPSAxMCk7CitDUkVBVEUgSU5ERVggYnJpbnRlc3RfaWR4IE9OIGJyaW50ZXN0IFVTSU5HIEJS SU4gKGEgaW50OF9ibG9vbV9vcHMpIFdJVEggKFBBR0VTX1BFUl9SQU5HRSA9IDIpOworSU5TRVJU IElOVE8gYnJpbnRlc3QgKGEpIFNFTEVDVCB4IEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsMTAwMDAw KSB4OworLS0gY3JlYXRlIHNvbWUgZW1wdHkgcmFuZ2VzCitERUxFVEUgRlJPTSBicmludGVzdCBX SEVSRSBhID4gMjAwMDAgQU5EIGEgPCA0MDAwMDsKK1NFTEVDVCBicmluX2luZGV4X2NoZWNrKCdi cmludGVzdF9pZHgnOjpSRUdDTEFTUywgdHJ1ZSk7CisKKy0tIHJlYnVpbGQgaW5kZXgKK0RST1Ag SU5ERVggYnJpbnRlc3RfaWR4OworQ1JFQVRFIElOREVYIGJyaW50ZXN0X2lkeCBPTiBicmludGVz dCBVU0lORyBCUklOIChhIGludDhfYmxvb21fb3BzKSBXSVRIIChQQUdFU19QRVJfUkFOR0UgPSAy KTsKK1NFTEVDVCBicmluX2luZGV4X2NoZWNrKCdicmludGVzdF9pZHgnOjpSRUdDTEFTUywgdHJ1 ZSk7CistLSBjbGVhbnVwCitEUk9QIFRBQkxFIGJyaW50ZXN0OworCisKKy0tIGluY2x1c2lvbiBv cGNsYXNzCitDUkVBVEUgVEFCTEUgYnJpbnRlc3QgKGlkIFNFUklBTCBQUklNQVJZIEtFWSwgYSBC T1gpOworQ1JFQVRFIElOREVYIGJyaW50ZXN0X2lkeCBPTiBicmludGVzdCBVU0lORyBCUklOIChh IEJPWF9JTkNMVVNJT05fT1BTKSBXSVRIIChQQUdFU19QRVJfUkFOR0UgPSAyKTsKK0lOU0VSVCBJ TlRPIGJyaW50ZXN0IChhKQorU0VMRUNUIEJPWChwb2ludChyYW5kb20oKSAqIDEwMDAsIHJhbmRv bSgpICogMTAwMCksIHBvaW50KHJhbmRvbSgpICogMTAwMCwgcmFuZG9tKCkgKiAxMDAwKSkKK0ZS T00gZ2VuZXJhdGVfc2VyaWVzKDEsIDEwMDAwKTsKKy0tIGNyZWF0ZSBzb21lIGVtcHR5IHJhbmdl cworREVMRVRFIEZST00gYnJpbnRlc3QgV0hFUkUgaWQgPiAyMDAwIEFORCBpZCA8IDQwMDA7CisK K1NFTEVDVCBicmluX2luZGV4X2NoZWNrKCdicmludGVzdF9pZHgnOjpSRUdDTEFTUywgdHJ1ZSk7 CisKKy0tIHJlYnVpbGQgaW5kZXgKK0RST1AgSU5ERVggYnJpbnRlc3RfaWR4OworQ1JFQVRFIElO REVYIGJyaW50ZXN0X2lkeCBPTiBicmludGVzdCBVU0lORyBCUklOIChhIEJPWF9JTkNMVVNJT05f T1BTKSBXSVRIIChQQUdFU19QRVJfUkFOR0UgPSAyKTsKK1NFTEVDVCBicmluX2luZGV4X2NoZWNr KCdicmludGVzdF9pZHgnOjpSRUdDTEFTUywgdHJ1ZSk7CistLSBjbGVhbnVwCitEUk9QIFRBQkxF IGJyaW50ZXN0OworCisKKy0tIGNsZWFudXAKK0RST1AgRlVOQ1RJT04gcmFuZG9tX3N0cmluZzsK XCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9jb250cmliL2FtY2hlY2sv dC8wMDdfdmVyaWZ5X2JyaW4ucGwgYi9jb250cmliL2FtY2hlY2svdC8wMDdfdmVyaWZ5X2JyaW4u cGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjJjNjJiNzZjYzcwCi0t LSAvZGV2L251bGwKKysrIGIvY29udHJpYi9hbWNoZWNrL3QvMDA3X3ZlcmlmeV9icmluLnBsCkBA IC0wLDAgKzEsMjkxIEBACisjIENvcHlyaWdodCAoYykgMjAyMS0yMDI1LCBQb3N0Z3JlU1FMIEds b2JhbCBEZXZlbG9wbWVudCBHcm91cAorCit1c2Ugc3RyaWN0OwordXNlIHdhcm5pbmdzIEZBVEFM ID0+ICdhbGwnOworCit1c2UgUG9zdGdyZVNRTDo6VGVzdDo6Q2x1c3RlcjsKK3VzZSBQb3N0Z3Jl U1FMOjpUZXN0OjpVdGlsczsKKwordXNlIFRlc3Q6Ok1vcmU7CisKK215ICRub2RlOworbXkgJGJs a3NpemU7CitteSAkbWV0YV9wYWdlX2Jsa25vID0gMDsKKworIworIyBUZXN0IHNldC11cAorIwor JG5vZGUgPSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyLT5uZXcoJ3Rlc3QnKTsKKyRub2RlLT5p bml0KG5vX2RhdGFfY2hlY2tzdW1zID0+IDEpOworJG5vZGUtPmFwcGVuZF9jb25mKCdwb3N0Z3Jl c3FsLmNvbmYnLCAnYXV0b3ZhY3V1bT1vZmYnKTsKKyRub2RlLT5zdGFydDsKKyRibGtzaXplID0g aW50KCRub2RlLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgJ1NIT1cgYmxvY2tfc2l6ZTsnKSk7Cisk bm9kZS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsIHEoQ1JFQVRFIEVYVEVOU0lPTiBhbWNoZWNrKSk7 CisKKyMgVGVzdHMKK215IEB0ZXN0cyA9ICgKKyAgICB7CisgICAgICAgICMgaW52YWxpZCBtZXRh IHBhZ2UgdHlwZQorCisgICAgICAgIGZpbmQgICAgID0+IHBhY2soJ1MnLCAweEYwOTEpLAorICAg ICAgICByZXBsYWNlICA9PiBwYWNrKCdTJywgMHhBQUFBKSwKKyAgICAgICAgYmxrbm8gICAgPT4g JG1ldGFfcGFnZV9ibGtubywKKyAgICAgICAgZXhwZWN0ZWQgPT4gd3JhcCgnbWV0YXBhZ2UgaXMg Y29ycnVwdGVkJykKKyAgICB9LAorICAgIHsKKyAgICAgICAgIyBpbnZhbGlkIG1ldGEgcGFnZSBt YWdpYyB3b3JkCisKKyAgICAgICAgZmluZCAgICAgPT4gcGFjaygnTCcsIDB4QTgxMDlDRkEpLAor ICAgICAgICByZXBsYWNlICA9PiBwYWNrKCdMJywgMHhCQjEwOUNGQiksCisgICAgICAgIGJsa25v ICAgID0+ICRtZXRhX3BhZ2VfYmxrbm8sCisgICAgICAgIGV4cGVjdGVkID0+IHdyYXAoJ21ldGFw YWdlIGlzIGNvcnJ1cHRlZCcpLAorICAgIH0sCisgICAgeworICAgICAgICAjIGludmFsaWQgbWV0 YSBwYWdlIGluZGV4IHZlcnNpb24KKworICAgICAgICBmaW5kICAgICA9PiBwYWNrKCdMKicsIDB4 QTgxMDlDRkEsIDEpLAorICAgICAgICByZXBsYWNlICA9PiBwYWNrKCdMKicsIDB4QTgxMDlDRkEs IDIpLAorICAgICAgICBibGtubyAgICA9PiAkbWV0YV9wYWdlX2Jsa25vLAorICAgICAgICBleHBl Y3RlZCA9PiB3cmFwKCdtZXRhcGFnZSBpcyBjb3JydXB0ZWQnKQorICAgIH0sCisgICAgeworICAg ICAgICAjIHBhZ2VzX3Blcl9yYW5nZSBiZWxvdyBsb3dlciBsaW1pdAorCisgICAgICAgIGZpbmQg ICAgID0+IHBhY2soJ0wqJywgMHhBODEwOUNGQSwgMSwgMTI4KSwKKyAgICAgICAgcmVwbGFjZSAg PT4gcGFjaygnTConLCAweEE4MTA5Q0ZBLCAxLCAwKSwKKyAgICAgICAgYmxrbm8gICAgPT4gJG1l dGFfcGFnZV9ibGtubywKKyAgICAgICAgZXhwZWN0ZWQgPT4gd3JhcCgnbWV0YXBhZ2UgaXMgY29y cnVwdGVkJykKKyAgICB9LAorICAgIHsKKyAgICAgICAgIyBwYWdlc19wZXJfcmFuZ2UgYWJvdmUg dXBwZXIgbGltaXQKKworICAgICAgICBmaW5kICAgICA9PiBwYWNrKCdMKicsIDB4QTgxMDlDRkEs IDEsIDEyOCksCisgICAgICAgIHJlcGxhY2UgID0+IHBhY2soJ0wqJywgMHhBODEwOUNGQSwgMSwg MTMxMDczKSwKKyAgICAgICAgYmxrbm8gICAgPT4gJG1ldGFfcGFnZV9ibGtubywKKyAgICAgICAg ZXhwZWN0ZWQgPT4gd3JhcCgnbWV0YXBhZ2UgaXMgY29ycnVwdGVkJykKKyAgICB9LAorICAgIHsK KyAgICAgICAgIyBsYXN0X3Jldm1hcF9wYWdlIGJlbG93IGxvd2VyIGxpbWl0CisKKyAgICAgICAg ZmluZCAgICAgPT4gcGFjaygnTConLCAweEE4MTA5Q0ZBLCAxLCAxMjgsIDEpLAorICAgICAgICBy ZXBsYWNlICA9PiBwYWNrKCdMKicsIDB4QTgxMDlDRkEsIDEsIDEyOCwgMCksCisgICAgICAgIGJs a25vICAgID0+ICRtZXRhX3BhZ2VfYmxrbm8sCisgICAgICAgIGV4cGVjdGVkID0+IHdyYXAoJ21l dGFwYWdlIGlzIGNvcnJ1cHRlZCcpLAorICAgIH0sCisgICAgeworCisgICAgICAgICMgbGFzdF9y ZXZtYXBfcGFnZSBiZXlvbmQgaW5kZXggcmVsYXRpb24gc2l6ZQorCisgICAgICAgIGZpbmQgICAg ID0+IHBhY2soJ0wqJywgMHhBODEwOUNGQSwgMSwgMTI4LCAxKSwKKyAgICAgICAgcmVwbGFjZSAg PT4gcGFjaygnTConLCAweEE4MTA5Q0ZBLCAxLCAxMjgsIDEwMCksCisgICAgICAgIGJsa25vICAg ID0+ICRtZXRhX3BhZ2VfYmxrbm8sCisgICAgICAgIGV4cGVjdGVkID0+IHdyYXAoJ21ldGFwYWdl IGlzIGNvcnJ1cHRlZCcpLAorICAgIH0sCisgICAgeworICAgICAgICAjIGludmFsaWQgcmV2bWFw IHBhZ2UgdHlwZQorCisgICAgICAgIGZpbmQgICAgID0+IHBhY2soJ1MnLCAweEYwOTIpLAorICAg ICAgICByZXBsYWNlICA9PiBwYWNrKCdTJywgMHhBQUFBKSwKKyAgICAgICAgYmxrbm8gICAgPT4g MSwgIyByZXZtYXAgcGFnZQorICAgICAgICBleHBlY3RlZCA9PiB3cmFwKCdyZXZtYXAgcGFnZSBp cyBleHBlY3RlZCBhdCBibG9jayAxLCBsYXN0IHJldm1hcCBwYWdlIDEnKSwKKyAgICB9LAorICAg IHsKKyAgICAgICAgIyByZXZtYXAgaXRlbSBwb2ludHMgYmV5b25kIGluZGV4IHJlbGF0aW9uIHNp emUKKyAgICAgICAgIyByZXBsYWNlICgyLDEpIHdpdGggKDEwMCwxKQorCisgICAgICAgIGZpbmQg ICAgID0+IHBhY2soJ1MqJywgMCwgMiwgMSksCisgICAgICAgIHJlcGxhY2UgID0+IHBhY2soJ1Mq JywgMCwgMTAwLCAxKSwKKyAgICAgICAgYmxrbm8gICAgPT4gMSwgIyByZXZtYXAgcGFnZQorICAg ICAgICBleHBlY3RlZCA9PiB3cmFwKCdyZXZtYXAgaXRlbSBwb2ludHMgdG8gYSBub24gZXhpc3Rp bmcgYmxvY2sgMTAwLCAnCisgICAgICAgICAgICAuICdpbmRleCBtYXggYmxvY2sgMi4gUmFuZ2Ug Ymxrbm86IDAsIHJldm1hcCBpdGVtOiAoMSwwKScpCisgICAgfSwKKyAgICB7CisgICAgICAgICMg aW52YWxpZCByZWd1bGFyIHBhZ2UgdHlwZQorCisgICAgICAgIGZpbmQgICAgID0+IHBhY2soJ1Mn LCAweEYwOTMpLAorICAgICAgICByZXBsYWNlICA9PiBwYWNrKCdTJywgMHhBQUFBKSwKKyAgICAg ICAgYmxrbm8gICAgPT4gMiwgIyByZWd1bGFyIHBhZ2UKKyAgICAgICAgZXhwZWN0ZWQgPT4gd3Jh cCgncmV2bWFwIGl0ZW0gcG9pbnRzIHRvIHRoZSBwYWdlIHdoaWNoIGlzIG5vdCByZWd1bGFyIChi bGtubzogMikuICcKKyAgICAgICAgICAgIC4gJ1JhbmdlIGJsa25vOiAwLCByZXZtYXAgaXRlbTog KDEsMCknKQorICAgIH0sCisgICAgeworICAgICAgICAjIHJldm1hcCBpdGVtIHBvaW50cyBiZXlv bmQgcmVndWxhciBwYWdlIG1heCBvZmZzZXQKKyAgICAgICAgIyByZXBsYWNlICgyLDEpIHdpdGgg KDIsMikKKworICAgICAgICBmaW5kICAgICA9PiBwYWNrKCdTKicsIDAsIDIsIDEpLAorICAgICAg ICByZXBsYWNlICA9PiBwYWNrKCdTKicsIDAsIDIsIDIpLAorICAgICAgICBibGtubyAgICA9PiAx LCAjIHJldm1hcCBwYWdlCisgICAgICAgIGV4cGVjdGVkID0+IHdyYXAoJ3Jldm1hcCBpdGVtIG9m ZnNldCBudW1iZXIgMiBpcyBncmVhdGVyIHRoYW4gcmVndWxhciBwYWdlIDIgbWF4IG9mZnNldCAx LiAnCisgICAgICAgICAgICAuICdSYW5nZSBibGtubzogMCwgcmV2bWFwIGl0ZW06ICgxLDApJykK KyAgICB9LAorICAgIHsKKyAgICAgICAgIyBpbnZhbGlkIGluZGV4IHR1cGxlIHJhbmdlIGJsa25v CisKKyAgICAgICAgZmluZCAgICAgPT4gcGFjaygnTENDJywgMCwgMHhBOCwgMHgwMSksCisgICAg ICAgIHJlcGxhY2UgID0+IHBhY2soJ0xDQycsIDEsIDB4QTgsIDB4MDEpLAorICAgICAgICBibGtu byAgICA9PiAyLCAjIHJlZ3VsYXIgcGFnZQorICAgICAgICBleHBlY3RlZCA9PiB3cmFwKCdpbmRl eCB0dXBsZSBoYXMgaW52YWxpZCBibGtubyAxLiBSYW5nZSBibGtubzogMCwgcmV2bWFwIGl0ZW06 ICgxLDApLCBpbmRleCB0dXBsZTogKDIsMSknKQorICAgIH0sCisgICAgeworICAgICAgICAjIHJh bmdlIGJleW9uZCB0aGUgdGFibGUgc2l6ZSBhbmQgaXMgbm90IGVtcHR5CisKKyAgICAgICAgZmlu ZCAgICAgPT4gcGFjaygnTENDJywgMCwgMHhBOCwgMHgwMSksCisgICAgICAgIHJlcGxhY2UgID0+ IHBhY2soJ0xDQycsIDAsIDB4ODgsIDB4MDEpLAorICAgICAgICBibGtubyAgICA9PiAyLCAjIHJl Z3VsYXIgcGFnZQorICAgICAgICBleHBlY3RlZCA9PiB3cmFwKCd0aGUgcmFuZ2UgaXMgYmV5b25k IHRoZSB0YWJsZSBzaXplLCBidXQgaXMgbm90IG1hcmtlZCBhcyBlbXB0eSwgdGFibGUgc2l6ZTog MCBibG9ja3MuICcKKyAgICAgICAgICAgIC4gJ1JhbmdlIGJsa25vOiAwLCByZXZtYXAgaXRlbTog KDEsMCksIGluZGV4IHR1cGxlOiAoMiwxKScpCisgICAgfSwKKyAgICB7CisgICAgICAgICMgY29y cnVwdCBpbmRleCB0dXBsZSBkYXRhIG9mZnNldAorICAgICAgICAjIGhlcmUgIDB4MDAsIDB4MDAs IDB4MDAgaXMgcGFkZGluZyBhbmQgJy4nIGlzIHZhcmxlbmEgbGVuIGJ5dGUKKworICAgICAgICBm aW5kICAgICAgID0+IHBhY2soJ0xDQ0NDJywgMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCkgLiAn KC4pJyAuICdhYWFhYScsCisgICAgICAgIHJlcGxhY2UgICAgPT4gcGFjaygnTENDQ0MnLCAwLCAw eDFGLCAweDAwLCAweDAwLCAweDAwKSAuICckMScgLiAnYWFhYWEnLAorICAgICAgICBibGtubyAg ICAgID0+IDIsICMgcmVndWxhciBwYWdlCisgICAgICAgIHRhYmxlX2RhdGEgPT4gc3ViIHsKKyAg ICAgICAgICAgIG15ICgkdGVzdF9zdHJ1Y3QpID0gQF87CisgICAgICAgICAgICByZXR1cm4gcXEo SU5TRVJUIElOVE8gJHRlc3Rfc3RydWN0LT57dGFibGVfbmFtZX0gKGEpIFZBTFVFUyAoJ2FhYWFh Jyk7KTsKKyAgICAgICAgfSwKKyAgICAgICAgZXhwZWN0ZWQgICA9PiBxci9pbmRleCB0dXBsZSBo ZWFkZXIgbGVuZ3RoIDMxIGlzIGdyZWF0ZXIgdGhhbiB0dXBsZSBsZW4gLi5cLiBcUVJhbmdlIGJs a25vOiAwLCByZXZtYXAgaXRlbTogKDEsMCksIGluZGV4IHR1cGxlOiAoMiwxKVxFLworICAgIH0s CisgICAgeworICAgICAgICAjIGVtcHR5IHJhbmdlIGluZGV4IHR1cGxlIGRvZXNuJ3QgaGF2ZSBu dWxsIGJpdG1hcAorCisgICAgICAgIGZpbmQgICAgID0+IHBhY2soJ0xDQycsIDAsIDB4QTgsIDB4 MDEpLAorICAgICAgICByZXBsYWNlICA9PiBwYWNrKCdMQ0MnLCAwLCAweDI4LCAweDAxKSwKKyAg ICAgICAgYmxrbm8gICAgPT4gMiwgIyByZWd1bGFyIHBhZ2UKKyAgICAgICAgZXhwZWN0ZWQgPT4g d3JhcCgnZW1wdHkgcmFuZ2UgaW5kZXggdHVwbGUgZG9lc25cJ3QgaGF2ZSBudWxsIGJpdG1hcC4g JworICAgICAgICAgICAgLiAnUmFuZ2UgYmxrbm86IDAsIHJldm1hcCBpdGVtOiAoMSwwKSwgaW5k ZXggdHVwbGU6ICgyLDEpJykKKyAgICB9LAorICAgIHsKKyAgICAgICAgIyBlbXB0eSByYW5nZSBp bmRleCB0dXBsZSBhbGxfbnVsbHMgLT4gZmFsc2UKKworICAgICAgICBmaW5kICAgICA9PiBwYWNr KCdMQ0MnLCAwLCAweEE4LCAweDAxKSwKKyAgICAgICAgcmVwbGFjZSAgPT4gcGFjaygnTENDJywg MCwgMHhBOCwgMHgwMCksCisgICAgICAgIGJsa25vICAgID0+IDIsICMgcmVndWxhciBwYWdlCisg ICAgICAgIGV4cGVjdGVkID0+IHdyYXAoJ2VtcHR5IHJhbmdlIGluZGV4IHR1cGxlIGF0dHJpYnV0 ZSAwIHdpdGggYWxsbnVsbHMgaXMgZmFsc2UuICcKKyAgICAgICAgICAgIC4gJ1JhbmdlIGJsa25v OiAwLCByZXZtYXAgaXRlbTogKDEsMCksIGluZGV4IHR1cGxlOiAoMiwxKScpCisgICAgfSwKKyAg ICB7CisgICAgICAgICMgZW1wdHkgcmFuZ2UgaW5kZXggdHVwbGUgaGFzX251bGxzIC0+IHRydWUK KworICAgICAgICBmaW5kICAgICA9PiBwYWNrKCdMQ0MnLCAwLCAweEE4LCAweDAxKSwKKyAgICAg ICAgcmVwbGFjZSAgPT4gcGFjaygnTENDJywgMCwgMHhBOCwgMHgwMyksCisgICAgICAgIGJsa25v ICAgID0+IDIsICMgcmVndWxhciBwYWdlCisgICAgICAgIGV4cGVjdGVkID0+IHdyYXAoJ2VtcHR5 IHJhbmdlIGluZGV4IHR1cGxlIGF0dHJpYnV0ZSAwIHdpdGggaGFzbnVsbHMgaXMgdHJ1ZS4gJwor ICAgICAgICAgICAgLiAnUmFuZ2UgYmxrbm86IDAsIHJldm1hcCBpdGVtOiAoMSwwKSwgaW5kZXgg dHVwbGU6ICgyLDEpJykKKyAgICB9LAorICAgIHsKKyAgICAgICAgIyBpbnZhbGlkIGluZGV4IHR1 cGxlIGRhdGEKKyAgICAgICAgIyByZXBsYWNlIHZhcmxlbmEgbGVuIHdpdGggRkYgLSBzaG91bGQg d29yayB3aXRoIGFueSBlbmRpYW5uZXNzCisKKyAgICAgICAgZmluZCAgICAgICA9PiBwYWNrKCdM Q0NDQycsIDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDApIC4gJy4nIC4gJ2FhYWFhJywKKyAgICAg ICAgcmVwbGFjZSAgICA9PiBwYWNrKCdMQ0NDQ0MnLCAwLCAweDA4LCAweDAwLCAweDAwLCAweDAw LCAweEZGKSAuICdhYWFhYScsCisgICAgICAgIGJsa25vICAgICAgPT4gMiwgIyByZWd1bGFyIHBh Z2UKKyAgICAgICAgdGFibGVfZGF0YSA9PiBzdWIgeworICAgICAgICAgICAgbXkgKCR0ZXN0X3N0 cnVjdCkgPSBAXzsKKyAgICAgICAgICAgIHJldHVybiBxcShJTlNFUlQgSU5UTyAkdGVzdF9zdHJ1 Y3QtPnt0YWJsZV9uYW1lfSAoYSkgVkFMVUVTICgnYWFhYWEnKTspOworICAgICAgICB9LAorICAg ICAgICBleHBlY3RlZCAgID0+IHFyL2F0dHJpYnV0ZSAwIHN0b3JlZCB2YWx1ZSAwIHdpdGggbGVu Z3RoIC0xIGVuZHMgYXQgb2Zmc2V0IDEyNyBiZXlvbmQgdG90YWwgdHVwbGUgbGVuZ3RoIC4uXC5c USBSYW5nZSBibGtubzogMCwgcmV2bWFwIGl0ZW06ICgxLDApLCBpbmRleCB0dXBsZTogKDIsMSlc RS8KKyAgICB9LAorICAgIHsKKyAgICAgICAgIyBvcnBoYW4gaW5kZXggdHVwbGUKKyAgICAgICAg IyByZXBsYWNlIHZhbGlkIHJldm1hcCBpdGVtIHdpdGggKDAsMCkKKworICAgICAgICBmaW5kICAg ICAgID0+IHBhY2soJ1MqJywgMCwgMiwgMSksCisgICAgICAgIHJlcGxhY2UgICAgPT4gcGFjaygn UyonLCAwLCAwLCAwKSwKKyAgICAgICAgYmxrbm8gICAgICA9PiAxLCAjIHJldm1hcCBwYWdlCisg ICAgICAgIHRhYmxlX2RhdGEgPT4gc3ViIHsKKyAgICAgICAgICAgIG15ICgkdGVzdF9zdHJ1Y3Qp ID0gQF87CisgICAgICAgICAgICByZXR1cm4gcXEoSU5TRVJUIElOVE8gJHRlc3Rfc3RydWN0LT57 dGFibGVfbmFtZX0gKGEpIFZBTFVFUyAoJ2FhYWFhJyk7KTsKKyAgICAgICAgfSwKKyAgICAgICAg ZXhwZWN0ZWQgICA9PiB3cmFwKCJyZXZtYXAgZG9lc24ndCBwb2ludCB0byBpbmRleCB0dXBsZS4g UmFuZ2UgYmxrbm86IDAsIHJldm1hcCBpdGVtOiAoMSwwKSwgaW5kZXggdHVwbGU6ICgyLDEpIikK KyAgICB9CispOworCisKKyMgaW5pdCB0ZXN0IGRhdGEKK215ICRpID0gMTsKK2ZvcmVhY2ggbXkg JHRlc3Rfc3RydWN0IChAdGVzdHMpIHsKKworICAgICR0ZXN0X3N0cnVjdC0+e3RhYmxlX25hbWV9 ID0gJ3QnIC4gJGkrKzsKKyAgICAkdGVzdF9zdHJ1Y3QtPntpbmRleF9uYW1lfSA9ICR0ZXN0X3N0 cnVjdC0+e3RhYmxlX25hbWV9IC4gJ19icmluX2lkeCc7CisKKyAgICBteSAkdGVzdF9kYXRhX3Nx bCA9ICcnOworICAgIGlmIChleGlzdHMgJHRlc3Rfc3RydWN0LT57dGFibGVfZGF0YX0pIHsKKyAg ICAgICAgJHRlc3RfZGF0YV9zcWwgPSAkdGVzdF9zdHJ1Y3QtPnt0YWJsZV9kYXRhfS0+KCR0ZXN0 X3N0cnVjdCk7CisgICAgfQorCisgICAgJG5vZGUtPnNhZmVfcHNxbCgncG9zdGdyZXMnLCBxcSgK KyAgICAgICAgQ1JFQVRFIFRBQkxFICR0ZXN0X3N0cnVjdC0+e3RhYmxlX25hbWV9IChhIFRFWFQp OworICAgICAgICAkdGVzdF9kYXRhX3NxbAorICAgICAgICBDUkVBVEUgSU5ERVggJHRlc3Rfc3Ry dWN0LT57aW5kZXhfbmFtZX0gT04gJHRlc3Rfc3RydWN0LT57dGFibGVfbmFtZX0gVVNJTkcgQlJJ TiAoYSk7CisgICAgKSk7CisKKyAgICAkdGVzdF9zdHJ1Y3QtPntyZWxwYXRofSA9IHJlbGF0aW9u X2ZpbGVwYXRoKCR0ZXN0X3N0cnVjdC0+e2luZGV4X25hbWV9KTsKK30KKworIyBjb3JydXB0IGlu ZGV4Ciskbm9kZS0+c3RvcDsKKworZm9yZWFjaCBteSAkdGVzdF9zdHJ1Y3QgKEB0ZXN0cykgewor ICAgIHN0cmluZ19yZXBsYWNlX2Jsb2NrKAorICAgICAgICAkdGVzdF9zdHJ1Y3QtPntyZWxwYXRo fSwKKyAgICAgICAgJHRlc3Rfc3RydWN0LT57ZmluZH0sCisgICAgICAgICR0ZXN0X3N0cnVjdC0+ e3JlcGxhY2V9LAorICAgICAgICAkdGVzdF9zdHJ1Y3QtPntibGtub30KKyAgICApOworfQorCisj IGFzc2VydGlvbnMKKyRub2RlLT5zdGFydDsKKworZm9yZWFjaCBteSAkdGVzdF9zdHJ1Y3QgKEB0 ZXN0cykgeworICAgIG15ICgkcmVzdWx0LCAkc3Rkb3V0LCAkc3RkZXJyKSA9ICRub2RlLT5wc3Fs KCdwb3N0Z3JlcycsIHFxKFNFTEVDVCBicmluX2luZGV4X2NoZWNrKCckdGVzdF9zdHJ1Y3QtPntp bmRleF9uYW1lfScsIHRydWUpKSk7CisgICAgbGlrZSgkc3RkZXJyLCAkdGVzdF9zdHJ1Y3QtPntl eHBlY3RlZH0pOworfQorCisKKyMgSGVscGVycworCisjIFJldHVybnMgdGhlIGZpbGVzeXN0ZW0g cGF0aCBmb3IgdGhlIG5hbWVkIHJlbGF0aW9uLgorc3ViIHJlbGF0aW9uX2ZpbGVwYXRoIHsKKyAg ICBteSAoJHJlbG5hbWUpID0gQF87CisKKyAgICBteSAkcGdkYXRhID0gJG5vZGUtPmRhdGFfZGly OworICAgIG15ICRyZWwgPSAkbm9kZS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisgICAgICAgIHFx KFNFTEVDVCBwZ19yZWxhdGlvbl9maWxlcGF0aCgnJHJlbG5hbWUnKSkpOworICAgIGRpZSAicGF0 aCBub3QgZm91bmQgZm9yIHJlbGF0aW9uICRyZWxuYW1lIiB1bmxlc3MgZGVmaW5lZCAkcmVsOwor ICAgIHJldHVybiAiJHBnZGF0YS8kcmVsIjsKK30KKworc3ViIHN0cmluZ19yZXBsYWNlX2Jsb2Nr IHsKKyAgICBteSAoJGZpbGVuYW1lLCAkZmluZCwgJHJlcGxhY2UsICRibGtubykgPSBAXzsKKwor ICAgIG15ICRmaDsKKyAgICBvcGVuKCRmaCwgJys8JywgJGZpbGVuYW1lKSBvciBCQUlMX09VVCgi b3BlbiBmYWlsZWQ6ICQhIik7CisgICAgYmlubW9kZSAkZmg7CisKKyAgICBteSAkb2Zmc2V0ID0g JGJsa25vICogJGJsa3NpemU7CisgICAgbXkgJGJ1ZmZlcjsKKworICAgIHN5c3NlZWsoJGZoLCAk b2Zmc2V0LCAwKSBvciBCQUlMX09VVCgic2VlayBmYWlsZWQ6ICQhIik7CisgICAgc3lzcmVhZCgk ZmgsICRidWZmZXIsICRibGtzaXplKSBvciBCQUlMX09VVCgicmVhZCBmYWlsZWQ6ICQhIik7CisK KyAgICAkYnVmZmVyID1+IHMvJGZpbmQvJyInIC4gJHJlcGxhY2UgLiAnIicvZ2VlOworCisgICAg c3lzc2VlaygkZmgsICRvZmZzZXQsIDApIG9yIEJBSUxfT1VUKCJzZWVrIGZhaWxlZDogJCEiKTsK KyAgICBzeXN3cml0ZSgkZmgsICRidWZmZXIpIG9yIEJBSUxfT1VUKCJ3cml0ZSBmYWlsZWQ6ICQh Iik7CisKKyAgICBjbG9zZSgkZmgpIG9yIEJBSUxfT1VUKCJjbG9zZSBmYWlsZWQ6ICQhIik7CisK KyAgICByZXR1cm47Cit9CisKK3N1YiB3cmFwCit7CisgICAgbXkgJGlucHV0ID0gQF87CisgICAg cmV0dXJuIHFyL1xRJGlucHV0XEUvCit9CisKK2RvbmVfdGVzdGluZygpOwpcIE5vIG5ld2xpbmUg YXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2NvbnRyaWIvYW1jaGVjay92ZXJpZnlfYnJpbi5j IGIvY29udHJpYi9hbWNoZWNrL3ZlcmlmeV9icmluLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k ZXggMDAwMDAwMDAwMDAuLjdlNDQ1MDAzYWNlCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9h bWNoZWNrL3ZlcmlmeV9icmluLmMKQEAgLTAsMCArMSw4MDcgQEAKKy8qLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQorICoKKyAqIHZlcmlmeV9icmluLmMKKyAqCSAgRnVuY3Rpb25zIHRvIGNoZWNrIHBvc3RncmVz cWwgYnJpbiBpbmRleGVzIGZvciBjb3JydXB0aW9uCisgKgorICogQ29weXJpZ2h0IChjKSAyMDE2 LTIwMjQsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisgKgorICoJICBjb250 cmliL2FtY2hlY2svdmVyaWZ5X2JyaW4uYworICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKyNpbmNs dWRlICJwb3N0Z3Jlcy5oIgorCisjaW5jbHVkZSAiYWNjZXNzL2h0dXBfZGV0YWlscy5oIgorI2lu Y2x1ZGUgImFjY2Vzcy90YWJsZS5oIgorI2luY2x1ZGUgImFjY2Vzcy90YWJsZWFtLmgiCisjaW5j bHVkZSAiYWNjZXNzL3RyYW5zYW0uaCIKKyNpbmNsdWRlICJhY2Nlc3MvYnJpbi5oIgorI2luY2x1 ZGUgImNhdGFsb2cvaW5kZXguaCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX2FtX2QuaCIKKyNpbmNs dWRlICJjYXRhbG9nL3BnX29wZXJhdG9yLmgiCisjaW5jbHVkZSAibWlzY2FkbWluLmgiCisjaW5j bHVkZSAic3RvcmFnZS9sbWdyLmgiCisjaW5jbHVkZSAic3RvcmFnZS9zbWdyLmgiCisjaW5jbHVk ZSAidXRpbHMvZ3VjLmgiCisjaW5jbHVkZSAidXRpbHMvbWVtdXRpbHMuaCIKKyNpbmNsdWRlICJh Y2Nlc3MvYnJpbl9wYWdlLmgiCisjaW5jbHVkZSAiYWNjZXNzL2JyaW5fcmV2bWFwLmgiCisjaW5j bHVkZSAidXRpbHMvbHN5c2NhY2hlLmgiCisjaW5jbHVkZSAidmVyaWZ5X2NvbW1vbi5oIgorI2lu Y2x1ZGUgInV0aWxzL2J1aWx0aW5zLmgiCisjaW5jbHVkZSAidXRpbHMvYXJyYXkuaCIKKworCitQ R19GVU5DVElPTl9JTkZPX1YxKGJyaW5faW5kZXhfY2hlY2spOworCit0eXBlZGVmIHN0cnVjdCBC cmluQ2hlY2tTdGF0ZQoreworCisJLyogQ2hlY2sgYXJndW1lbnRzICovCisKKwlib29sCQlyZWd1 bGFyX3BhZ2VzX2NoZWNrOworCisJLyogQlJJTiBjaGVjayBjb21tb24gZmllbGRzICovCisKKwlS ZWxhdGlvbglpZHhyZWw7CisJUmVsYXRpb24JaGVhcHJlbDsKKwlCcmluRGVzYyAgICpiZGVzYzsK KwlpbnQJCQluYXR0czsKKwlCbG9ja051bWJlciBwYWdlc1BlclJhbmdlOworCisJLyogSW5kZXgg c3RydWN0dXJlIGNoZWNrIGZpZWxkcyAqLworCisJQnVmZmVyQWNjZXNzU3RyYXRlZ3kgY2hlY2tz dHJhdGVneTsKKwlCbG9ja051bWJlciBpZHhuYmxvY2tzOworCUJsb2NrTnVtYmVyIGhlYXBuYmxv Y2tzOworCUJsb2NrTnVtYmVyIGxhc3RSZXZtYXBQYWdlOworCS8qIEN1cnJlbnQgcmFuZ2UgYmxr bm8gKi8KKwlCbG9ja051bWJlciByYW5nZUJsa25vOworCS8qIEN1cnJlbnQgcmV2bWFwIGl0ZW0g Ki8KKwlCbG9ja051bWJlciByZXZtYXBCbGs7CisJQnVmZmVyCQlyZXZtYXBidWY7CisJUGFnZQkJ cmV2bWFwcGFnZTsKKwl1aW50MzIJCXJldm1hcGlkeDsKKwkvKiBDdXJyZW50IGluZGV4IHR1cGxl ICovCisJQmxvY2tOdW1iZXIgcmVncGFnZUJsazsKKwlCdWZmZXIJCXJlZ3BhZ2VidWY7CisJUGFn ZQkJcmVncGFnZTsKKwlPZmZzZXROdW1iZXIgcmVncGFnZW9mZnNldDsKKworfQkJCUJyaW5DaGVj a1N0YXRlOworCitzdGF0aWMgdm9pZCBicmluX2NoZWNrKFJlbGF0aW9uIGlkeHJlbCwgUmVsYXRp b24gaGVhcHJlbCwgdm9pZCAqY2FsbGJhY2tfc3RhdGUsIGJvb2wgcmVhZG9ubHkpOworCitzdGF0 aWMgdm9pZCBjaGVja19icmluX2luZGV4X3N0cnVjdHVyZShCcmluQ2hlY2tTdGF0ZSAqIHBTdGF0 ZSk7CisKK3N0YXRpYyB2b2lkIGNoZWNrX21ldGEoQnJpbkNoZWNrU3RhdGUgKiBzdGF0ZSk7CisK K3N0YXRpYyB2b2lkIGNoZWNrX3Jldm1hcChCcmluQ2hlY2tTdGF0ZSAqIHN0YXRlKTsKKworc3Rh dGljIHZvaWQgY2hlY2tfcmV2bWFwX2l0ZW0oQnJpbkNoZWNrU3RhdGUgKiBzdGF0ZSk7CisKK3N0 YXRpYyB2b2lkIGNoZWNrX2luZGV4X3R1cGxlKEJyaW5DaGVja1N0YXRlICogc3RhdGUsIEJyaW5U dXBsZSAqdHVwbGUsIEl0ZW1JZCBscCk7CisKK3N0YXRpYyB2b2lkIGNoZWNrX3JlZ3VsYXJfcGFn ZXMoQnJpbkNoZWNrU3RhdGUgKiBzdGF0ZSk7CisKK3N0YXRpYyBib29sIHJldm1hcF9wb2ludHNf dG9faW5kZXhfdHVwbGUoQnJpbkNoZWNrU3RhdGUgKiBzdGF0ZSk7CisKK3N0YXRpYyBJdGVtSWQg UGFnZUdldEl0ZW1JZENhcmVmdWwoQnJpbkNoZWNrU3RhdGUgKiBzdGF0ZSk7CisKK3N0YXRpYyB2 b2lkIGJyaW5fY2hlY2tfZXJlcG9ydChCcmluQ2hlY2tTdGF0ZSAqIHN0YXRlLCBjb25zdCBjaGFy ICpmbXQpOworCitzdGF0aWMgdm9pZCByZXZtYXBfaXRlbV9lcmVwb3J0KEJyaW5DaGVja1N0YXRl ICogc3RhdGUsIGNvbnN0IGNoYXIgKmZtdCk7CisKK3N0YXRpYyB2b2lkIGluZGV4X3R1cGxlX2Vy ZXBvcnQoQnJpbkNoZWNrU3RhdGUgKiBzdGF0ZSwgY29uc3QgY2hhciAqZm10KTsKKworc3RhdGlj IHZvaWQgaW5kZXhfdHVwbGVfb25seV9lcmVwb3J0KEJyaW5DaGVja1N0YXRlICogc3RhdGUsIGNv bnN0IGNoYXIgKmZtdCk7CisKKworRGF0dW0KK2JyaW5faW5kZXhfY2hlY2soUEdfRlVOQ1RJT05f QVJHUykKK3sKKwlPaWQJCQlpbmRyZWxpZCA9IFBHX0dFVEFSR19PSUQoMCk7CisJQnJpbkNoZWNr U3RhdGUgKnN0YXRlID0gcGFsbG9jMChzaXplb2YoQnJpbkNoZWNrU3RhdGUpKTsKKworCXN0YXRl LT5yZWd1bGFyX3BhZ2VzX2NoZWNrID0gUEdfR0VUQVJHX0JPT0woMSk7CisKKwlhbWNoZWNrX2xv Y2tfcmVsYXRpb25fYW5kX2NoZWNrKGluZHJlbGlkLAorCQkJCQkJCQkJQlJJTl9BTV9PSUQsCisJ CQkJCQkJCQlicmluX2NoZWNrLAorCQkJCQkJCQkJU2hhcmVVcGRhdGVFeGNsdXNpdmVMb2NrLAor CQkJCQkJCQkJc3RhdGUpOworCisJUEdfUkVUVVJOX1ZPSUQoKTsKK30KKworLyoKKyAqIE1haW4g Y2hlY2sgZnVuY3Rpb24KKyAqLworc3RhdGljIHZvaWQKK2JyaW5fY2hlY2soUmVsYXRpb24gaWR4 cmVsLCBSZWxhdGlvbiBoZWFwcmVsLCB2b2lkICpjYWxsYmFja19zdGF0ZSwgYm9vbCByZWFkb25s eSkKK3sKKwlCcmluQ2hlY2tTdGF0ZSAqc3RhdGUgPSAoQnJpbkNoZWNrU3RhdGUgKikgY2FsbGJh Y2tfc3RhdGU7CisKKwkvKiBJbml0aWFsaXplIGNoZWNrIGNvbW1vbiBmaWVsZHMgKi8KKwlzdGF0 ZS0+aWR4cmVsID0gaWR4cmVsOworCXN0YXRlLT5oZWFwcmVsID0gaGVhcHJlbDsKKwlzdGF0ZS0+ YmRlc2MgPSBicmluX2J1aWxkX2Rlc2MoaWR4cmVsKTsKKwlzdGF0ZS0+bmF0dHMgPSBzdGF0ZS0+ YmRlc2MtPmJkX3R1cGRlc2MtPm5hdHRzOworCisKKwljaGVja19icmluX2luZGV4X3N0cnVjdHVy ZShzdGF0ZSk7CisKKworCWJyaW5fZnJlZV9kZXNjKHN0YXRlLT5iZGVzYyk7Cit9CisKKy8qCisg KiBDaGVjayB0aGF0IGluZGV4IGhhcyBleHBlY3RlZCBzdHJ1Y3R1cmUKKyAqCisgKiAgU29tZSBj aGVjayBleHBlY3RhdGlvbnM6CisgKiAtIHdlIGhvbGQgU2hhcmVVcGRhdGVFeGNsdXNpdmVMb2Nr LCBzbyByZXZtYXAgY291bGQgbm90IGJlIGV4dGVuZGVkIChpLmUuIG5vIGV2YWN1YXRpb24pIHdo aWxlIGNoZWNrIGFzIHdlbGwgYXMKKyAqICAgYWxsIHJlZ3VsYXIgcGFnZXMgc2hvdWxkIHN0YXkg cmVndWxhciBhbmQgcmFuZ2VzIGNvdWxkIG5vdCBiZSBzdW1tYXJpemVkIGFuZCBkZXN1bW1hcml6 ZWQuCisgKiAgIE5ldmVydGhlbGVzcywgY29uY3VycmVudCB1cGRhdGVzIGNvdWxkIGxlYWQgdG8g bmV3IHJlZ3VsYXIgcGFnZSBhbGxvY2F0aW9ucworICogICBhbmQgbW92aW5nIG9mIGluZGV4IHR1 cGxlcy4KKyAqIC0gaWYgcmV2bWFwIHBvaW50ZXIgaXMgdmFsaWQgdGhlcmUgc2hvdWxkIGJlIHZh bGlkIGluZGV4IHR1cGxlIGl0IHBvaW50cyB0by4KKyAqIC0gdGhlcmUgYXJlIG5vIG9ycGhhbiBp bmRleCB0dXBsZXMgKGlmIHRoZXJlIGlzIGFuIGluZGV4IHR1cGxlLCB0aGUgcmV2bWFwIGl0ZW0g cG9pbnRzIHRvIHRoaXMgdHVwbGUgYWxzbyBtdXN0IGV4aXN0KQorICogLSBpdCdzIHBvc3NpYmxl IHRvIGVuY291bnRlciBwbGFjZWhvbGRlciB0dXBsZXMgKGFzIGEgcmVzdWx0IG9mIGNyYXNoKQor ICogLSBpdCdzIHBvc3NpYmxlIHRvIGVuY291bnRlciBuZXcgcGFnZXMgaW5zdGVhZCBvZiByZWd1 bGFyIChhcyBhIHJlc3VsdCBvZiBjcmFzaCkKKyAqIC0gaXQncyBwb3NzaWJsZSB0byBlbmNvdW50 ZXIgcGFnZXMgd2l0aCBldmFjdWF0aW9uIGJpdCAoYXMgYSByZXN1bHQgb2YgY3Jhc2gpCisgKgor ICovCitzdGF0aWMgdm9pZAorY2hlY2tfYnJpbl9pbmRleF9zdHJ1Y3R1cmUoQnJpbkNoZWNrU3Rh dGUgKiBzdGF0ZSkKK3sKKwkvKiBJbmRleCBzdHJ1Y3R1cmUgY2hlY2sgZmllbGRzIGluaXRpYWxp emF0aW9uICovCisJc3RhdGUtPmNoZWNrc3RyYXRlZ3kgPSBHZXRBY2Nlc3NTdHJhdGVneShCQVNf QlVMS1JFQUQpOworCisJY2hlY2tfbWV0YShzdGF0ZSk7CisKKwkvKiBDaGVjayByZXZtYXAgZmly c3QsIGJsb2NrczogWzEsIGxhc3RSZXZtYXBQYWdlXSAqLworCWNoZWNrX3Jldm1hcChzdGF0ZSk7 CisKKwkvKiBDaGVjayByZWd1bGFyIHBhZ2VzLCBibG9ja3M6IFtsYXN0UmV2bWFwUGFnZSArIDEs IGlkeG5ibG9ja3NdICovCisJY2hlY2tfcmVndWxhcl9wYWdlcyhzdGF0ZSk7Cit9CisKKy8qIE1l dGEgcGFnZSBjaGVjayBhbmQgc2F2ZSBzb21lIGRhdGEgZm9yIHRoZSBmdXJ0aGVyIGNoZWNrICov CitzdGF0aWMgdm9pZAorY2hlY2tfbWV0YShCcmluQ2hlY2tTdGF0ZSAqIHN0YXRlKQoreworCUJ1 ZmZlcgkJbWV0YWJ1ZjsKKwlQYWdlCQltZXRhcGFnZTsKKwlCcmluTWV0YVBhZ2VEYXRhICptZXRh ZGF0YTsKKworCS8qIE1ldGEgcGFnZSBjaGVjayAqLworCW1ldGFidWYgPSBSZWFkQnVmZmVyRXh0 ZW5kZWQoc3RhdGUtPmlkeHJlbCwgTUFJTl9GT1JLTlVNLCBCUklOX01FVEFQQUdFX0JMS05PLCBS Qk1fTk9STUFMLAorCQkJCQkJCQkgc3RhdGUtPmNoZWNrc3RyYXRlZ3kpOworCUxvY2tCdWZmZXIo bWV0YWJ1ZiwgQlVGRkVSX0xPQ0tfU0hBUkUpOworCW1ldGFwYWdlID0gQnVmZmVyR2V0UGFnZSht ZXRhYnVmKTsKKwltZXRhZGF0YSA9IChCcmluTWV0YVBhZ2VEYXRhICopIFBhZ2VHZXRDb250ZW50 cyhtZXRhcGFnZSk7CisJc3RhdGUtPmlkeG5ibG9ja3MgPSBSZWxhdGlvbkdldE51bWJlck9mQmxv Y2tzKHN0YXRlLT5pZHhyZWwpOworCisKKwlpZiAoIUJSSU5fSVNfTUVUQV9QQUdFKG1ldGFwYWdl KSB8fAorCQltZXRhZGF0YS0+YnJpbk1hZ2ljICE9IEJSSU5fTUVUQV9NQUdJQyB8fAorCQltZXRh ZGF0YS0+YnJpblZlcnNpb24gIT0gQlJJTl9DVVJSRU5UX1ZFUlNJT04gfHwKKwkJbWV0YWRhdGEt PnBhZ2VzUGVyUmFuZ2UgPCAxIHx8IG1ldGFkYXRhLT5wYWdlc1BlclJhbmdlID4gQlJJTl9NQVhf UEFHRVNfUEVSX1JBTkdFIHx8CisJCW1ldGFkYXRhLT5sYXN0UmV2bWFwUGFnZSA8PSBCUklOX01F VEFQQUdFX0JMS05PIHx8IG1ldGFkYXRhLT5sYXN0UmV2bWFwUGFnZSA+PSBzdGF0ZS0+aWR4bmJs b2NrcykKKwl7CisJCWJyaW5fY2hlY2tfZXJlcG9ydChzdGF0ZSwgIm1ldGFwYWdlIGlzIGNvcnJ1 cHRlZCIpOworCX0KKworCXN0YXRlLT5sYXN0UmV2bWFwUGFnZSA9IG1ldGFkYXRhLT5sYXN0UmV2 bWFwUGFnZTsKKwlzdGF0ZS0+cGFnZXNQZXJSYW5nZSA9IG1ldGFkYXRhLT5wYWdlc1BlclJhbmdl OworCVVubG9ja1JlbGVhc2VCdWZmZXIobWV0YWJ1Zik7Cit9CisKKy8qCisgKiBXYWxrIHJldm1h cCBwYWdlIGJ5IHBhZ2UgZnJvbSB0aGUgYmVnaW5uaW5nIGFuZCBjaGVjayBldmVyeSByZXZtYXAg aXRlbS4KKyAqIEFsc28gY2hlY2sgdGhhdCBhbGwgcGFnZXMgd2l0aGluIFsxLCBsYXN0UmV2bWFw UGFnZV0gYXJlIHJldm1hcCBwYWdlcy4KKyAqLworc3RhdGljIHZvaWQKK2NoZWNrX3Jldm1hcChC cmluQ2hlY2tTdGF0ZSAqIHN0YXRlKQoreworCVJlbGF0aW9uCWlkeHJlbCA9IHN0YXRlLT5pZHhy ZWw7CisJQmxvY2tOdW1iZXIgbGFzdFJldm1hcFBhZ2UgPSBzdGF0ZS0+bGFzdFJldm1hcFBhZ2U7 CisKKwlzdGF0ZS0+cmFuZ2VCbGtubyA9IDA7CisJc3RhdGUtPnJlZ3BhZ2VidWYgPSBJbnZhbGlk QnVmZmVyOworCXN0YXRlLT5oZWFwbmJsb2NrcyA9IFJlbGF0aW9uR2V0TnVtYmVyT2ZCbG9ja3Mo c3RhdGUtPmhlYXByZWwpOworCisJLyogV2FsayBlYWNoIHJldm1hcCBwYWdlICovCisJZm9yIChz dGF0ZS0+cmV2bWFwQmxrID0gQlJJTl9NRVRBUEFHRV9CTEtOTyArIDE7IHN0YXRlLT5yZXZtYXBC bGsgPD0gbGFzdFJldm1hcFBhZ2U7IHN0YXRlLT5yZXZtYXBCbGsrKykKKwl7CisKKwkJc3RhdGUt PnJldm1hcGJ1ZiA9IFJlYWRCdWZmZXJFeHRlbmRlZChpZHhyZWwsIE1BSU5fRk9SS05VTSwgc3Rh dGUtPnJldm1hcEJsaywgUkJNX05PUk1BTCwKKwkJCQkJCQkJCQkJICBzdGF0ZS0+Y2hlY2tzdHJh dGVneSk7CisJCUxvY2tCdWZmZXIoc3RhdGUtPnJldm1hcGJ1ZiwgQlVGRkVSX0xPQ0tfU0hBUkUp OworCQlzdGF0ZS0+cmV2bWFwcGFnZSA9IEJ1ZmZlckdldFBhZ2Uoc3RhdGUtPnJldm1hcGJ1Zik7 CisKKwkJLyoKKwkJICogUGFnZXMgd2l0aCBibG9jayBudW1iZXJzIGluIFsxLCBsYXN0UmV2bWFw UGFnZV0gc2hvdWxkIGJlIHJldm1hcAorCQkgKiBwYWdlcworCQkgKi8KKwkJaWYgKCFCUklOX0lT X1JFVk1BUF9QQUdFKHN0YXRlLT5yZXZtYXBwYWdlKSkKKwkJeworCQkJYnJpbl9jaGVja19lcmVw b3J0KHN0YXRlLCBwc3ByaW50ZigicmV2bWFwIHBhZ2UgaXMgZXhwZWN0ZWQgYXQgYmxvY2sgJXUs IGxhc3QgcmV2bWFwIHBhZ2UgJXUiLAorCQkJCQkJCQkJCQkgICBzdGF0ZS0+cmV2bWFwQmxrLAor CQkJCQkJCQkJCQkgICBsYXN0UmV2bWFwUGFnZSkpOworCQl9CisJCUxvY2tCdWZmZXIoc3RhdGUt PnJldm1hcGJ1ZiwgQlVGRkVSX0xPQ0tfVU5MT0NLKTsKKworCQkvKiBXYWxrIGFuZCBjaGVjayBh bGwgYnJpbiB0dXBsZXMgZnJvbSB0aGUgY3VycmVudCByZXZtYXAgcGFnZSAqLworCQlzdGF0ZS0+ cmV2bWFwaWR4ID0gMDsKKwkJd2hpbGUgKHN0YXRlLT5yZXZtYXBpZHggPCBSRVZNQVBfUEFHRV9N QVhJVEVNUykKKwkJeworCQkJQ0hFQ0tfRk9SX0lOVEVSUlVQVFMoKTsKKworCQkJLyogQ2hlY2sg cmV2bWFwIGl0ZW0gKi8KKwkJCWNoZWNrX3Jldm1hcF9pdGVtKHN0YXRlKTsKKworCQkJc3RhdGUt PnJhbmdlQmxrbm8gKz0gc3RhdGUtPnBhZ2VzUGVyUmFuZ2U7CisJCQlzdGF0ZS0+cmV2bWFwaWR4 Kys7CisJCX0KKworCQllbG9nKERFQlVHMywgIkNvbXBsZXRlIHJldm1hcCBwYWdlIGNoZWNrOiAl ZCIsIHN0YXRlLT5yZXZtYXBCbGspOworCisJCVJlbGVhc2VCdWZmZXIoc3RhdGUtPnJldm1hcGJ1 Zik7CisJfQorCisJaWYgKEJ1ZmZlcklzVmFsaWQoc3RhdGUtPnJlZ3BhZ2VidWYpKQorCXsKKwkJ UmVsZWFzZUJ1ZmZlcihzdGF0ZS0+cmVncGFnZWJ1Zik7CisJfQorfQorCisvKgorICogQ2hlY2sg cmV2bWFwIGl0ZW0uCisgKgorICogV2UgY2hlY2sgcmV2bWFwIGl0ZW0gcG9pbnRlciBpdHNlbGYg YW5kIGlmIGl0IGlzIG9rIHdlIGNoZWNrIHRoZSBpbmRleCB0dXBsZSBpdCBwb2ludHMgdG8uCisg KgorICogVG8gYXZvaWQgZGVhZGxvY2sgd2UgbmVlZCB0byB1bmxvY2sgcmV2bWFwIHBhZ2UgYmVm b3JlIGxvY2tpbmcgcmVndWxhciBwYWdlLAorICogc28gd2hlbiB3ZSBnZXQgdGhlIGxvY2sgb24g dGhlIHJlZ3VsYXIgcGFnZSBvdXIgaW5kZXggdHVwbGUgcG9pbnRlciBtYXkgbm8gbG9uZ2VyIGJl IHJlbGV2YW50LgorICogU28gZm9yIHNvbWUgY2hlY2tzIGJlZm9yZSByZXBvcnRpbmcgYW4gZXJy b3Igd2UgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCBvdXIgcG9pbnRlciBpcyBzdGlsbCByZWxldmFu dCBhbmQgaWYgaXQncyBub3QgLSByZXRyeS4KKyAqLworc3RhdGljIHZvaWQKK2NoZWNrX3Jldm1h cF9pdGVtKEJyaW5DaGVja1N0YXRlICogc3RhdGUpCit7CisJSXRlbVBvaW50ZXJEYXRhICpyZXZt YXB0aWRzOworCVJldm1hcENvbnRlbnRzICpjb250ZW50czsKKwlJdGVtUG9pbnRlckRhdGEgKmlw dHI7CisJSXRlbUlkCQlscDsKKwlCcmluVHVwbGUgICp0dXA7CisJUmVsYXRpb24JaWR4cmVsID0g c3RhdGUtPmlkeHJlbDsKKworCS8qIExvb3AgdG8gcmV0cnkgcmV2bWFwIGl0ZW0gY2hlY2sgaWYg dGhlcmUgd2FzIGEgY29uY3VycmVudCB1cGRhdGUuICovCisJZm9yICg7OykKKwl7CisJCUxvY2tC dWZmZXIoc3RhdGUtPnJldm1hcGJ1ZiwgQlVGRkVSX0xPQ0tfU0hBUkUpOworCisJCWNvbnRlbnRz ID0gKFJldm1hcENvbnRlbnRzICopIFBhZ2VHZXRDb250ZW50cyhCdWZmZXJHZXRQYWdlKHN0YXRl LT5yZXZtYXBidWYpKTsKKwkJcmV2bWFwdGlkcyA9IGNvbnRlbnRzLT5ybV90aWRzOworCQkvKiBQ b2ludGVyIGZvciB0aGUgcmFuZ2Ugd2l0aCBzdGFydCBhdCBzdGF0ZS0+cmFuZ2VCbGtubyAqLwor CQlpcHRyID0gcmV2bWFwdGlkcyArIHN0YXRlLT5yZXZtYXBpZHg7CisKKwkJLyogQXQgZmlyc3Qg Y2hlY2sgcmV2bWFwIGl0ZW0gcG9pbnRlciAqLworCisJCS8qCisJCSAqIFR1cGxlIHBvaW50ZXIg aXMgaW52YWxpZCBtZWFucyByYW5nZSBpc24ndCBzdW1tYXJpemVkLCBqdXN0IG1vdmUKKwkJICog ZnVydGhlcgorCQkgKi8KKwkJaWYgKCFJdGVtUG9pbnRlcklzVmFsaWQoaXB0cikpCisJCXsKKwkJ CWVsb2coREVCVUczLCAiUmFuZ2UgJXUgaXMgbm90IHN1bW1hcml6ZWQiLCBzdGF0ZS0+cmFuZ2VC bGtubyk7CisJCQlMb2NrQnVmZmVyKHN0YXRlLT5yZXZtYXBidWYsIEJVRkZFUl9MT0NLX1VOTE9D Syk7CisJCQlicmVhazsKKwkJfQorCisJCS8qCisJCSAqIFBvaW50ZXIgaXMgdmFsaWQsIGl0IHNo b3VsZCBwb2ludHMgdG8gaW5kZXggdHVwbGUgZm9yIHRoZSByYW5nZQorCQkgKiB3aXRoIGJsa25v IHJhbmdlQmxrbm8uIFJlbWVtYmVyIGl0IGFuZCB1bmxvY2sgcmV2bWFwIHBhZ2UgdG8gYXZvaWQK KwkJICogZGVhZGxvY2sKKwkJICovCisJCXN0YXRlLT5yZWdwYWdlQmxrID0gSXRlbVBvaW50ZXJH ZXRCbG9ja051bWJlcihpcHRyKTsKKwkJc3RhdGUtPnJlZ3BhZ2VvZmZzZXQgPSBJdGVtUG9pbnRl ckdldE9mZnNldE51bWJlcihpcHRyKTsKKworCQlMb2NrQnVmZmVyKHN0YXRlLT5yZXZtYXBidWYs IEJVRkZFUl9MT0NLX1VOTE9DSyk7CisKKwkJLyoKKwkJICogQ2hlY2sgaWYgdGhlIHJlZ3BhZ2Ug YmxvY2sgbnVtYmVyIGlzIGdyZWF0ZXIgdGhhbiB0aGUgcmVsYXRpb24KKwkJICogc2l6ZS4gVG8g YXZvaWQgZmV0Y2hpbmcgdGhlIG51bWJlciBvZiBibG9ja3MgZm9yIGVhY2ggdHVwbGUsIHVzZQor CQkgKiBjYWNoZWQgdmFsdWUgZmlyc3QKKwkJICovCisJCWlmIChzdGF0ZS0+cmVncGFnZUJsayA+ PSBzdGF0ZS0+aWR4bmJsb2NrcykKKwkJeworCQkJLyoKKwkJCSAqIFJlZ3VsYXIgcGFnZXMgbWF5 IGhhdmUgYmVlbiBhZGRlZCwgc28gcmVmcmVzaCBpZHhuYmxvY2tzIGFuZAorCQkJICogcmVjaGVj aworCQkJICovCisJCQlzdGF0ZS0+aWR4bmJsb2NrcyA9IFJlbGF0aW9uR2V0TnVtYmVyT2ZCbG9j a3MoaWR4cmVsKTsKKwkJCWlmIChzdGF0ZS0+cmVncGFnZUJsayA+PSBzdGF0ZS0+aWR4bmJsb2Nr cykKKwkJCXsKKwkJCQlyZXZtYXBfaXRlbV9lcmVwb3J0KHN0YXRlLAorCQkJCQkJCQkJcHNwcmlu dGYoInJldm1hcCBpdGVtIHBvaW50cyB0byBhIG5vbiBleGlzdGluZyBibG9jayAldSwgaW5kZXgg bWF4IGJsb2NrICV1IiwKKwkJCQkJCQkJCQkJIHN0YXRlLT5yZWdwYWdlQmxrLAorCQkJCQkJCQkJ CQkgc3RhdGUtPmlkeG5ibG9ja3MgLSAxKSk7CisJCQl9CisJCX0KKworCQkvKgorCQkgKiBUbyBh dm9pZCBzb21lIHBpbi91bnBpbiBjeWNsZXMgd2UgY2FjaGUgbGFzdCB1c2VkIHJlZ3VsYXIgcGFn ZS4KKwkJICogQ2hlY2sgaWYgd2UgbmVlZCBkaWZmZXJlbnQgcmVndWxhciBwYWdlIGFuZCBmZXRj aCBpdC4KKwkJICovCisJCWlmICghQnVmZmVySXNWYWxpZChzdGF0ZS0+cmVncGFnZWJ1ZikgfHwg QnVmZmVyR2V0QmxvY2tOdW1iZXIoc3RhdGUtPnJlZ3BhZ2VidWYpICE9IHN0YXRlLT5yZWdwYWdl QmxrKQorCQl7CisJCQlpZiAoQnVmZmVySXNWYWxpZChzdGF0ZS0+cmVncGFnZWJ1ZikpCisJCQl7 CisJCQkJUmVsZWFzZUJ1ZmZlcihzdGF0ZS0+cmVncGFnZWJ1Zik7CisJCQl9CisJCQlzdGF0ZS0+ cmVncGFnZWJ1ZiA9IFJlYWRCdWZmZXJFeHRlbmRlZChpZHhyZWwsIE1BSU5fRk9SS05VTSwgc3Rh dGUtPnJlZ3BhZ2VCbGssIFJCTV9OT1JNQUwsCisJCQkJCQkJCQkJCQkgICBzdGF0ZS0+Y2hlY2tz dHJhdGVneSk7CisJCX0KKworCQlMb2NrQnVmZmVyKHN0YXRlLT5yZWdwYWdlYnVmLCBCVUZGRVJf TE9DS19TSEFSRSk7CisJCXN0YXRlLT5yZWdwYWdlID0gQnVmZmVyR2V0UGFnZShzdGF0ZS0+cmVn cGFnZWJ1Zik7CisKKwkJLyogUmV2bWFwIHNob3VsZCBhbHdheXMgcG9pbnQgdG8gYSByZWd1bGFy IHBhZ2UgKi8KKwkJaWYgKCFCUklOX0lTX1JFR1VMQVJfUEFHRShzdGF0ZS0+cmVncGFnZSkpCisJ CXsKKwkJCXJldm1hcF9pdGVtX2VyZXBvcnQoc3RhdGUsCisJCQkJCQkJCXBzcHJpbnRmKCJyZXZt YXAgaXRlbSBwb2ludHMgdG8gdGhlIHBhZ2Ugd2hpY2ggaXMgbm90IHJlZ3VsYXIgKGJsa25vOiAl dSkiLAorCQkJCQkJCQkJCSBzdGF0ZS0+cmVncGFnZUJsaykpOworCisJCX0KKworCQkvKiBDaGVj ayBpdGVtIG9mZnNldCBpcyB2YWxpZCAqLworCQlpZiAoc3RhdGUtPnJlZ3BhZ2VvZmZzZXQgPiBQ YWdlR2V0TWF4T2Zmc2V0TnVtYmVyKHN0YXRlLT5yZWdwYWdlKSkKKwkJeworCisJCQkvKiBJZiBj b25jdXJyZW50IHVwZGF0ZSBtb3ZlZCBvdXIgdHVwbGUgd2UgbmVlZCB0byByZXRyeSAqLworCQkJ aWYgKCFyZXZtYXBfcG9pbnRzX3RvX2luZGV4X3R1cGxlKHN0YXRlKSkKKwkJCXsKKwkJCQlMb2Nr QnVmZmVyKHN0YXRlLT5yZWdwYWdlYnVmLCBCVUZGRVJfTE9DS19VTkxPQ0spOworCQkJCWNvbnRp bnVlOworCQkJfQorCisJCQlyZXZtYXBfaXRlbV9lcmVwb3J0KHN0YXRlLAorCQkJCQkJCQlwc3By aW50ZigicmV2bWFwIGl0ZW0gb2Zmc2V0IG51bWJlciAldSBpcyBncmVhdGVyIHRoYW4gcmVndWxh ciBwYWdlICV1IG1heCBvZmZzZXQgJXUiLAorCQkJCQkJCQkJCSBzdGF0ZS0+cmVncGFnZW9mZnNl dCwKKwkJCQkJCQkJCQkgc3RhdGUtPnJlZ3BhZ2VCbGssCisJCQkJCQkJCQkJIFBhZ2VHZXRNYXhP ZmZzZXROdW1iZXIoc3RhdGUtPnJlZ3BhZ2UpKSk7CisJCX0KKworCQllbG9nKERFQlVHMywgIlBy b2Nlc3MgcmFuZ2U6ICV1LCBpcHRyOiAoJXUsJXUpIiwgc3RhdGUtPnJhbmdlQmxrbm8sIHN0YXRl LT5yZWdwYWdlQmxrLCBzdGF0ZS0+cmVncGFnZW9mZnNldCk7CisKKwkJLyoKKwkJICogUmV2bWFw IHBvaW50ZXIgaXMgT0suIEl0IHBvaW50cyB0byBleGlzdGluZyByZWd1bGFyIHBhZ2UsIG9mZnNl dAorCQkgKiBhbHNvIGlzIG9rLiBMZXQncyBjaGVjayBpbmRleCB0dXBsZSBpdCBwb2ludHMgdG8u CisJCSAqLworCisJCWxwID0gUGFnZUdldEl0ZW1JZENhcmVmdWwoc3RhdGUpOworCisJCS8qIFJl dm1hcCBzaG91bGQgcG9pbnQgdG8gTk9STUFMIHR1cGxlcyBvbmx5ICovCisJCWlmICghSXRlbUlk SXNVc2VkKGxwKSkKKwkJeworCisJCQkvKiBJZiBjb25jdXJyZW50IHVwZGF0ZSBtb3ZlZCBvdXIg dHVwbGUgd2UgbmVlZCB0byByZXRyeSAqLworCQkJaWYgKCFyZXZtYXBfcG9pbnRzX3RvX2luZGV4 X3R1cGxlKHN0YXRlKSkKKwkJCXsKKwkJCQlMb2NrQnVmZmVyKHN0YXRlLT5yZWdwYWdlYnVmLCBC VUZGRVJfTE9DS19VTkxPQ0spOworCQkJCWNvbnRpbnVlOworCQkJfQorCisJCQlpbmRleF90dXBs ZV9lcmVwb3J0KHN0YXRlLCAicmV2bWFwIGl0ZW0gcG9pbnRzIHRvIHVudXNlZCBpbmRleCB0dXBs ZSIpOworCQl9CisKKworCQl0dXAgPSAoQnJpblR1cGxlICopIFBhZ2VHZXRJdGVtKHN0YXRlLT5y ZWdwYWdlLCBscCk7CisKKwkJLyogQ2hlY2sgaWYgcmFuZ2UgYmxvY2sgbnVtYmVyIGlzIGFzIGV4 cGVjdGVkICovCisJCWlmICh0dXAtPmJ0X2Jsa25vICE9IHN0YXRlLT5yYW5nZUJsa25vKQorCQl7 CisKKwkJCS8qIElmIGNvbmN1cnJlbnQgdXBkYXRlIG1vdmVkIG91ciB0dXBsZSB3ZSBuZWVkIHRv IHJldHJ5ICovCisJCQlpZiAoIXJldm1hcF9wb2ludHNfdG9faW5kZXhfdHVwbGUoc3RhdGUpKQor CQkJeworCQkJCUxvY2tCdWZmZXIoc3RhdGUtPnJlZ3BhZ2VidWYsIEJVRkZFUl9MT0NLX1VOTE9D Syk7CisJCQkJY29udGludWU7CisJCQl9CisKKwkJCWluZGV4X3R1cGxlX2VyZXBvcnQoc3RhdGUs IHBzcHJpbnRmKCJpbmRleCB0dXBsZSBoYXMgaW52YWxpZCBibGtubyAldSIsIHR1cC0+YnRfYmxr bm8pKTsKKwkJfQorCisJCS8qCisJCSAqIElmIHRoZSByYW5nZSBpcyBiZXlvbmQgdGhlIHRhYmxl IHNpemUgLSB0aGUgcmFuZ2UgbXVzdCBiZSBlbXB0eS4KKwkJICogSXQncyB2YWxpZCBzaXR1YXRp b24gZm9yIGVtcHR5IHRhYmxlIG5vdy4KKwkJICovCisJCWlmIChzdGF0ZS0+cmFuZ2VCbGtubyA+ PSBzdGF0ZS0+aGVhcG5ibG9ja3MpCisJCXsKKwkJCWlmICghQnJpblR1cGxlSXNFbXB0eVJhbmdl KHR1cCkpCisJCQl7CisJCQkJaW5kZXhfdHVwbGVfZXJlcG9ydChzdGF0ZSwKKwkJCQkJCQkJCXBz cHJpbnRmKCJ0aGUgcmFuZ2UgaXMgYmV5b25kIHRoZSB0YWJsZSBzaXplLCAiCisJCQkJCQkJCQkJ CSAiYnV0IGlzIG5vdCBtYXJrZWQgYXMgZW1wdHksIHRhYmxlIHNpemU6ICV1IGJsb2NrcyIsCisJ CQkJCQkJCQkJCSBzdGF0ZS0+aGVhcG5ibG9ja3MpKTsKKwkJCX0KKwkJfQorCisJCS8qIENoZWNr IGluZGV4IHR1cGxlIGl0c2VsZiAqLworCQljaGVja19pbmRleF90dXBsZShzdGF0ZSwgdHVwLCBs cCk7CisKKwkJTG9ja0J1ZmZlcihzdGF0ZS0+cmVncGFnZWJ1ZiwgQlVGRkVSX0xPQ0tfVU5MT0NL KTsKKwkJYnJlYWs7CisJfQorfQorCisvKgorICogQ2hlY2sgdGhhdCBpbmRleCB0dXBsZSBoYXMg ZXhwZWN0ZWQgc3RydWN0dXJlLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gZm9sbG93cyB0aGUgbG9n aWMgcGVyZm9ybWVkIGJ5IGJyaW5fZGVmb3JtX3R1cGxlKCkuCisgKiBBZnRlciB0aGlzIGNoZWNr IGlzIGNvbXBsZXRlIHdlIGFyZSBzdXJlIHRoYXQgYnJpbl9kZWZvcm1fdHVwbGUgY2FuIHByb2Nl c3MgaXQuCisgKgorICogSW4gY2FzZSBvZiBlbXB0eSByYW5nZSBjaGVjayB0aGF0IGZvciBhbGwg YXR0cmlidXRlcyBhbGxudWxscyBhcmUgdHJ1ZSwgaGFzbnVsbHMgYXJlIGZhbHNlIGFuZAorICog dGhlcmUgaXMgbm8gZGF0YS4gQWxsIGNvcmUgb3BjbGFzc2VzIGV4cGVjdCBhbGxudWxscyBpcyB0 cnVlIGZvciBlbXB0eSByYW5nZS4KKyAqLworc3RhdGljIHZvaWQKK2NoZWNrX2luZGV4X3R1cGxl KEJyaW5DaGVja1N0YXRlICogc3RhdGUsIEJyaW5UdXBsZSAqdHVwbGUsIEl0ZW1JZCBscCkKK3sK KworCWNoYXIJICAgKnRwOwkJCQkvKiB0dXBsZSBkYXRhICovCisJdWludDE2CQlvZmY7CisJYml0 czgJICAgKm51bGxiaXRzOworCVR1cGxlRGVzYwlkaXNrdGRlc2M7CisJaW50CQkJc3RvcmVkOwor CWJvb2wJCWVtcHR5X3JhbmdlID0gQnJpblR1cGxlSXNFbXB0eVJhbmdlKHR1cGxlKTsKKwlib29s CQloYXNudWxsYml0bWFwID0gQnJpblR1cGxlSGFzTnVsbHModHVwbGUpOworCXVpbnQ4CQlob2Zm ID0gQnJpblR1cGxlRGF0YU9mZnNldCh0dXBsZSk7CisJdWludDE2CQl0dXBsZW4gPSBJdGVtSWRH ZXRMZW5ndGgobHApOworCisKKwkvKiBDaGVjayB0aGF0IGhlYWRlciBsZW5ndGggaXMgbm90IGdy ZWF0ZXIgdGhhbiB0dXBsZSBsZW5ndGggKi8KKwlpZiAoaG9mZiA+IHR1cGxlbikKKwl7CisJCWlu ZGV4X3R1cGxlX2VyZXBvcnQoc3RhdGUsIHBzcHJpbnRmKCJpbmRleCB0dXBsZSBoZWFkZXIgbGVu Z3RoICV1IGlzIGdyZWF0ZXIgdGhhbiB0dXBsZSBsZW4gJXUiLCBob2ZmLCB0dXBsZW4pKTsKKwl9 CisKKwkvKiBJZiB0dXBsZSBoYXMgbnVsbCBiaXRtYXAgLSBpbml0aWFsaXplIGl0ICovCisJaWYg KGhhc251bGxiaXRtYXApCisJeworCQludWxsYml0cyA9IChiaXRzOCAqKSAoKGNoYXIgKikgdHVw bGUgKyBTaXplT2ZCcmluVHVwbGUpOworCX0KKwllbHNlCisJeworCQludWxsYml0cyA9IE5VTEw7 CisJfQorCisJLyogRW1wdHkgcmFuZ2UgaW5kZXggdHVwbGUgY2hlY2tzICovCisJaWYgKGVtcHR5 X3JhbmdlKQorCXsKKwkJLyogRW1wdHkgcmFuZ2UgdHVwbGUgc2hvdWxkIGhhdmUgbnVsbCBiaXRt YXAgKi8KKwkJaWYgKCFoYXNudWxsYml0bWFwKQorCQl7CisJCQlpbmRleF90dXBsZV9lcmVwb3J0 KHN0YXRlLCAiZW1wdHkgcmFuZ2UgaW5kZXggdHVwbGUgZG9lc24ndCBoYXZlIG51bGwgYml0bWFw Iik7CisJCX0KKworCQlBc3NlcnQobnVsbGJpdHMgIT0gTlVMTCk7CisKKwkJLyogQ2hlY2sgZXZl cnkgYXR0cmlidXRlIGhhcyBhbGxudWxscyBpcyB0cnVlIGFuZCBoYXNudWxscyBpcyBmYWxzZSAq LworCQlmb3IgKGludCBhdHRpbmRleCA9IDA7IGF0dGluZGV4IDwgc3RhdGUtPm5hdHRzOyArK2F0 dGluZGV4KQorCQl7CisKKwkJCS8qIEF0dHJpYnV0ZSBhbGxudWxscyBzaG91bGQgYmUgdHJ1ZSBm b3IgZW1wdHkgcmFuZ2UgKi8KKwkJCWlmIChhdHRfaXNudWxsKGF0dGluZGV4LCBudWxsYml0cykp CisJCQl7CisJCQkJaW5kZXhfdHVwbGVfZXJlcG9ydChzdGF0ZSwKKwkJCQkJCQkJCXBzcHJpbnRm KCJlbXB0eSByYW5nZSBpbmRleCB0dXBsZSBhdHRyaWJ1dGUgJWQgd2l0aCBhbGxudWxscyBpcyBm YWxzZSIsCisJCQkJCQkJCQkJCSBhdHRpbmRleCkpOworCQkJfQorCisJCQkvKiBBdHRyaWJ1dGUg aGFzbnVsbHMgc2hvdWxkIGJlIGZhbHNlIGZvciBlbXB0eSByYW5nZSAqLworCQkJaWYgKCFhdHRf aXNudWxsKHN0YXRlLT5uYXR0cyArIGF0dGluZGV4LCBudWxsYml0cykpCisJCQl7CisJCQkJaW5k ZXhfdHVwbGVfZXJlcG9ydChzdGF0ZSwKKwkJCQkJCQkJCXBzcHJpbnRmKCJlbXB0eSByYW5nZSBp bmRleCB0dXBsZSBhdHRyaWJ1dGUgJWQgd2l0aCBoYXNudWxscyBpcyB0cnVlIiwKKwkJCQkJCQkJ CQkJIGF0dGluZGV4KSk7CisJCQl9CisJCX0KKworCQkvKiBXZSBhcmUgZG9uZSB3aXRoIGVtcHR5 IHJhbmdlIHR1cGxlICovCisJCXJldHVybjsKKwl9CisKKwkvKgorCSAqIFJhbmdlIGlzIG1hcmtl ZCBhcyBub3QgZW1wdHkgc28gd2UgY2FuIGhhdmUgc29tZSBkYXRhIGluIHRoZSB0dXBsZS4KKwkg KiBXYWxrIGFsbCBhdHRyaWJ1dGVzIGFuZCBjaGVja3MgdGhhdCBhbGwgc3RvcmVkIHZhbHVlcyBm aXQgaW50byB0aGUKKwkgKiB0dXBsZQorCSAqLworCisJdHAgPSAoY2hhciAqKSB0dXBsZSArIEJy aW5UdXBsZURhdGFPZmZzZXQodHVwbGUpOworCXN0b3JlZCA9IDA7CisJb2ZmID0gMDsKKworCWRp c2t0ZGVzYyA9IGJydHVwbGVfZGlza190dXBkZXNjKHN0YXRlLT5iZGVzYyk7CisKKwlmb3IgKGlu dCBhdHRpbmRleCA9IDA7IGF0dGluZGV4IDwgc3RhdGUtPm5hdHRzOyArK2F0dGluZGV4KQorCXsK KwkJQnJpbk9wY0luZm8gKm9wY2xhc3MgPSBzdGF0ZS0+YmRlc2MtPmJkX2luZm9bYXR0aW5kZXhd OworCisJCS8qCisJCSAqIGlmIGFsbG51bGxzIGlzIHNldCB3ZSBoYXZlIG5vIGRhdGEgZm9yIHRo aXMgYXR0cmlidXRlLCBtb3ZlIHRvIHRoZQorCQkgKiBuZXh0CisJCSAqLworCQlpZiAoaGFzbnVs bGJpdG1hcCAmJiAhYXR0X2lzbnVsbChhdHRpbmRleCwgbnVsbGJpdHMpKQorCQl7CisJCQlzdG9y ZWQgKz0gb3BjbGFzcy0+b2lfbnN0b3JlZDsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJLyogV2Fs ayBhbGwgc3RvcmVkIHZhbHVlcyBmb3IgdGhlIGN1cnJlbnQgYXR0cmlidXRlICovCisJCWZvciAo aW50IGRhdHVtbm8gPSAwOyBkYXR1bW5vIDwgb3BjbGFzcy0+b2lfbnN0b3JlZDsgZGF0dW1ubysr KQorCQl7CisJCQlDb21wYWN0QXR0cmlidXRlICp0aGlzYXR0ID0gVHVwbGVEZXNjQ29tcGFjdEF0 dHIoZGlza3RkZXNjLCBzdG9yZWQpOworCisJCQlpZiAodGhpc2F0dC0+YXR0bGVuID09IC0xKQor CQkJeworCQkJCW9mZiA9IGF0dF9wb2ludGVyX2FsaWduYnkob2ZmLAorCQkJCQkJCQkJCSAgdGhp c2F0dC0+YXR0YWxpZ25ieSwKKwkJCQkJCQkJCQkgIC0xLAorCQkJCQkJCQkJCSAgdHAgKyBvZmYp OworCQkJfQorCQkJZWxzZQorCQkJeworCQkJCW9mZiA9IGF0dF9ub21pbmFsX2FsaWduYnkob2Zm LCB0aGlzYXR0LT5hdHRhbGlnbmJ5KTsKKwkJCX0KKworCQkJLyogQ2hlY2sgdGhhdCB3ZSBhcmUg c3RpbGwgaW4gdGhlIHR1cGxlICovCisJCQlpZiAoaG9mZiArIG9mZiA+IHR1cGxlbikKKwkJCXsK KwkJCQlpbmRleF90dXBsZV9lcmVwb3J0KHN0YXRlLAorCQkJCQkJCQkJcHNwcmludGYoImF0dHJp YnV0ZSAldSBzdG9yZWQgdmFsdWUgJXUgd2l0aCBsZW5ndGggJWQgIgorCQkJCQkJCQkJCQkgInN0 YXJ0cyBhdCBvZmZzZXQgJXUgYmV5b25kIHRvdGFsIHR1cGxlIGxlbmd0aCAldSIsCisJCQkJCQkJ CQkJCSBhdHRpbmRleCwgZGF0dW1ubywgdGhpc2F0dC0+YXR0bGVuLCBvZmYsIHR1cGxlbikpOwor CQkJfQorCisJCQlvZmYgPSBhdHRfYWRkbGVuZ3RoX3BvaW50ZXIob2ZmLCB0aGlzYXR0LT5hdHRs ZW4sIHRwICsgb2ZmKTsKKworCQkJLyogQ2hlY2sgdGhhdCB3ZSBhcmUgc3RpbGwgaW4gdGhlIHR1 cGxlICovCisJCQlpZiAoaG9mZiArIG9mZiA+IHR1cGxlbikKKwkJCXsKKwkJCQlpbmRleF90dXBs ZV9lcmVwb3J0KHN0YXRlLAorCQkJCQkJCQkJcHNwcmludGYoImF0dHJpYnV0ZSAldSBzdG9yZWQg dmFsdWUgJXUgd2l0aCBsZW5ndGggJWQgIgorCQkJCQkJCQkJCQkgImVuZHMgYXQgb2Zmc2V0ICV1 IGJleW9uZCB0b3RhbCB0dXBsZSBsZW5ndGggJXUiLAorCQkJCQkJCQkJCQkgYXR0aW5kZXgsIGRh dHVtbm8sIHRoaXNhdHQtPmF0dGxlbiwgb2ZmLCB0dXBsZW4pKTsKKwkJCX0KKwkJCXN0b3JlZCsr OworCQl9CisKKwl9CisKK30KKworLyoKKyAqIENoZWNrIGFsbCBwYWdlcyB3aXRoaW4gdGhlIHJh bmdlIFtsYXN0UmV2bWFwUGFnZSArIDEsIGluZGV4bmJsb2Nrc10gYXJlIHJlZ3VsYXIgcGFnZXMg b3IgbmV3CisgKiBhbmQgdGhlcmUgaXMgYSBwb2ludGVyIGluIHJldm1hcCB0byBlYWNoIE5PUk1B TCBpbmRleCB0dXBsZS4KKyAqLworc3RhdGljIHZvaWQKK2NoZWNrX3JlZ3VsYXJfcGFnZXMoQnJp bkNoZWNrU3RhdGUgKiBzdGF0ZSkKK3sKKwlpZiAoIXN0YXRlLT5yZWd1bGFyX3BhZ2VzX2NoZWNr KQorCXsKKwkJcmV0dXJuOworCX0KKworCS8qIHJlc2V0IHN0YXRlICovCisJc3RhdGUtPnJldm1h cEJsayA9IEludmFsaWRCbG9ja051bWJlcjsKKwlzdGF0ZS0+cmV2bWFwYnVmID0gSW52YWxpZEJ1 ZmZlcjsKKwlzdGF0ZS0+cmV2bWFwaWR4ID0gLTE7CisJc3RhdGUtPnJlZ3BhZ2VCbGsgPSBJbnZh bGlkQmxvY2tOdW1iZXI7CisJc3RhdGUtPnJlZ3BhZ2VidWYgPSBJbnZhbGlkQnVmZmVyOworCXN0 YXRlLT5yZWdwYWdlb2Zmc2V0ID0gSW52YWxpZE9mZnNldE51bWJlcjsKKwlzdGF0ZS0+aWR4bmJs b2NrcyA9IFJlbGF0aW9uR2V0TnVtYmVyT2ZCbG9ja3Moc3RhdGUtPmlkeHJlbCk7CisKKwlmb3Ig KHN0YXRlLT5yZWdwYWdlQmxrID0gc3RhdGUtPmxhc3RSZXZtYXBQYWdlICsgMTsgc3RhdGUtPnJl Z3BhZ2VCbGsgPCBzdGF0ZS0+aWR4bmJsb2Nrczsgc3RhdGUtPnJlZ3BhZ2VCbGsrKykKKwl7CisJ CU9mZnNldE51bWJlciBtYXhvZmY7CisKKwkJc3RhdGUtPnJlZ3BhZ2VidWYgPSBSZWFkQnVmZmVy RXh0ZW5kZWQoc3RhdGUtPmlkeHJlbCwgTUFJTl9GT1JLTlVNLCBzdGF0ZS0+cmVncGFnZUJsaywg UkJNX05PUk1BTCwKKwkJCQkJCQkJCQkJICAgc3RhdGUtPmNoZWNrc3RyYXRlZ3kpOworCQlMb2Nr QnVmZmVyKHN0YXRlLT5yZWdwYWdlYnVmLCBCVUZGRVJfTE9DS19TSEFSRSk7CisJCXN0YXRlLT5y ZWdwYWdlID0gQnVmZmVyR2V0UGFnZShzdGF0ZS0+cmVncGFnZWJ1Zik7CisKKwkJLyogU2tpcCBu ZXcgcGFnZXMgKi8KKwkJaWYgKFBhZ2VJc05ldyhzdGF0ZS0+cmVncGFnZSkpCisJCXsKKwkJCVVu bG9ja1JlbGVhc2VCdWZmZXIoc3RhdGUtPnJlZ3BhZ2VidWYpOworCQkJY29udGludWU7CisJCX0K KworCQlpZiAoIUJSSU5fSVNfUkVHVUxBUl9QQUdFKHN0YXRlLT5yZWdwYWdlKSkKKwkJeworCQkJ YnJpbl9jaGVja19lcmVwb3J0KHN0YXRlLCBwc3ByaW50ZigiZXhwZWN0ZWQgbmV3IG9yIHJlZ3Vs YXIgcGFnZSBhdCBibG9jayAldSIsIHN0YXRlLT5yZWdwYWdlQmxrKSk7CisJCX0KKworCQkvKiBD aGVjayB0aGF0IGFsbCBOT1JNQUwgaW5kZXggdHVwbGVzIHdpdGhpbiB0aGUgcGFnZSBhcmUgbm90 IG9ycGhhbnMgKi8KKwkJbWF4b2ZmID0gUGFnZUdldE1heE9mZnNldE51bWJlcihzdGF0ZS0+cmVn cGFnZSk7CisJCWZvciAoc3RhdGUtPnJlZ3BhZ2VvZmZzZXQgPSBGaXJzdE9mZnNldE51bWJlcjsg c3RhdGUtPnJlZ3BhZ2VvZmZzZXQgPD0gbWF4b2ZmOyBzdGF0ZS0+cmVncGFnZW9mZnNldCsrKQor CQl7CisJCQlJdGVtSWQJCWxwOworCQkJQnJpblR1cGxlICAqdHVwOworCQkJQmxvY2tOdW1iZXIg cmV2bWFwQmxrOworCisJCQlscCA9IFBhZ2VHZXRJdGVtSWRDYXJlZnVsKHN0YXRlKTsKKworCQkJ aWYgKEl0ZW1JZElzVXNlZChscCkpCisJCQl7CisJCQkJdHVwID0gKEJyaW5UdXBsZSAqKSBQYWdl R2V0SXRlbShzdGF0ZS0+cmVncGFnZSwgbHApOworCisJCQkJLyogR2V0IHJldm1hcCBibG9jayBu dW1iZXIgZm9yIGluZGV4IHR1cGxlIGJsa25vICovCisJCQkJcmV2bWFwQmxrID0gKCh0dXAtPmJ0 X2Jsa25vIC8gc3RhdGUtPnBhZ2VzUGVyUmFuZ2UpIC8gUkVWTUFQX1BBR0VfTUFYSVRFTVMpICsg MTsKKwkJCQlpZiAocmV2bWFwQmxrID4gc3RhdGUtPmxhc3RSZXZtYXBQYWdlKQorCQkJCXsKKwkJ CQkJaW5kZXhfdHVwbGVfb25seV9lcmVwb3J0KHN0YXRlLCBwc3ByaW50Zigibm8gcmV2bWFwIHBh Z2UgZm9yIHRoZSBpbmRleCB0dXBsZSB3aXRoIGJsa25vICV1IiwKKwkJCQkJCQkJCQkJCQkJCSB0 dXAtPmJ0X2Jsa25vKSk7CisJCQkJfQorCisJCQkJLyogRmV0Y2ggYW5vdGhlciByZXZtYXAgcGFn ZSBpZiBuZWVkZWQgKi8KKwkJCQlpZiAoc3RhdGUtPnJldm1hcEJsayAhPSByZXZtYXBCbGspCisJ CQkJeworCQkJCQlpZiAoQmxvY2tOdW1iZXJJc1ZhbGlkKHN0YXRlLT5yZXZtYXBCbGspKQorCQkJ CQl7CisJCQkJCQlSZWxlYXNlQnVmZmVyKHN0YXRlLT5yZXZtYXBidWYpOworCQkJCQl9CisJCQkJ CXN0YXRlLT5yZXZtYXBCbGsgPSByZXZtYXBCbGs7CisJCQkJCXN0YXRlLT5yZXZtYXBidWYgPSBS ZWFkQnVmZmVyRXh0ZW5kZWQoc3RhdGUtPmlkeHJlbCwgTUFJTl9GT1JLTlVNLCBzdGF0ZS0+cmV2 bWFwQmxrLCBSQk1fTk9STUFMLAorCQkJCQkJCQkJCQkJCQkgIHN0YXRlLT5jaGVja3N0cmF0ZWd5 KTsKKwkJCQl9CisKKwkJCQlzdGF0ZS0+cmV2bWFwaWR4ID0gKHR1cC0+YnRfYmxrbm8gLyBzdGF0 ZS0+cGFnZXNQZXJSYW5nZSkgJSBSRVZNQVBfUEFHRV9NQVhJVEVNUzsKKwkJCQlzdGF0ZS0+cmFu Z2VCbGtubyA9IHR1cC0+YnRfYmxrbm87CisKKwkJCQkvKiBjaGVjayB0aGF0IHJldm1hcCBpdGVt IHBvaW50cyB0byBpbmRleCB0dXBsZSAqLworCQkJCWlmICghcmV2bWFwX3BvaW50c190b19pbmRl eF90dXBsZShzdGF0ZSkpCisJCQkJeworCQkJCQlpbmRleF90dXBsZV9lcmVwb3J0KHN0YXRlLCBw c3ByaW50ZigicmV2bWFwIGRvZXNuJ3QgcG9pbnQgdG8gaW5kZXggdHVwbGUiKSk7CisJCQkJfQor CisJCQl9CisJCX0KKworCQlVbmxvY2tSZWxlYXNlQnVmZmVyKHN0YXRlLT5yZWdwYWdlYnVmKTsK Kwl9CisKKwlpZiAoc3RhdGUtPnJldm1hcGJ1ZiAhPSBJbnZhbGlkQnVmZmVyKQorCXsKKwkJUmVs ZWFzZUJ1ZmZlcihzdGF0ZS0+cmV2bWFwYnVmKTsKKwl9Cit9CisKKy8qCisgKiBDaGVjayBpZiB0 aGUgcmV2bWFwIGl0ZW0gcG9pbnRzIHRvIHRoZSBpbmRleCB0dXBsZSAocmVncGFnZUJsaywgcmVn cGFnZW9mZnNldCkuCisgKiBXZSBoYXZlIGxvY2tlZCByZWcgcGFnZSwgYW5kIGxvY2sgcmV2bWFw IHBhZ2UgaGVyZS4KKyAqIEl0J3MgYSB2YWxpZCBsb2NrIG9yZGVyaW5nLCBzbyBubyBkZWFkbG9j ayBpcyBwb3NzaWJsZS4KKyAqLworc3RhdGljIGJvb2wKK3Jldm1hcF9wb2ludHNfdG9faW5kZXhf dHVwbGUoQnJpbkNoZWNrU3RhdGUgKiBzdGF0ZSkKK3sKKwlJdGVtUG9pbnRlckRhdGEgKnJldm1h cHRpZHM7CisJUmV2bWFwQ29udGVudHMgKmNvbnRlbnRzOworCUl0ZW1Qb2ludGVyRGF0YSAqdGlk OworCWJvb2wJCXBvaW50czsKKworCUxvY2tCdWZmZXIoc3RhdGUtPnJldm1hcGJ1ZiwgQlVGRkVS X0xPQ0tfU0hBUkUpOworCWNvbnRlbnRzID0gKFJldm1hcENvbnRlbnRzICopIFBhZ2VHZXRDb250 ZW50cyhCdWZmZXJHZXRQYWdlKHN0YXRlLT5yZXZtYXBidWYpKTsKKwlyZXZtYXB0aWRzID0gY29u dGVudHMtPnJtX3RpZHM7CisJdGlkID0gcmV2bWFwdGlkcyArIHN0YXRlLT5yZXZtYXBpZHg7CisK Kwlwb2ludHMgPSBJdGVtUG9pbnRlckdldEJsb2NrTnVtYmVyTm9DaGVjayh0aWQpID09IHN0YXRl LT5yZWdwYWdlQmxrICYmCisJCUl0ZW1Qb2ludGVyR2V0T2Zmc2V0TnVtYmVyTm9DaGVjayh0aWQp ID09IHN0YXRlLT5yZWdwYWdlb2Zmc2V0OworCisJTG9ja0J1ZmZlcihzdGF0ZS0+cmV2bWFwYnVm LCBCVUZGRVJfTE9DS19VTkxPQ0spOworCXJldHVybiBwb2ludHM7Cit9CisKKy8qCisgKiBQYWdl R2V0SXRlbUlkKCkgd3JhcHBlciB0aGF0IHZhbGlkYXRlcyByZXR1cm5lZCBsaW5lIHBvaW50ZXIu CisgKgorICogaXRlbUlkIGluIGJyaW4gaW5kZXggY291bGQgYmUgVU5VU0VEIG9yIE5PUk1BTC4K KyAqLworc3RhdGljIEl0ZW1JZAorUGFnZUdldEl0ZW1JZENhcmVmdWwoQnJpbkNoZWNrU3RhdGUg KiBzdGF0ZSkKK3sKKwlQYWdlCQlwYWdlID0gc3RhdGUtPnJlZ3BhZ2U7CisJT2Zmc2V0TnVtYmVy IG9mZnNldCA9IHN0YXRlLT5yZWdwYWdlb2Zmc2V0OworCUl0ZW1JZAkJaXRlbWlkID0gUGFnZUdl dEl0ZW1JZChwYWdlLCBvZmZzZXQpOworCisJaWYgKEl0ZW1JZEdldE9mZnNldChpdGVtaWQpICsg SXRlbUlkR2V0TGVuZ3RoKGl0ZW1pZCkgPgorCQlCTENLU1ogLSBNQVhBTElHTihzaXplb2YoQnJp blNwZWNpYWxTcGFjZSkpKQorCQlpbmRleF90dXBsZV9lcmVwb3J0KHN0YXRlLAorCQkJCQkJCXBz cHJpbnRmKCJsaW5lIHBvaW50ZXIgcG9pbnRzIHBhc3QgZW5kIG9mIHR1cGxlIHNwYWNlIGluIGlu ZGV4LiAiCisJCQkJCQkJCQkgImxwX29mZj0ldSwgbHBfbGVuPSV1IGxwX2ZsYWdzPSV1IiwKKwkJ CQkJCQkJCSBJdGVtSWRHZXRPZmZzZXQoaXRlbWlkKSwKKwkJCQkJCQkJCSBJdGVtSWRHZXRMZW5n dGgoaXRlbWlkKSwKKwkJCQkJCQkJCSBJdGVtSWRHZXRGbGFncyhpdGVtaWQpCisJCQkJCQkJCQkg KQorCQkJKTsKKworCS8qIFZlcmlmeSB0aGF0IGxpbmUgcG9pbnRlciBpcyBMUF9OT1JNQUwgb3Ig TFBfVU5VU0VEICovCisJaWYgKCEoKEl0ZW1JZElzTm9ybWFsKGl0ZW1pZCkgJiYgSXRlbUlkSGFz U3RvcmFnZShpdGVtaWQpKSB8fAorCQkgICghSXRlbUlkSXNVc2VkKGl0ZW1pZCkgJiYgIUl0ZW1J ZEhhc1N0b3JhZ2UoaXRlbWlkKSkpKQorCXsKKwkJaW5kZXhfdHVwbGVfZXJlcG9ydChzdGF0ZSwK KwkJCQkJCQlwc3ByaW50ZigiaW52YWxpZCBsaW5lIHBvaW50ZXIgc3RvcmFnZSBpbiBpbmRleC4g IgorCQkJCQkJCQkJICJscF9vZmY9JXUsIGxwX2xlbj0ldSBscF9mbGFncz0ldSIsCisJCQkJCQkJ CQkgSXRlbUlkR2V0T2Zmc2V0KGl0ZW1pZCksCisJCQkJCQkJCQkgSXRlbUlkR2V0TGVuZ3RoKGl0 ZW1pZCksCisJCQkJCQkJCQkgSXRlbUlkR2V0RmxhZ3MoaXRlbWlkKQorCQkJCQkJCQkJICkpOwor CX0KKworCXJldHVybiBpdGVtaWQ7Cit9CisKKworLyogUmVwb3J0IHdpdGhvdXQgYW55IGFkZGl0 aW9uYWwgaW5mbyAqLworc3RhdGljIHZvaWQKK2JyaW5fY2hlY2tfZXJlcG9ydChCcmluQ2hlY2tT dGF0ZSAqIHN0YXRlLCBjb25zdCBjaGFyICpmbXQpCit7CisJZXJlcG9ydChFUlJPUiwKKwkJCShl cnJjb2RlKEVSUkNPREVfREFUQV9DT1JSVVBURUQpLAorCQkJIGVycm1zZygiSW5kZXggJXMgaXMg Y29ycnVwdGVkIC0gJXMiLCBSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShzdGF0ZS0+aWR4cmVsKSwg Zm10KSkpOworfQorCisvKiBSZXBvcnQgd2l0aCByYW5nZSBibGtubywgcmV2bWFwIGl0ZW0gaW5m bywgaW5kZXggdHVwbGUgaW5mbyAqLwordm9pZAoraW5kZXhfdHVwbGVfZXJlcG9ydChCcmluQ2hl Y2tTdGF0ZSAqIHN0YXRlLCBjb25zdCBjaGFyICpmbXQpCit7CisJQXNzZXJ0KHN0YXRlLT5yYW5n ZUJsa25vICE9IEludmFsaWRCbG9ja051bWJlcik7CisJQXNzZXJ0KHN0YXRlLT5yZXZtYXBCbGsg IT0gSW52YWxpZEJsb2NrTnVtYmVyKTsKKwlBc3NlcnQoc3RhdGUtPnJldm1hcGlkeCA+PSAwICYm IHN0YXRlLT5yZXZtYXBpZHggPCBSRVZNQVBfUEFHRV9NQVhJVEVNUyk7CisJQXNzZXJ0KHN0YXRl LT5yZWdwYWdlQmxrICE9IEludmFsaWRCbG9ja051bWJlcik7CisJQXNzZXJ0KHN0YXRlLT5yZWdw YWdlb2Zmc2V0ICE9IEludmFsaWRPZmZzZXROdW1iZXIpOworCisJZXJlcG9ydChFUlJPUiwKKwkJ CShlcnJjb2RlKEVSUkNPREVfREFUQV9DT1JSVVBURUQpLAorCQkJIGVycm1zZygiSW5kZXggJXMg aXMgY29ycnVwdGVkIC0gJXMuIFJhbmdlIGJsa25vOiAldSwgcmV2bWFwIGl0ZW06ICgldSwldSks IGluZGV4IHR1cGxlOiAoJXUsJXUpIiwKKwkJCQkJUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUoc3Rh dGUtPmlkeHJlbCksCisJCQkJCWZtdCwKKwkJCQkJc3RhdGUtPnJhbmdlQmxrbm8sCisJCQkJCXN0 YXRlLT5yZXZtYXBCbGssCisJCQkJCXN0YXRlLT5yZXZtYXBpZHgsCisJCQkJCXN0YXRlLT5yZWdw YWdlQmxrLAorCQkJCQlzdGF0ZS0+cmVncGFnZW9mZnNldCkpKTsKK30KKworLyogUmVwb3J0IHdp dGggaW5kZXggdHVwbGUgaW5mbyAqLwordm9pZAoraW5kZXhfdHVwbGVfb25seV9lcmVwb3J0KEJy aW5DaGVja1N0YXRlICogc3RhdGUsIGNvbnN0IGNoYXIgKmZtdCkKK3sKKwlBc3NlcnQoc3RhdGUt PnJlZ3BhZ2VCbGsgIT0gSW52YWxpZEJsb2NrTnVtYmVyKTsKKwlBc3NlcnQoc3RhdGUtPnJlZ3Bh Z2VvZmZzZXQgIT0gSW52YWxpZE9mZnNldE51bWJlcik7CisKKwllcmVwb3J0KEVSUk9SLAorCQkJ KGVycmNvZGUoRVJSQ09ERV9EQVRBX0NPUlJVUFRFRCksCisJCQkgZXJybXNnKCJJbmRleCAlcyBp cyBjb3JydXB0ZWQgLSAlcy4gSW5kZXggdHVwbGU6ICgldSwldSkiLAorCQkJCQlSZWxhdGlvbkdl dFJlbGF0aW9uTmFtZShzdGF0ZS0+aWR4cmVsKSwKKwkJCQkJZm10LAorCQkJCQlzdGF0ZS0+cmVn cGFnZUJsaywKKwkJCQkJc3RhdGUtPnJlZ3BhZ2VvZmZzZXQpKSk7Cit9CisKKy8qIFJlcG9ydCB3 aXRoIHJhbmdlIGJsa25vLCByZXZtYXAgaXRlbSBpbmZvICovCit2b2lkCityZXZtYXBfaXRlbV9l cmVwb3J0KEJyaW5DaGVja1N0YXRlICogc3RhdGUsIGNvbnN0IGNoYXIgKmZtdCkKK3sKKwlBc3Nl cnQoc3RhdGUtPnJhbmdlQmxrbm8gIT0gSW52YWxpZEJsb2NrTnVtYmVyKTsKKwlBc3NlcnQoc3Rh dGUtPnJldm1hcEJsayAhPSBJbnZhbGlkQmxvY2tOdW1iZXIpOworCUFzc2VydChzdGF0ZS0+cmV2 bWFwaWR4ID49IDAgJiYgc3RhdGUtPnJldm1hcGlkeCA8IFJFVk1BUF9QQUdFX01BWElURU1TKTsK KworCWVyZXBvcnQoRVJST1IsCisJCQkoZXJyY29kZShFUlJDT0RFX0RBVEFfQ09SUlVQVEVEKSwK KwkJCSBlcnJtc2coIkluZGV4ICVzIGlzIGNvcnJ1cHRlZCAtICVzLiBSYW5nZSBibGtubzogJXUs IHJldm1hcCBpdGVtOiAoJXUsJXUpLiIsCisJCQkJCVJlbGF0aW9uR2V0UmVsYXRpb25OYW1lKHN0 YXRlLT5pZHhyZWwpLAorCQkJCQlmbXQsCisJCQkJCXN0YXRlLT5yYW5nZUJsa25vLAorCQkJCQlz dGF0ZS0+cmV2bWFwQmxrLAorCQkJCQlzdGF0ZS0+cmV2bWFwaWR4KSkpOworfQotLSAKMi40My4w Cgo= --000000000000fc23510637d47cf8 Content-Type: text/x-patch; charset="US-ASCII"; name="v3-0003-amcheck-brin_index_check-all-heap-consistent.patch" Content-Disposition: attachment; filename="v3-0003-amcheck-brin_index_check-all-heap-consistent.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mc1p337p2 RnJvbSAzMzlmODExMjkzOTJhMjQ0NGU0M2Y3ZjdmMjkxNjg2YTcwYTI5NjFhIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBcnNlbml5IE11a2hpbiA8YXJzZW5peS5tdWtoaW4uZGV2QGdt YWlsLmNvbT4KRGF0ZTogTW9uLCAxNiBKdW4gMjAyNSAxODo0MTozNCArMDMwMApTdWJqZWN0OiBb UEFUQ0ggdjMgMy8zXSBhbWNoZWNrOiBicmluX2luZGV4X2NoZWNrKCkgLSBhbGwgaGVhcCBjb25z aXN0ZW50CgpUaGlzIGNvbW1pdCBleHRlbmRzIGZ1bmN0aW9uYWxpdHkgb2YgYnJpbl9pbmRleF9j aGVjaygpIHdpdGgKYWxsX2hlYXBfY29uc2lzdGVudCBjaGVjazogd2UgdmFsaWRhdGUgZXZlcnkg aW5kZXggcmFuZ2UgdHVwbGUKYWdhaW5zdCBldmVyeSBoZWFwIHR1cGxlIHdpdGhpbiB0aGUgcmFu Z2UgdXNpbmcgY29uc2lzdGVudEZuLgpBbHNvIHdlIGNoZWNrIGhlcmUgdGhhdCBmaWVsZHMgJ2hh c19udWxscycsICdhbGxfbnVsbHMnIGFuZAonZW1wdHlfcmFuZ2UnIGFyZSBjb25zaXN0ZW50IHdp dGggdGhlIHJhbmdlIGhlYXAgZGF0YS4gSXQncyB0aGUgbW9zdApleHBlbnNpdmUgcGFydCBvZiB0 aGUgYnJpbl9pbmRleF9jaGVjaygpLCBzbyBpdCdzIG9wdGlvbmFsLgotLS0KIGNvbnRyaWIvYW1j aGVjay9hbWNoZWNrLS0xLjUtLTEuNi5zcWwgICB8ICAgNiArLQogY29udHJpYi9hbWNoZWNrL2V4 cGVjdGVkL2NoZWNrX2JyaW4ub3V0IHwgIDE4ICstCiBjb250cmliL2FtY2hlY2svc3FsL2NoZWNr X2JyaW4uc3FsICAgICAgfCAgMTggKy0KIGNvbnRyaWIvYW1jaGVjay90LzAwN192ZXJpZnlfYnJp bi5wbCAgICB8ICA1MSArKy0KIGNvbnRyaWIvYW1jaGVjay92ZXJpZnlfYnJpbi5jICAgICAgICAg ICB8IDQ4MiArKysrKysrKysrKysrKysrKysrKysrKysKIDUgZmlsZXMgY2hhbmdlZCwgNTU0IGlu c2VydGlvbnMoKyksIDIxIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2NvbnRyaWIvYW1jaGVj ay9hbWNoZWNrLS0xLjUtLTEuNi5zcWwgYi9jb250cmliL2FtY2hlY2svYW1jaGVjay0tMS41LS0x LjYuc3FsCmluZGV4IDllYzA0NmJiMWNmLi4wYzg1MGE5N2QxNiAxMDA2NDQKLS0tIGEvY29udHJp Yi9hbWNoZWNrL2FtY2hlY2stLTEuNS0tMS42LnNxbAorKysgYi9jb250cmliL2FtY2hlY2svYW1j aGVjay0tMS41LS0xLjYuc3FsCkBAIC04LDExICs4LDEzIEBACiAtLSBicmluX2luZGV4X2NoZWNr KCkKIC0tCiBDUkVBVEUgRlVOQ1RJT04gYnJpbl9pbmRleF9jaGVjayhpbmRleCByZWdjbGFzcywK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZ3VsYXJfcGFnZXNfY2hlY2sgYm9v bGVhbiBkZWZhdWx0IGZhbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWd1 bGFyX3BhZ2VzX2NoZWNrIGJvb2xlYW4gZGVmYXVsdCBmYWxzZSwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGhlYXBfYWxsX2NvbnNpc3RlbnQgYm9vbGVhbiBkZWZhdWx0IGZhbHNl LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc2lzdGVudF9vcGVyYXRvcl9u YW1lcyB0ZXh0W10gZGVmYXVsdCAne30nCiApCiAgICAgUkVUVVJOUyBWT0lECiBBUyAnTU9EVUxF X1BBVEhOQU1FJywgJ2JyaW5faW5kZXhfY2hlY2snCiBMQU5HVUFHRSBDIFNUUklDVCBQQVJBTExF TCBSRVNUUklDVEVEOwogCiAtLSBXZSBkb24ndCB3YW50IHRoaXMgdG8gYmUgYXZhaWxhYmxlIHRv IHB1YmxpYwotUkVWT0tFIEFMTCBPTiBGVU5DVElPTiBicmluX2luZGV4X2NoZWNrKHJlZ2NsYXNz LCBib29sZWFuKSBGUk9NIFBVQkxJQzsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCitSRVZP S0UgQUxMIE9OIEZVTkNUSU9OIGJyaW5faW5kZXhfY2hlY2socmVnY2xhc3MsIGJvb2xlYW4sIGJv b2xlYW4sIHRleHRbXSkgRlJPTSBQVUJMSUM7ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpk aWZmIC0tZ2l0IGEvY29udHJpYi9hbWNoZWNrL2V4cGVjdGVkL2NoZWNrX2JyaW4ub3V0IGIvY29u dHJpYi9hbWNoZWNrL2V4cGVjdGVkL2NoZWNrX2JyaW4ub3V0CmluZGV4IGJlYmNhOTNkMzJmLi4w YWE5MGRhZmEyMCAxMDA2NDQKLS0tIGEvY29udHJpYi9hbWNoZWNrL2V4cGVjdGVkL2NoZWNrX2Jy aW4ub3V0CisrKyBiL2NvbnRyaWIvYW1jaGVjay9leHBlY3RlZC9jaGVja19icmluLm91dApAQCAt NSw3ICs1LDcgQEAgJCQgTEFOR1VBR0Ugc3FsOwogLS0gZW1wdHkgdGFibGUgaW5kZXggc2hvdWxk IGJlIHZhbGlkCiBDUkVBVEUgVEFCTEUgYnJpbnRlc3QgKGEgQklHSU5UKSBXSVRIIChGSUxMRkFD VE9SID0gMTApOwogQ1JFQVRFIElOREVYIGJyaW50ZXN0X2lkeCBPTiBicmludGVzdCBVU0lORyBC UklOIChhKTsKLVNFTEVDVCBicmluX2luZGV4X2NoZWNrKCdicmludGVzdF9pZHgnOjpSRUdDTEFT UywgdHJ1ZSk7CitTRUxFQ1QgYnJpbl9pbmRleF9jaGVjaygnYnJpbnRlc3RfaWR4Jzo6UkVHQ0xB U1MsIHRydWUsIHRydWUpOwogIGJyaW5faW5kZXhfY2hlY2sgCiAtLS0tLS0tLS0tLS0tLS0tLS0K ICAKQEAgLTQyLDcgKzQyLDcgQEAgQ1JFQVRFIElOREVYIGJyaW50ZXN0X2lkeCBPTiBicmludGVz dCBVU0lORyBCUklOIChhIGludDhfbWlubWF4X29wcykgV0lUSCAoUEFHRVMKIElOU0VSVCBJTlRP IGJyaW50ZXN0IChhKSBTRUxFQ1QgeCBGUk9NIGdlbmVyYXRlX3NlcmllcygxLDEwMDAwMCkgeDsK IC0tIGNyZWF0ZSBzb21lIGVtcHR5IHJhbmdlcwogREVMRVRFIEZST00gYnJpbnRlc3QgV0hFUkUg YSA+IDIwMDAwIEFORCBhIDwgNDAwMDA7Ci1TRUxFQ1QgYnJpbl9pbmRleF9jaGVjaygnYnJpbnRl c3RfaWR4Jzo6UkVHQ0xBU1MsIHRydWUpOworU0VMRUNUIGJyaW5faW5kZXhfY2hlY2soJ2JyaW50 ZXN0X2lkeCc6OlJFR0NMQVNTLCB0cnVlLCB0cnVlKTsKICBicmluX2luZGV4X2NoZWNrIAogLS0t LS0tLS0tLS0tLS0tLS0tCiAgCkBAIC01MSw3ICs1MSw3IEBAIFNFTEVDVCBicmluX2luZGV4X2No ZWNrKCdicmludGVzdF9pZHgnOjpSRUdDTEFTUywgdHJ1ZSk7CiAtLSByZWJ1aWxkIGluZGV4CiBE Uk9QIElOREVYIGJyaW50ZXN0X2lkeDsKIENSRUFURSBJTkRFWCBicmludGVzdF9pZHggT04gYnJp bnRlc3QgVVNJTkcgQlJJTiAoYSBpbnQ4X21pbm1heF9vcHMpIFdJVEggKFBBR0VTX1BFUl9SQU5H RSA9IDIpOwotU0VMRUNUIGJyaW5faW5kZXhfY2hlY2soJ2JyaW50ZXN0X2lkeCc6OlJFR0NMQVNT LCB0cnVlKTsKK1NFTEVDVCBicmluX2luZGV4X2NoZWNrKCdicmludGVzdF9pZHgnOjpSRUdDTEFT UywgdHJ1ZSwgdHJ1ZSk7CiAgYnJpbl9pbmRleF9jaGVjayAKIC0tLS0tLS0tLS0tLS0tLS0tLQog IApAQCAtNjUsNyArNjUsNyBAQCBDUkVBVEUgSU5ERVggYnJpbnRlc3RfaWR4IE9OIGJyaW50ZXN0 IFVTSU5HIEJSSU4gKGEgaW50OF9taW5tYXhfbXVsdGlfb3BzKSBXSVRICiBJTlNFUlQgSU5UTyBi cmludGVzdCAoYSkgU0VMRUNUIHggRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwxMDAwMDApIHg7CiAt LSBjcmVhdGUgc29tZSBlbXB0eSByYW5nZXMKIERFTEVURSBGUk9NIGJyaW50ZXN0IFdIRVJFIGEg PiAyMDAwMCBBTkQgYSA8IDQwMDAwOwotU0VMRUNUIGJyaW5faW5kZXhfY2hlY2soJ2JyaW50ZXN0 X2lkeCc6OlJFR0NMQVNTLCB0cnVlKTsKK1NFTEVDVCBicmluX2luZGV4X2NoZWNrKCdicmludGVz dF9pZHgnOjpSRUdDTEFTUywgdHJ1ZSwgdHJ1ZSk7CiAgYnJpbl9pbmRleF9jaGVjayAKIC0tLS0t LS0tLS0tLS0tLS0tLQogIApAQCAtNzQsNyArNzQsNyBAQCBTRUxFQ1QgYnJpbl9pbmRleF9jaGVj aygnYnJpbnRlc3RfaWR4Jzo6UkVHQ0xBU1MsIHRydWUpOwogLS0gcmVidWlsZCBpbmRleAogRFJP UCBJTkRFWCBicmludGVzdF9pZHg7CiBDUkVBVEUgSU5ERVggYnJpbnRlc3RfaWR4IE9OIGJyaW50 ZXN0IFVTSU5HIEJSSU4gKGEgaW50OF9taW5tYXhfbXVsdGlfb3BzKSBXSVRIIChQQUdFU19QRVJf UkFOR0UgPSAyKTsKLVNFTEVDVCBicmluX2luZGV4X2NoZWNrKCdicmludGVzdF9pZHgnOjpSRUdD TEFTUywgdHJ1ZSk7CitTRUxFQ1QgYnJpbl9pbmRleF9jaGVjaygnYnJpbnRlc3RfaWR4Jzo6UkVH Q0xBU1MsIHRydWUsIHRydWUpOwogIGJyaW5faW5kZXhfY2hlY2sgCiAtLS0tLS0tLS0tLS0tLS0t LS0KICAKQEAgLTg4LDcgKzg4LDcgQEAgQ1JFQVRFIElOREVYIGJyaW50ZXN0X2lkeCBPTiBicmlu dGVzdCBVU0lORyBCUklOIChhIGludDhfYmxvb21fb3BzKSBXSVRIIChQQUdFU18KIElOU0VSVCBJ TlRPIGJyaW50ZXN0IChhKSBTRUxFQ1QgeCBGUk9NIGdlbmVyYXRlX3NlcmllcygxLDEwMDAwMCkg eDsKIC0tIGNyZWF0ZSBzb21lIGVtcHR5IHJhbmdlcwogREVMRVRFIEZST00gYnJpbnRlc3QgV0hF UkUgYSA+IDIwMDAwIEFORCBhIDwgNDAwMDA7Ci1TRUxFQ1QgYnJpbl9pbmRleF9jaGVjaygnYnJp bnRlc3RfaWR4Jzo6UkVHQ0xBU1MsIHRydWUpOworU0VMRUNUIGJyaW5faW5kZXhfY2hlY2soJ2Jy aW50ZXN0X2lkeCc6OlJFR0NMQVNTLCB0cnVlLCB0cnVlKTsKICBicmluX2luZGV4X2NoZWNrIAog LS0tLS0tLS0tLS0tLS0tLS0tCiAgCkBAIC05Nyw3ICs5Nyw3IEBAIFNFTEVDVCBicmluX2luZGV4 X2NoZWNrKCdicmludGVzdF9pZHgnOjpSRUdDTEFTUywgdHJ1ZSk7CiAtLSByZWJ1aWxkIGluZGV4 CiBEUk9QIElOREVYIGJyaW50ZXN0X2lkeDsKIENSRUFURSBJTkRFWCBicmludGVzdF9pZHggT04g YnJpbnRlc3QgVVNJTkcgQlJJTiAoYSBpbnQ4X2Jsb29tX29wcykgV0lUSCAoUEFHRVNfUEVSX1JB TkdFID0gMik7Ci1TRUxFQ1QgYnJpbl9pbmRleF9jaGVjaygnYnJpbnRlc3RfaWR4Jzo6UkVHQ0xB U1MsIHRydWUpOworU0VMRUNUIGJyaW5faW5kZXhfY2hlY2soJ2JyaW50ZXN0X2lkeCc6OlJFR0NM QVNTLCB0cnVlLCB0cnVlKTsKICBicmluX2luZGV4X2NoZWNrIAogLS0tLS0tLS0tLS0tLS0tLS0t CiAgCkBAIC0xMTMsNyArMTEzLDcgQEAgU0VMRUNUIEJPWChwb2ludChyYW5kb20oKSAqIDEwMDAs IHJhbmRvbSgpICogMTAwMCksIHBvaW50KHJhbmRvbSgpICogMTAwMCwgcmFuZG8KIEZST00gZ2Vu ZXJhdGVfc2VyaWVzKDEsIDEwMDAwKTsKIC0tIGNyZWF0ZSBzb21lIGVtcHR5IHJhbmdlcwogREVM RVRFIEZST00gYnJpbnRlc3QgV0hFUkUgaWQgPiAyMDAwIEFORCBpZCA8IDQwMDA7Ci1TRUxFQ1Qg YnJpbl9pbmRleF9jaGVjaygnYnJpbnRlc3RfaWR4Jzo6UkVHQ0xBU1MsIHRydWUpOworU0VMRUNU IGJyaW5faW5kZXhfY2hlY2soJ2JyaW50ZXN0X2lkeCc6OlJFR0NMQVNTLCB0cnVlLCB0cnVlLCAn eyJAPiJ9Jyk7CiAgYnJpbl9pbmRleF9jaGVjayAKIC0tLS0tLS0tLS0tLS0tLS0tLQogIApAQCAt MTIyLDcgKzEyMiw3IEBAIFNFTEVDVCBicmluX2luZGV4X2NoZWNrKCdicmludGVzdF9pZHgnOjpS RUdDTEFTUywgdHJ1ZSk7CiAtLSByZWJ1aWxkIGluZGV4CiBEUk9QIElOREVYIGJyaW50ZXN0X2lk eDsKIENSRUFURSBJTkRFWCBicmludGVzdF9pZHggT04gYnJpbnRlc3QgVVNJTkcgQlJJTiAoYSBC T1hfSU5DTFVTSU9OX09QUykgV0lUSCAoUEFHRVNfUEVSX1JBTkdFID0gMik7Ci1TRUxFQ1QgYnJp bl9pbmRleF9jaGVjaygnYnJpbnRlc3RfaWR4Jzo6UkVHQ0xBU1MsIHRydWUpOworU0VMRUNUIGJy aW5faW5kZXhfY2hlY2soJ2JyaW50ZXN0X2lkeCc6OlJFR0NMQVNTLCB0cnVlLCB0cnVlLCAneyJA PiJ9Jyk7CiAgYnJpbl9pbmRleF9jaGVjayAKIC0tLS0tLS0tLS0tLS0tLS0tLQogIApkaWZmIC0t Z2l0IGEvY29udHJpYi9hbWNoZWNrL3NxbC9jaGVja19icmluLnNxbCBiL2NvbnRyaWIvYW1jaGVj ay9zcWwvY2hlY2tfYnJpbi5zcWwKaW5kZXggMGE1ZTI2ZWE4ZjUuLjBmNTg1NjdmNzZmIDEwMDY0 NAotLS0gYS9jb250cmliL2FtY2hlY2svc3FsL2NoZWNrX2JyaW4uc3FsCisrKyBiL2NvbnRyaWIv YW1jaGVjay9zcWwvY2hlY2tfYnJpbi5zcWwKQEAgLTcsNyArNyw3IEBAICQkIExBTkdVQUdFIHNx bDsKIC0tIGVtcHR5IHRhYmxlIGluZGV4IHNob3VsZCBiZSB2YWxpZAogQ1JFQVRFIFRBQkxFIGJy aW50ZXN0IChhIEJJR0lOVCkgV0lUSCAoRklMTEZBQ1RPUiA9IDEwKTsKIENSRUFURSBJTkRFWCBi cmludGVzdF9pZHggT04gYnJpbnRlc3QgVVNJTkcgQlJJTiAoYSk7Ci1TRUxFQ1QgYnJpbl9pbmRl eF9jaGVjaygnYnJpbnRlc3RfaWR4Jzo6UkVHQ0xBU1MsIHRydWUpOworU0VMRUNUIGJyaW5faW5k ZXhfY2hlY2soJ2JyaW50ZXN0X2lkeCc6OlJFR0NMQVNTLCB0cnVlLCB0cnVlKTsKIC0tIGNsZWFu dXAKIERST1AgVEFCTEUgYnJpbnRlc3Q7CiAKQEAgLTM1LDEyICszNSwxMiBAQCBDUkVBVEUgSU5E RVggYnJpbnRlc3RfaWR4IE9OIGJyaW50ZXN0IFVTSU5HIEJSSU4gKGEgaW50OF9taW5tYXhfb3Bz KSBXSVRIIChQQUdFUwogSU5TRVJUIElOVE8gYnJpbnRlc3QgKGEpIFNFTEVDVCB4IEZST00gZ2Vu ZXJhdGVfc2VyaWVzKDEsMTAwMDAwKSB4OwogLS0gY3JlYXRlIHNvbWUgZW1wdHkgcmFuZ2VzCiBE RUxFVEUgRlJPTSBicmludGVzdCBXSEVSRSBhID4gMjAwMDAgQU5EIGEgPCA0MDAwMDsKLVNFTEVD VCBicmluX2luZGV4X2NoZWNrKCdicmludGVzdF9pZHgnOjpSRUdDTEFTUywgdHJ1ZSk7CitTRUxF Q1QgYnJpbl9pbmRleF9jaGVjaygnYnJpbnRlc3RfaWR4Jzo6UkVHQ0xBU1MsIHRydWUsIHRydWUp OwogCiAtLSByZWJ1aWxkIGluZGV4CiBEUk9QIElOREVYIGJyaW50ZXN0X2lkeDsKIENSRUFURSBJ TkRFWCBicmludGVzdF9pZHggT04gYnJpbnRlc3QgVVNJTkcgQlJJTiAoYSBpbnQ4X21pbm1heF9v cHMpIFdJVEggKFBBR0VTX1BFUl9SQU5HRSA9IDIpOwotU0VMRUNUIGJyaW5faW5kZXhfY2hlY2so J2JyaW50ZXN0X2lkeCc6OlJFR0NMQVNTLCB0cnVlKTsKK1NFTEVDVCBicmluX2luZGV4X2NoZWNr KCdicmludGVzdF9pZHgnOjpSRUdDTEFTUywgdHJ1ZSwgdHJ1ZSk7CiAtLSBjbGVhbnVwCiBEUk9Q IFRBQkxFIGJyaW50ZXN0OwogCkBAIC01MiwxMiArNTIsMTIgQEAgQ1JFQVRFIElOREVYIGJyaW50 ZXN0X2lkeCBPTiBicmludGVzdCBVU0lORyBCUklOIChhIGludDhfbWlubWF4X211bHRpX29wcykg V0lUSAogSU5TRVJUIElOVE8gYnJpbnRlc3QgKGEpIFNFTEVDVCB4IEZST00gZ2VuZXJhdGVfc2Vy aWVzKDEsMTAwMDAwKSB4OwogLS0gY3JlYXRlIHNvbWUgZW1wdHkgcmFuZ2VzCiBERUxFVEUgRlJP TSBicmludGVzdCBXSEVSRSBhID4gMjAwMDAgQU5EIGEgPCA0MDAwMDsKLVNFTEVDVCBicmluX2lu ZGV4X2NoZWNrKCdicmludGVzdF9pZHgnOjpSRUdDTEFTUywgdHJ1ZSk7CitTRUxFQ1QgYnJpbl9p bmRleF9jaGVjaygnYnJpbnRlc3RfaWR4Jzo6UkVHQ0xBU1MsIHRydWUsIHRydWUpOwogCiAtLSBy ZWJ1aWxkIGluZGV4CiBEUk9QIElOREVYIGJyaW50ZXN0X2lkeDsKIENSRUFURSBJTkRFWCBicmlu dGVzdF9pZHggT04gYnJpbnRlc3QgVVNJTkcgQlJJTiAoYSBpbnQ4X21pbm1heF9tdWx0aV9vcHMp IFdJVEggKFBBR0VTX1BFUl9SQU5HRSA9IDIpOwotU0VMRUNUIGJyaW5faW5kZXhfY2hlY2soJ2Jy aW50ZXN0X2lkeCc6OlJFR0NMQVNTLCB0cnVlKTsKK1NFTEVDVCBicmluX2luZGV4X2NoZWNrKCdi cmludGVzdF9pZHgnOjpSRUdDTEFTUywgdHJ1ZSwgdHJ1ZSk7CiAtLSBjbGVhbnVwCiBEUk9QIFRB QkxFIGJyaW50ZXN0OwogCkBAIC02OSwxMiArNjksMTIgQEAgQ1JFQVRFIElOREVYIGJyaW50ZXN0 X2lkeCBPTiBicmludGVzdCBVU0lORyBCUklOIChhIGludDhfYmxvb21fb3BzKSBXSVRIIChQQUdF U18KIElOU0VSVCBJTlRPIGJyaW50ZXN0IChhKSBTRUxFQ1QgeCBGUk9NIGdlbmVyYXRlX3Nlcmll cygxLDEwMDAwMCkgeDsKIC0tIGNyZWF0ZSBzb21lIGVtcHR5IHJhbmdlcwogREVMRVRFIEZST00g YnJpbnRlc3QgV0hFUkUgYSA+IDIwMDAwIEFORCBhIDwgNDAwMDA7Ci1TRUxFQ1QgYnJpbl9pbmRl eF9jaGVjaygnYnJpbnRlc3RfaWR4Jzo6UkVHQ0xBU1MsIHRydWUpOworU0VMRUNUIGJyaW5faW5k ZXhfY2hlY2soJ2JyaW50ZXN0X2lkeCc6OlJFR0NMQVNTLCB0cnVlLCB0cnVlKTsKIAogLS0gcmVi dWlsZCBpbmRleAogRFJPUCBJTkRFWCBicmludGVzdF9pZHg7CiBDUkVBVEUgSU5ERVggYnJpbnRl c3RfaWR4IE9OIGJyaW50ZXN0IFVTSU5HIEJSSU4gKGEgaW50OF9ibG9vbV9vcHMpIFdJVEggKFBB R0VTX1BFUl9SQU5HRSA9IDIpOwotU0VMRUNUIGJyaW5faW5kZXhfY2hlY2soJ2JyaW50ZXN0X2lk eCc6OlJFR0NMQVNTLCB0cnVlKTsKK1NFTEVDVCBicmluX2luZGV4X2NoZWNrKCdicmludGVzdF9p ZHgnOjpSRUdDTEFTUywgdHJ1ZSwgdHJ1ZSk7CiAtLSBjbGVhbnVwCiBEUk9QIFRBQkxFIGJyaW50 ZXN0OwogCkBAIC04OCwxMiArODgsMTIgQEAgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwgMTAwMDAp OwogLS0gY3JlYXRlIHNvbWUgZW1wdHkgcmFuZ2VzCiBERUxFVEUgRlJPTSBicmludGVzdCBXSEVS RSBpZCA+IDIwMDAgQU5EIGlkIDwgNDAwMDsKIAotU0VMRUNUIGJyaW5faW5kZXhfY2hlY2soJ2Jy aW50ZXN0X2lkeCc6OlJFR0NMQVNTLCB0cnVlKTsKK1NFTEVDVCBicmluX2luZGV4X2NoZWNrKCdi cmludGVzdF9pZHgnOjpSRUdDTEFTUywgdHJ1ZSwgdHJ1ZSwgJ3siQD4ifScpOwogCiAtLSByZWJ1 aWxkIGluZGV4CiBEUk9QIElOREVYIGJyaW50ZXN0X2lkeDsKIENSRUFURSBJTkRFWCBicmludGVz dF9pZHggT04gYnJpbnRlc3QgVVNJTkcgQlJJTiAoYSBCT1hfSU5DTFVTSU9OX09QUykgV0lUSCAo UEFHRVNfUEVSX1JBTkdFID0gMik7Ci1TRUxFQ1QgYnJpbl9pbmRleF9jaGVjaygnYnJpbnRlc3Rf aWR4Jzo6UkVHQ0xBU1MsIHRydWUpOworU0VMRUNUIGJyaW5faW5kZXhfY2hlY2soJ2JyaW50ZXN0 X2lkeCc6OlJFR0NMQVNTLCB0cnVlLCB0cnVlLCAneyJAPiJ9Jyk7CiAtLSBjbGVhbnVwCiBEUk9Q IFRBQkxFIGJyaW50ZXN0OwogCmRpZmYgLS1naXQgYS9jb250cmliL2FtY2hlY2svdC8wMDdfdmVy aWZ5X2JyaW4ucGwgYi9jb250cmliL2FtY2hlY2svdC8wMDdfdmVyaWZ5X2JyaW4ucGwKaW5kZXgg MmM2MmI3NmNjNzAuLjUxYmZlZDdlMjczIDEwMDY0NAotLS0gYS9jb250cmliL2FtY2hlY2svdC8w MDdfdmVyaWZ5X2JyaW4ucGwKKysrIGIvY29udHJpYi9hbWNoZWNrL3QvMDA3X3ZlcmlmeV9icmlu LnBsCkBAIC0yMDAsNiArMjAwLDU1IEBAIG15IEB0ZXN0cyA9ICgKICAgICAgICAgICAgIHJldHVy biBxcShJTlNFUlQgSU5UTyAkdGVzdF9zdHJ1Y3QtPnt0YWJsZV9uYW1lfSAoYSkgVkFMVUVTICgn YWFhYWEnKTspOwogICAgICAgICB9LAogICAgICAgICBleHBlY3RlZCAgID0+IHdyYXAoInJldm1h cCBkb2Vzbid0IHBvaW50IHRvIGluZGV4IHR1cGxlLiBSYW5nZSBibGtubzogMCwgcmV2bWFwIGl0 ZW06ICgxLDApLCBpbmRleCB0dXBsZTogKDIsMSkiKQorICAgIH0sCisgICAgeworICAgICAgICAj IHJhbmdlIGlzIG1hcmtlZCBhcyBlbXB0eV9yYW5nZSwgYnV0IGhlYXAgaGFzIHNvbWUgZGF0YSBm b3IgdGhlIHJhbmdlCisKKyAgICAgICAgZmluZCAgICAgPT4gcGFjaygnTENDJywgMCwgMHg4OCwg MHgwMyksCisgICAgICAgIHJlcGxhY2UgID0+IHBhY2soJ0xDQycsIDAsIDB4QTgsIDB4MDEpLAor ICAgICAgICBibGtubyAgICAgID0+IDIsICMgcmVndWxhciBwYWdlCisgICAgICAgIHRhYmxlX2Rh dGEgPT4gc3ViIHsKKyAgICAgICAgICAgIG15ICgkdGVzdF9zdHJ1Y3QpID0gQF87CisgICAgICAg ICAgICByZXR1cm4gcXEoSU5TRVJUIElOVE8gJHRlc3Rfc3RydWN0LT57dGFibGVfbmFtZX0gKGEp IFZBTFVFUyAobnVsbCk7KTsKKyAgICAgICAgfSwKKyAgICAgICAgZXhwZWN0ZWQgICA9PiB3cmFw KCdyYW5nZSBpcyBtYXJrZWQgYXMgZW1wdHkgYnV0IGNvbnRhaW5zIHF1YWxpZmllZCBsaXZlIHR1 cGxlcy4gUmFuZ2UgYmxrbm86IDAsIGhlYXAgdGlkICgwLDEpJykKKyAgICB9LAorICAgIHsKKyAg ICAgICAgIyByYW5nZSBoYXNudWxscyAmIGFsbG51bGxzIGFyZSBmYWxzZSwgYnV0IGhlYXAgY29u dGFpbnMgbnVsbCB2YWx1ZXMgZm9yIHRoZSByYW5nZQorCisgICAgICAgIGZpbmQgICAgID0+IHBh Y2soJ0xDQycsIDAsIDB4ODgsIDB4MDIpLAorICAgICAgICByZXBsYWNlICA9PiBwYWNrKCdMQ0Mn LCAwLCAweDg4LCAweDAwKSwKKyAgICAgICAgYmxrbm8gICAgICA9PiAyLCAjIHJlZ3VsYXIgcGFn ZQorICAgICAgICB0YWJsZV9kYXRhID0+IHN1YiB7CisgICAgICAgICAgICBteSAoJHRlc3Rfc3Ry dWN0KSA9IEBfOworICAgICAgICAgICAgcmV0dXJuIHFxKElOU0VSVCBJTlRPICR0ZXN0X3N0cnVj dC0+e3RhYmxlX25hbWV9IChhKSBWQUxVRVMgKG51bGwpLCAoJ2FhYWFhJyk7KTsKKyAgICAgICAg fSwKKyAgICAgICAgZXhwZWN0ZWQgICA9PiB3cmFwKCdyYW5nZSBoYXNudWxscyBhbmQgYWxsbnVs bHMgYXJlIGZhbHNlLCBidXQgY29udGFpbnMgYSBudWxsIHZhbHVlLiBSYW5nZSBibGtubzogMCwg aGVhcCB0aWQgKDAsMSknKQorICAgIH0sCisgICAgeworICAgICAgICAjIHJhbmdlIGFsbG51bGxz IGlzIHRydWUsIGJ1dCBoZWFwIGNvbnRhaW5zIG5vbi1udWxsIHZhbHVlcyBmb3IgdGhlIHJhbmdl CisKKyAgICAgICAgZmluZCAgICAgPT4gcGFjaygnTENDJywgMCwgMHg4OCwgMHgwMiksCisgICAg ICAgIHJlcGxhY2UgID0+IHBhY2soJ0xDQycsIDAsIDB4ODgsIDB4MDEpLAorICAgICAgICBibGtu byAgICAgID0+IDIsICMgcmVndWxhciBwYWdlCisgICAgICAgIHRhYmxlX2RhdGEgPT4gc3ViIHsK KyAgICAgICAgICAgIG15ICgkdGVzdF9zdHJ1Y3QpID0gQF87CisgICAgICAgICAgICByZXR1cm4g cXEoSU5TRVJUIElOVE8gJHRlc3Rfc3RydWN0LT57dGFibGVfbmFtZX0gKGEpIFZBTFVFUyAobnVs bCksICgnYWFhYWEnKTspOworICAgICAgICB9LAorICAgICAgICBleHBlY3RlZCAgID0+IHdyYXAo J3JhbmdlIGFsbG51bGxzIGlzIHRydWUsIGJ1dCBjb250YWlucyBub25udWxsIHZhbHVlLiBSYW5n ZSBibGtubzogMCwgaGVhcCB0aWQgKDAsMiknKQorICAgIH0sCisgICAgeworICAgICAgICAjIGNv bnNpc3RlbnQgZnVuY3Rpb24gcmV0dXJuIEZBTFNFIGZvciB0aGUgdmFsaWQgaGVhcCB2YWx1ZQor ICAgICAgICAjIHJlcGxhY2UgImNjY2NjIiB3aXRoICJiYmJiYiIgc28gdGhhdCBtaW5fbWF4IGlu ZGV4IHdhcyB0b28gbmFycm93CisKKyAgICAgICAgZmluZCAgICAgICA9PiAnY2NjY2MnLAorICAg ICAgICByZXBsYWNlICAgID0+ICdiYmJiYicsCisgICAgICAgIGJsa25vICAgICAgPT4gMiwgIyBy ZWd1bGFyIHBhZ2UKKyAgICAgICAgdGFibGVfZGF0YSA9PiBzdWIgeworICAgICAgICAgICAgbXkg KCR0ZXN0X3N0cnVjdCkgPSBAXzsKKyAgICAgICAgICAgIHJldHVybiBxcShJTlNFUlQgSU5UTyAk dGVzdF9zdHJ1Y3QtPnt0YWJsZV9uYW1lfSAoYSkgVkFMVUVTICgnYWFhYWEnKSwgKCdjY2NjYycp Oyk7CisgICAgICAgIH0sCisgICAgICAgIGV4cGVjdGVkICAgPT4gd3JhcCgnaGVhcCB0dXBsZSBp bmNvbnNpc3RlbnQgd2l0aCBpbmRleC4gUmFuZ2UgYmxrbm86IDAsIGhlYXAgdGlkICgwLDIpJykK ICAgICB9CiApOwogCkBAIC0yNDEsNyArMjkwLDcgQEAgZm9yZWFjaCBteSAkdGVzdF9zdHJ1Y3Qg KEB0ZXN0cykgewogJG5vZGUtPnN0YXJ0OwogCiBmb3JlYWNoIG15ICR0ZXN0X3N0cnVjdCAoQHRl c3RzKSB7Ci0gICAgbXkgKCRyZXN1bHQsICRzdGRvdXQsICRzdGRlcnIpID0gJG5vZGUtPnBzcWwo J3Bvc3RncmVzJywgcXEoU0VMRUNUIGJyaW5faW5kZXhfY2hlY2soJyR0ZXN0X3N0cnVjdC0+e2lu ZGV4X25hbWV9JywgdHJ1ZSkpKTsKKyAgICBteSAoJHJlc3VsdCwgJHN0ZG91dCwgJHN0ZGVycikg PSAkbm9kZS0+cHNxbCgncG9zdGdyZXMnLCBxcShTRUxFQ1QgYnJpbl9pbmRleF9jaGVjaygnJHRl c3Rfc3RydWN0LT57aW5kZXhfbmFtZX0nLCB0cnVlLCB0cnVlKSkpOwogICAgIGxpa2UoJHN0ZGVy ciwgJHRlc3Rfc3RydWN0LT57ZXhwZWN0ZWR9KTsKIH0KIApkaWZmIC0tZ2l0IGEvY29udHJpYi9h bWNoZWNrL3ZlcmlmeV9icmluLmMgYi9jb250cmliL2FtY2hlY2svdmVyaWZ5X2JyaW4uYwppbmRl eCA3ZTQ0NTAwM2FjZS4uMzJhN2E0Yzc4MzIgMTAwNjQ0Ci0tLSBhL2NvbnRyaWIvYW1jaGVjay92 ZXJpZnlfYnJpbi5jCisrKyBiL2NvbnRyaWIvYW1jaGVjay92ZXJpZnlfYnJpbi5jCkBAIC0zOSw2 ICszOSw4IEBAIHR5cGVkZWYgc3RydWN0IEJyaW5DaGVja1N0YXRlCiAJLyogQ2hlY2sgYXJndW1l bnRzICovCiAKIAlib29sCQlyZWd1bGFyX3BhZ2VzX2NoZWNrOworCWJvb2wJCWhlYXBfYWxsX2Nv bnNpc3RlbnQ7CisJQXJyYXlUeXBlICAqaGVhcF9hbGxfY29uc2lzdGVudF9vcGVyX25hbWVzOwog CiAJLyogQlJJTiBjaGVjayBjb21tb24gZmllbGRzICovCiAKQEAgLTY3LDYgKzY5LDMwIEBAIHR5 cGVkZWYgc3RydWN0IEJyaW5DaGVja1N0YXRlCiAJUGFnZQkJcmVncGFnZTsKIAlPZmZzZXROdW1i ZXIgcmVncGFnZW9mZnNldDsKIAorCS8qIEFsbCBoZWFwIGNvbnNpc3RlbnQgY2hlY2sgZmllbGRz ICovCisKKwlTdHJpbmcJICAqKm9wZXJhdG9yTmFtZXM7CisJQnJpblJldm1hcCAqcmV2bWFwOwor CUJ1ZmZlcgkJYnVmOworCUZtZ3JJbmZvICAgKmNvbnNpc3RlbnRGbjsKKwkvKiBTY2FuIGtleXMg Zm9yIHJlZ3VsYXIgdmFsdWVzICovCisJU2NhbktleSAgICAqbm9ubnVsbF9zazsKKwkvKiBTY2Fu IGtleXMgZm9yIG51bGwgdmFsdWVzICovCisJU2NhbktleSAgICAqaXNudWxsX3NrOworCWRvdWJs ZQkJcmFuZ2VfY250OworCS8qIGZpcnN0IGJsb2NrIG9mIHRoZSBuZXh0IHJhbmdlICovCisJQmxv Y2tOdW1iZXIgbmV4dHJhbmdlQmxrOworCisJLyoKKwkgKiBjaGVja2FibGVfcmFuZ2Ugc2hvd3Mg aWYgY3VycmVudCByYW5nZSBjb3VsZCBiZSBjaGVja2VkIGFuZCBkdHVwCisJICogY29udGFpbnMg dmFsaWQgaW5kZXggdHVwbGUgZm9yIHRoZSByYW5nZS4gSXQgY291bGQgYmUgZmFsc2UgaWYgdGhl CisJICogY3VycmVudCByYW5nZSBpcyBub3Qgc3VtbWFyaXplZCwgb3IgaXQncyBwbGFjZWhvbGRl ciwgb3IgaXQncyBqdXN0IGEKKwkgKiBiZWdpbm5pbmcgb2YgdGhlIGNoZWNrCisJICovCisJYm9v bAkJY2hlY2thYmxlX3JhbmdlOworCUJyaW5NZW1UdXBsZSAqZHR1cDsKKwlNZW1vcnlDb250ZXh0 IHJhbmdlQ3R4OworCU1lbW9yeUNvbnRleHQgaGVhcHR1cGxlQ3R4OwogfQkJCUJyaW5DaGVja1N0 YXRlOwogCiBzdGF0aWMgdm9pZCBicmluX2NoZWNrKFJlbGF0aW9uIGlkeHJlbCwgUmVsYXRpb24g aGVhcHJlbCwgdm9pZCAqY2FsbGJhY2tfc3RhdGUsIGJvb2wgcmVhZG9ubHkpOwpAQCAtODcsNiAr MTEzLDIzIEBAIHN0YXRpYyBib29sIHJldm1hcF9wb2ludHNfdG9faW5kZXhfdHVwbGUoQnJpbkNo ZWNrU3RhdGUgKiBzdGF0ZSk7CiAKIHN0YXRpYyBJdGVtSWQgUGFnZUdldEl0ZW1JZENhcmVmdWwo QnJpbkNoZWNrU3RhdGUgKiBzdGF0ZSk7CiAKK3N0YXRpYyB2b2lkIGNoZWNrX2FsbF9oZWFwX2Nv bnNpc3RlbnQoQnJpbkNoZWNrU3RhdGUgKiBzdGF0ZSk7CisKK3N0YXRpYyB2b2lkIGNoZWNrX2Fu ZF9wcmVwYXJlX29wZXJhdG9yX25hbWVzKEJyaW5DaGVja1N0YXRlICogc3RhdGUpOworCitzdGF0 aWMgdm9pZCBicmluX2NoZWNrX2NhbGxiYWNrKFJlbGF0aW9uIGluZGV4LAorCQkJCQkJCQlJdGVt UG9pbnRlciB0aWQsCisJCQkJCQkJCURhdHVtICp2YWx1ZXMsCisJCQkJCQkJCWJvb2wgKmlzbnVs bCwKKwkJCQkJCQkJYm9vbCB0dXBsZUlzQWxpdmUsCisJCQkJCQkJCXZvaWQgKmJyc3RhdGUpOwor CitzdGF0aWMgdm9pZCBjaGVja19oZWFwX3R1cGxlKEJyaW5DaGVja1N0YXRlICogc3RhdGUsIGNv bnN0IERhdHVtICp2YWx1ZXMsIGNvbnN0IGJvb2wgKm51bGxzLCBJdGVtUG9pbnRlciB0aWQpOwor CitzdGF0aWMgU2NhbktleSBwcmVwYXJlX25vbm51bGxfc2Nhbl9rZXkoY29uc3QgQnJpbkNoZWNr U3RhdGUgKiBzdGF0ZSwgQXR0ck51bWJlciBhdHRubyk7CisKK3N0YXRpYyBTY2FuS2V5IHByZXBh cmVfaXNudWxsX3NjYW5fa2V5KEF0dHJOdW1iZXIgYXR0bm8pOworCiBzdGF0aWMgdm9pZCBicmlu X2NoZWNrX2VyZXBvcnQoQnJpbkNoZWNrU3RhdGUgKiBzdGF0ZSwgY29uc3QgY2hhciAqZm10KTsK IAogc3RhdGljIHZvaWQgcmV2bWFwX2l0ZW1fZXJlcG9ydChCcmluQ2hlY2tTdGF0ZSAqIHN0YXRl LCBjb25zdCBjaGFyICpmbXQpOwpAQCAtOTUsNiArMTM4LDcgQEAgc3RhdGljIHZvaWQgaW5kZXhf dHVwbGVfZXJlcG9ydChCcmluQ2hlY2tTdGF0ZSAqIHN0YXRlLCBjb25zdCBjaGFyICpmbXQpOwog CiBzdGF0aWMgdm9pZCBpbmRleF90dXBsZV9vbmx5X2VyZXBvcnQoQnJpbkNoZWNrU3RhdGUgKiBz dGF0ZSwgY29uc3QgY2hhciAqZm10KTsKIAorc3RhdGljIHZvaWQgYWxsX2NvbnNpc3RfZXJlcG9y dChjb25zdCBCcmluQ2hlY2tTdGF0ZSAqIHN0YXRlLCBjb25zdCBJdGVtUG9pbnRlckRhdGEgKnRp ZCwgY29uc3QgY2hhciAqbWVzc2FnZSk7CiAKIERhdHVtCiBicmluX2luZGV4X2NoZWNrKFBHX0ZV TkNUSU9OX0FSR1MpCkBAIC0xMDMsNiArMTQ3LDggQEAgYnJpbl9pbmRleF9jaGVjayhQR19GVU5D VElPTl9BUkdTKQogCUJyaW5DaGVja1N0YXRlICpzdGF0ZSA9IHBhbGxvYzAoc2l6ZW9mKEJyaW5D aGVja1N0YXRlKSk7CiAKIAlzdGF0ZS0+cmVndWxhcl9wYWdlc19jaGVjayA9IFBHX0dFVEFSR19C T09MKDEpOworCXN0YXRlLT5oZWFwX2FsbF9jb25zaXN0ZW50ID0gUEdfR0VUQVJHX0JPT0woMik7 CisJc3RhdGUtPmhlYXBfYWxsX2NvbnNpc3RlbnRfb3Blcl9uYW1lcyA9IFBHX0dFVEFSR19BUlJB WVRZUEVfUCgzKTsKIAogCWFtY2hlY2tfbG9ja19yZWxhdGlvbl9hbmRfY2hlY2soaW5kcmVsaWQs CiAJCQkJCQkJCQlCUklOX0FNX09JRCwKQEAgLTEyNyw5ICsxNzMsMjEgQEAgYnJpbl9jaGVjayhS ZWxhdGlvbiBpZHhyZWwsIFJlbGF0aW9uIGhlYXByZWwsIHZvaWQgKmNhbGxiYWNrX3N0YXRlLCBi b29sIHJlYWRvbmwKIAlzdGF0ZS0+YmRlc2MgPSBicmluX2J1aWxkX2Rlc2MoaWR4cmVsKTsKIAlz dGF0ZS0+bmF0dHMgPSBzdGF0ZS0+YmRlc2MtPmJkX3R1cGRlc2MtPm5hdHRzOwogCisJLyoKKwkg KiBXZSBrbm93IGhvdyBtYW55IGF0dHJpYnV0ZXMgaW5kZXggaGFzLCBzbyBsZXQncyBwcm9jZXNz IG9wZXJhdG9yIG5hbWVzCisJICogYXJyYXkKKwkgKi8KKwlpZiAoc3RhdGUtPmhlYXBfYWxsX2Nv bnNpc3RlbnQpCisJeworCQljaGVja19hbmRfcHJlcGFyZV9vcGVyYXRvcl9uYW1lcyhzdGF0ZSk7 CisJfQogCiAJY2hlY2tfYnJpbl9pbmRleF9zdHJ1Y3R1cmUoc3RhdGUpOwogCisJaWYgKHN0YXRl LT5oZWFwX2FsbF9jb25zaXN0ZW50KQorCXsKKwkJY2hlY2tfYWxsX2hlYXBfY29uc2lzdGVudChz dGF0ZSk7CisJfQogCiAJYnJpbl9mcmVlX2Rlc2Moc3RhdGUtPmJkZXNjKTsKIH0KQEAgLTc0MCw2 ICs3OTgsNDE0IEBAIFBhZ2VHZXRJdGVtSWRDYXJlZnVsKEJyaW5DaGVja1N0YXRlICogc3RhdGUp CiAJcmV0dXJuIGl0ZW1pZDsKIH0KIAorLyoKKyAqIENoZWNrIHRoYXQgZXZlcnkgaGVhcCB0dXBs ZSBhcmUgY29uc2lzdGVudCB3aXRoIHRoZSBpbmRleC4KKyAqCisgKiBIZXJlIHdlIGdlbmVyYXRl IFNjYW5LZXkgZm9yIGV2ZXJ5IGhlYXAgdHVwbGUgYW5kIHRlc3QgaXQgYWdhaW5zdAorICogYXBw cm9wcmlhdGUgcmFuZ2UgdXNpbmcgY29uc2lzdGVudEZuIChmb3IgU2NhbktleSBnZW5lcmF0aW9u IGxvZ2ljIGxvb2sgJ3ByZXBhcmVfbm9ubnVsbF9zY2FuX2tleScpCisgKgorICogQWxzbywgd2Ug Y2hlY2sgdGhhdCBmaWVsZHMgJ2VtcHR5X3JhbmdlJywgJ2FsbF9udWxscycgYW5kICdoYXNfbnVs bHMnCisgKiBhcmUgbm90IHRvbyAibmFycm93IiBmb3IgZWFjaCByYW5nZSwgd2hpY2ggbWVhbnM6 CisgKiAxKSBoYXNfbnVsbHMgPSBmYWxzZSwgYnV0IHdlIHNlZSBudWxsIHZhbHVlIChvbmx5IGZv ciBvaV9yZWd1bGFyX251bGxzIGlzIHRydWUpCisgKiAyKSBhbGxfbnVsbHMgPSB0cnVlLCBidXQg d2Ugc2VlIG5vbm51bGwgdmFsdWUuCisgKiAzKSBlbXB0eV9yYW5nZSA9IHRydWUsIGJ1dCB3ZSBz ZWUgdHVwbGUgd2l0aGluIHRoZSByYW5nZS4KKyAqCisgKiBXZSB1c2UgYWxsb3dTeW5jID0gZmFs c2UsIGJlY2F1c2UgdGhpcyB3YXkKKyAqIHdlIHByb2Nlc3MgZnVsbCByYW5nZXMgb25lIGJ5IG9u ZSBmcm9tIHRoZSBmaXJzdCByYW5nZS4KKyAqIEl0J3Mgbm90IG5lY2Vzc2FyeSwgYnV0IG1ha2Vz IHRoZSBjb2RlIHNpbXBsZXIgYW5kIHRoaXMgd2F5CisgKiB3ZSBuZWVkIHRvIGZldGNoIGV2ZXJ5 IGluZGV4IHR1cGxlIG9ubHkgb25jZS4KKyAqLworc3RhdGljIHZvaWQKK2NoZWNrX2FsbF9oZWFw X2NvbnNpc3RlbnQoQnJpbkNoZWNrU3RhdGUgKiBzdGF0ZSkKK3sKKwlSZWxhdGlvbglpZHhyZWwg PSBzdGF0ZS0+aWR4cmVsOworCVJlbGF0aW9uCWhlYXByZWwgPSBzdGF0ZS0+aGVhcHJlbDsKKwlk b3VibGUJCXJlbHR1cGxlczsKKwlJbmRleEluZm8gICppbmRleEluZm87CisKKwkvKiBBbGwgaGVh cCBjb25zaXN0ZW50IGNoZWNrIGZpZWxkcyBpbml0aWFsaXphdGlvbiAqLworCisJc3RhdGUtPnJl dm1hcCA9IGJyaW5SZXZtYXBJbml0aWFsaXplKGlkeHJlbCwgJnN0YXRlLT5wYWdlc1BlclJhbmdl KTsKKwlzdGF0ZS0+ZHR1cCA9IGJyaW5fbmV3X21lbXR1cGxlKHN0YXRlLT5iZGVzYyk7CisJc3Rh dGUtPmNoZWNrYWJsZV9yYW5nZSA9IGZhbHNlOworCXN0YXRlLT5jb25zaXN0ZW50Rm4gPSBwYWxs b2MwX2FycmF5KEZtZ3JJbmZvLCBzdGF0ZS0+bmF0dHMpOworCXN0YXRlLT5yYW5nZV9jbnQgPSAw OworCS8qIG5leHQgcmFuZ2UgaXMgdGhlIGZpcnN0IHJhbmdlIGluIHRoZSBiZWdpbm5pbmcgKi8K KwlzdGF0ZS0+bmV4dHJhbmdlQmxrID0gMDsKKwlzdGF0ZS0+bm9ubnVsbF9zayA9IHBhbGxvYzBf YXJyYXkoU2NhbktleSwgc3RhdGUtPm5hdHRzKTsKKwlzdGF0ZS0+aXNudWxsX3NrID0gcGFsbG9j MF9hcnJheShTY2FuS2V5LCBzdGF0ZS0+bmF0dHMpOworCXN0YXRlLT5yYW5nZUN0eCA9IEFsbG9j U2V0Q29udGV4dENyZWF0ZShDdXJyZW50TWVtb3J5Q29udGV4dCwKKwkJCQkJCQkJCQkJImJyaW4g Y2hlY2sgcmFuZ2UgY29udGV4dCIsCisJCQkJCQkJCQkJCUFMTE9DU0VUX0RFRkFVTFRfU0laRVMp OworCXN0YXRlLT5oZWFwdHVwbGVDdHggPSBBbGxvY1NldENvbnRleHRDcmVhdGUoQ3VycmVudE1l bW9yeUNvbnRleHQsCisJCQkJCQkJCQkJCQkiYnJpbiBjaGVjayB0dXBsZSBjb250ZXh0IiwKKwkJ CQkJCQkJCQkJCUFMTE9DU0VUX0RFRkFVTFRfU0laRVMpOworCisJLyoKKwkgKiBQcmVwYXJlICJu b24tbnVsbCIgYW5kICJpc19udWxsIiBzY2FuIGtleXMgYW5kIGNvbnNpc3RlbnQgZm4gZm9yIGVh Y2gKKwkgKiBhdHRyaWJ1dGUKKwkgKi8KKwlmb3IgKEF0dHJOdW1iZXIgYXR0bm8gPSAxOyBhdHRu byA8PSBzdGF0ZS0+bmF0dHM7IGF0dG5vKyspCisJeworCQlGbWdySW5mbyAgICp0bXA7CisKKwkJ dG1wID0gaW5kZXhfZ2V0cHJvY2luZm8oaWR4cmVsLCBhdHRubywgQlJJTl9QUk9DTlVNX0NPTlNJ U1RFTlQpOworCQlmbWdyX2luZm9fY29weSgmc3RhdGUtPmNvbnNpc3RlbnRGblthdHRubyAtIDFd LCB0bXAsIEN1cnJlbnRNZW1vcnlDb250ZXh0KTsKKworCQlzdGF0ZS0+bm9ubnVsbF9za1thdHRu byAtIDFdID0gcHJlcGFyZV9ub25udWxsX3NjYW5fa2V5KHN0YXRlLCBhdHRubyk7CisJCXN0YXRl LT5pc251bGxfc2tbYXR0bm8gLSAxXSA9IHByZXBhcmVfaXNudWxsX3NjYW5fa2V5KGF0dG5vKTsK Kwl9CisKKwlpbmRleEluZm8gPSBCdWlsZEluZGV4SW5mbyhpZHhyZWwpOworCisJLyoKKwkgKiBV c2Ugc25hcHNob3QgdG8gY2hlY2sgb25seSB0aG9zZSB0dXBsZXMgdGhhdCBhcmUgZ3VhcmFudGVl ZCB0byBiZQorCSAqIGluZGV4ZWQgYWxyZWFkeS4gVXNpbmcgU25hcHNob3RBbnkgd291bGQgbWFr ZSBpdCBtb3JlIGRpZmZpY3VsdCB0byBzYXkKKwkgKiBpZiB0aGVyZSBpcyBhIGNvcnJ1cHRpb24g b3IgY2hlY2tlZCB0dXBsZSBqdXN0IGhhdmVuJ3QgYmVlbiBpbmRleGVkCisJICogeWV0LgorCSAq LworCWluZGV4SW5mby0+aWlfQ29uY3VycmVudCA9IHRydWU7CisJcmVsdHVwbGVzID0gdGFibGVf aW5kZXhfYnVpbGRfc2NhbihoZWFwcmVsLCBpZHhyZWwsIGluZGV4SW5mbywgZmFsc2UsIHRydWUs CisJCQkJCQkJCQkgICBicmluX2NoZWNrX2NhbGxiYWNrLCAodm9pZCAqKSBzdGF0ZSwgTlVMTCk7 CisKKwllbG9nKERFQlVHMywgInJhbmdlcyB3ZXJlIGNoZWNrZWQ6ICVmIiwgc3RhdGUtPnJhbmdl X2NudCk7CisJZWxvZyhERUJVRzMsICJzY2FuIHRvdGFsIHR1cGxlczogJWYiLCByZWx0dXBsZXMp OworCisJaWYgKHN0YXRlLT5idWYgIT0gSW52YWxpZEJ1ZmZlcikKKwkJUmVsZWFzZUJ1ZmZlcihz dGF0ZS0+YnVmKTsKKworCWJyaW5SZXZtYXBUZXJtaW5hdGUoc3RhdGUtPnJldm1hcCk7CisJTWVt b3J5Q29udGV4dERlbGV0ZShzdGF0ZS0+cmFuZ2VDdHgpOworCU1lbW9yeUNvbnRleHREZWxldGUo c3RhdGUtPmhlYXB0dXBsZUN0eCk7Cit9CisKKy8qCisgKiBDaGVjayBvcGVyYXRvciBuYW1lcyBh cnJheSBpbnB1dCBwYXJhbWV0ZXIgYW5kIGNvbnZlcnQgaXQgdG8gYXJyYXkgb2Ygc3RyaW5ncwor ICogRW1wdHkgaW5wdXQgYXJyYXkgbWVhbnMgd2UgdXNlICI9IiBvcGVyYXRvciBmb3IgZXZlcnkg YXR0cmlidXRlCisgKi8KK3N0YXRpYyB2b2lkCitjaGVja19hbmRfcHJlcGFyZV9vcGVyYXRvcl9u YW1lcyhCcmluQ2hlY2tTdGF0ZSAqIHN0YXRlKQoreworCU9pZAkJCWVsZW1lbnRfdHlwZSA9IEFS Ul9FTEVNVFlQRShzdGF0ZS0+aGVhcF9hbGxfY29uc2lzdGVudF9vcGVyX25hbWVzKTsKKwlpbnQx NgkJdHlwbGVuOworCWJvb2wJCXR5cGJ5dmFsOworCWNoYXIJCXR5cGFsaWduOworCURhdHVtCSAg ICp2YWx1ZXM7CisJYm9vbAkgICAqZWxlbV9udWxsczsKKwlpbnQJCQludW1fZWxlbXM7CisKKwlz dGF0ZS0+b3BlcmF0b3JOYW1lcyA9IHBhbGxvYyhzaXplb2YoU3RyaW5nKSAqIHN0YXRlLT5uYXR0 cyk7CisKKwlnZXRfdHlwbGVuYnl2YWxhbGlnbihlbGVtZW50X3R5cGUsICZ0eXBsZW4sICZ0eXBi eXZhbCwgJnR5cGFsaWduKTsKKwlkZWNvbnN0cnVjdF9hcnJheShzdGF0ZS0+aGVhcF9hbGxfY29u c2lzdGVudF9vcGVyX25hbWVzLCBlbGVtZW50X3R5cGUsIHR5cGxlbiwgdHlwYnl2YWwsIHR5cGFs aWduLAorCQkJCQkgICZ2YWx1ZXMsICZlbGVtX251bGxzLCAmbnVtX2VsZW1zKTsKKworCS8qIElm IHdlIGhhdmUgc29tZSBpbnB1dCBjaGVjayBpdCBhbmQgY29udmVydCB0byBTdHJpbmcqKiAqLwor CWlmIChudW1fZWxlbXMgIT0gMCkKKwl7CisJCWlmIChudW1fZWxlbXMgIT0gc3RhdGUtPm5hdHRz KQorCQl7CisJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkoZXJyY29kZShFUlJDT0RFX0lOVkFMSURf UEFSQU1FVEVSX1ZBTFVFKSwKKwkJCQkJIGVycm1zZygiT3BlcmF0b3IgbmFtZXMgYXJyYXkgbGVu Z3RoICV1LCBidXQgaW5kZXggaGFzICV1IGF0dHJpYnV0ZXMiLAorCQkJCQkJCW51bV9lbGVtcywg c3RhdGUtPm5hdHRzKSkpOworCQl9CisKKwkJZm9yIChpbnQgaSA9IDA7IGkgPCBudW1fZWxlbXM7 IGkrKykKKwkJeworCQkJaWYgKGVsZW1fbnVsbHNbaV0pCisJCQl7CisJCQkJZXJlcG9ydChFUlJP UiwKKwkJCQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLAorCQkJ CQkJIGVycm1zZygiT3BlcmF0b3IgbmFtZXMgYXJyYXkgY29udGFpbnMgTlVMTCIpKSk7CisJCQl9 CisJCQlzdGF0ZS0+b3BlcmF0b3JOYW1lc1tpXSA9IG1ha2VTdHJpbmcoVGV4dERhdHVtR2V0Q1N0 cmluZyh2YWx1ZXNbaV0pKTsKKwkJfQorCX0KKwllbHNlCisJeworCQkvKiBJZiB0aGVyZSBpcyBu byBpbnB1dCBqdXN0IHVzZSAiPSIgb3BlcmF0b3IgZm9yIGFsbCBhdHRyaWJ1dGVzICovCisJCWZv ciAoaW50IGkgPSAwOyBpIDwgc3RhdGUtPm5hdHRzOyBpKyspCisJCXsKKwkJCXN0YXRlLT5vcGVy YXRvck5hbWVzW2ldID0gbWFrZVN0cmluZygiPSIpOworCQl9CisJfQorfQorCisvKgorICogUHJl cGFyZSBTY2FuS2V5IGZvciBpbmRleCBhdHRyaWJ1dGUuCisgKgorICogQ29uc2lzdGVudEZuIHJl cXVpcmVzIFNjYW5LZXksIHNvIHdlIG5lZWQgdG8gZ2VuZXJhdGUgU2NhbktleSBmb3IgZXZlcnkK KyAqIGF0dHJpYnV0ZSBzb21laG93LiBXZSB3YW50IFNjYW5LZXkgdGhhdCB3b3VsZCByZXN1bHQg aW4gVFJVRSBmb3IgZXZlcnkgaGVhcAorICogdHVwbGUgd2l0aGluIHRoZSByYW5nZSB3aGVuIHdl IHVzZSBpdHMgaW5kZXhlZCB2YWx1ZSBhcyBza19hcmd1bWVudC4KKyAqIFRvIGdlbmVyYXRlIHN1 Y2ggYSBTY2FuS2V5IHdlIG5lZWQgdG8gZGVmaW5lIHRoZSByaWdodCBvcGVyYW5kIHR5cGUgYW5k IHRoZSBzdHJhdGVneSBudW1iZXIuCisgKiBSaWdodCBvcGVyYW5kIHR5cGUgaXMgYSB0eXBlIG9m IGRhdGEgdGhhdCBpbmRleCBpcyBidWlsdCBvbiwgc28gaXQncyAnb3BjaW50eXBlJy4KKyAqIFRo ZXJlIGlzIG5vIHN0cmF0ZWd5IG51bWJlciB0aGF0IHdlIGNhbiBhbHdheXMgdXNlLAorICogYmVj YXVzZSBldmVyeSBvcGNsYXNzIGRlZmluZXMgaXRzIG93biBzZXQgb2Ygb3BlcmF0b3JzIGl0IHN1 cHBvcnRzIGFuZCBzdHJhdGVneSBudW1iZXIKKyAqIGZvciB0aGUgc2FtZSBvcGVyYXRvciBjYW4g ZGlmZmVyIGZyb20gb3BjbGFzcyB0byBvcGNsYXNzLgorICogU28gdG8gZ2V0IHN0cmF0ZWd5IG51 bWJlciB3ZSBsb29rIHVwIGFuIG9wZXJhdG9yIHRoYXQgZ2l2ZXMgdXMgZGVzaXJlZCBiZWhhdmlv cgorICogYW5kIHdoaWNoIGJvdGggb3BlcmFuZCB0eXBlcyBhcmUgJ29wY2ludHlwZScgYW5kIHRo ZW4gcmV0cmlldmUgdGhlIHN0cmF0ZWd5IG51bWJlciBmb3IgaXQuCisgKiBNb3N0IG9mIHRoZSB0 aW1lIHdlIGNhbiB1c2UgJz0nLiBXZSBsZXQgdXNlciBkZWZpbmUgb3BlcmF0b3IgbmFtZSBpbiBj YXNlIG9wY2xhc3MgZG9lc24ndAorICogc3VwcG9ydCAnPScgb3BlcmF0b3IuIEFsc28sIGlmIHN1 Y2ggb3BlcmF0b3IgZG9lc24ndCBleGlzdCwgd2UgY2FuJ3QgcHJvY2VlZCB3aXRoIHRoZSBjaGVj ay4KKyAqCisgKiBHZW5lcmF0ZWQgb25jZSwgYW5kIHdpbGwgYmUgcmV1c2VkIGZvciBhbGwgaGVh cCB0dXBsZXMuCisgKiBBcmd1bWVudCBmaWVsZCB3aWxsIGJlIGZpbGxlZCBmb3IgZXZlcnkgaGVh cCB0dXBsZSBiZWZvcmUKKyAqIGNvbnNpc3RlbnQgZnVuY3Rpb24gaW52b2NhdGlvbiwgc28gbGVh dmUgaXQgTlVMTCBmb3IgYSB3aGlsZS4KKyAqCisgKi8KK3N0YXRpYyBTY2FuS2V5CitwcmVwYXJl X25vbm51bGxfc2Nhbl9rZXkoY29uc3QgQnJpbkNoZWNrU3RhdGUgKiBzdGF0ZSwgQXR0ck51bWJl ciBhdHRubykKK3sKKwlTY2FuS2V5CQlzY2FuS2V5OworCU9pZAkJCW9wT2lkOworCU9pZAkJCW9w RmFtaWx5T2lkOworCWJvb2wJCWRlZmluZWQ7CisJU3RyYXRlZ3lOdW1iZXIgc3RyYXRlZ3k7CisJ UmVnUHJvY2VkdXJlIG9wUmVnUHJvYzsKKwlMaXN0CSAgICpvcGVyTmFtZUxpc3Q7CisJaW50CQkJ YXR0aW5kZXggPSBhdHRubyAtIDE7CisJRm9ybV9wZ19hdHRyaWJ1dGUgYXR0ciA9IFR1cGxlRGVz Y0F0dHIoc3RhdGUtPmJkZXNjLT5iZF90dXBkZXNjLCBhdHRpbmRleCk7CisJT2lkCQkJdHlwZSA9 IHN0YXRlLT5pZHhyZWwtPnJkX29wY2ludHlwZVthdHRpbmRleF07CisJU3RyaW5nCSAgICpvcG5h bWUgPSBzdGF0ZS0+b3BlcmF0b3JOYW1lc1thdHRubyAtIDFdOworCisJb3BGYW1pbHlPaWQgPSBz dGF0ZS0+aWR4cmVsLT5yZF9vcGZhbWlseVthdHRpbmRleF07CisJb3Blck5hbWVMaXN0ID0gbGlz dF9tYWtlMShvcG5hbWUpOworCW9wT2lkID0gT3BlcmF0b3JMb29rdXAob3Blck5hbWVMaXN0LCB0 eXBlLCB0eXBlLCAmZGVmaW5lZCk7CisKKwlpZiAob3BPaWQgPT0gSW52YWxpZE9pZCkKKwl7CisJ CWVyZXBvcnQoRVJST1IsCisJCQkJKGVycmNvZGUoRVJSQ09ERV9VTkRFRklORURfRlVOQ1RJT04p LAorCQkJCSBlcnJtc2coIlRoZXJlIGlzIG5vIG9wZXJhdG9yICVzIGZvciB0eXBlICV1IiwKKwkJ CQkJCW9wbmFtZS0+c3ZhbCwgdHlwZSkpKTsKKwl9CisKKwlzdHJhdGVneSA9IGdldF9vcF9vcGZh bWlseV9zdHJhdGVneShvcE9pZCwgb3BGYW1pbHlPaWQpOworCisJaWYgKHN0cmF0ZWd5ID09IDAp CisJeworCQllcmVwb3J0KEVSUk9SLAorCQkJCShlcnJjb2RlKEVSUkNPREVfV1JPTkdfT0JKRUNU X1RZUEUpLAorCQkJCSBlcnJtc2coIm9wZXJhdG9yICVzIGlzIG5vdCBhIG1lbWJlciBvZiBvcGVy YXRvciBmYW1pbHkgXCIlc1wiIiwKKwkJCQkJCW9wbmFtZS0+c3ZhbCwKKwkJCQkJCWdldF9vcGZh bWlseV9uYW1lKG9wRmFtaWx5T2lkLCBmYWxzZSkpKSk7CisJfQorCisJb3BSZWdQcm9jID0gZ2V0 X29wY29kZShvcE9pZCk7CisJc2NhbktleSA9IHBhbGxvYzAoc2l6ZW9mKFNjYW5LZXlEYXRhKSk7 CisJU2NhbktleUVudHJ5SW5pdGlhbGl6ZSgKKwkJCQkJCSAgIHNjYW5LZXksCisJCQkJCQkgICAw LAorCQkJCQkJICAgYXR0bm8sCisJCQkJCQkgICBzdHJhdGVneSwKKwkJCQkJCSAgIHR5cGUsCisJ CQkJCQkgICBhdHRyLT5hdHRjb2xsYXRpb24sCisJCQkJCQkgICBvcFJlZ1Byb2MsCisJCQkJCQkg ICAoRGF0dW0pIE5VTEwKKwkJKTsKKwlwZnJlZShvcGVyTmFtZUxpc3QpOworCisJcmV0dXJuIHNj YW5LZXk7Cit9CisKK3N0YXRpYyBTY2FuS2V5CitwcmVwYXJlX2lzbnVsbF9zY2FuX2tleShBdHRy TnVtYmVyIGF0dG5vKQoreworCVNjYW5LZXkJCXNjYW5LZXk7CisKKwlzY2FuS2V5ID0gcGFsbG9j MChzaXplb2YoU2NhbktleURhdGEpKTsKKwlTY2FuS2V5RW50cnlJbml0aWFsaXplKHNjYW5LZXks CisJCQkJCQkgICBTS19JU05VTEwgfCBTS19TRUFSQ0hOVUxMLAorCQkJCQkJICAgYXR0bm8sCisJ CQkJCQkgICBJbnZhbGlkU3RyYXRlZ3ksCisJCQkJCQkgICBJbnZhbGlkT2lkLAorCQkJCQkJICAg SW52YWxpZE9pZCwKKwkJCQkJCSAgIEludmFsaWRPaWQsCisJCQkJCQkgICAoRGF0dW0pIDApOwor CXJldHVybiBzY2FuS2V5OworfQorCisvKgorICogV2Ugd2FsayBmcm9tIHRoZSBmaXJzdCByYW5n ZSAoYmxrbm8gPSAwKSB0byB0aGUgbGFzdCBhcyB0aGUgc2NhbiBwcm9jZWVkLgorICogRm9yIGV2 ZXJ5IGhlYXAgdHVwbGUgd2UgY2hlY2sgaWYgd2UgYXJlIGRvbmUgd2l0aCB0aGUgY3VycmVudCBy YW5nZSwgYW5kIHdlIG5lZWQgdG8gbW92ZSBmdXJ0aGVyCisgKiB0byB0aGUgY3VycmVudCBoZWFw IHR1cGxlJ3MgcmFuZ2UuIFdoaWxlIG1vdmluZyB0byB0aGUgbmV4dCByYW5nZSB3ZSBjaGVjayB0 aGF0IGl0J3Mgbm90IGVtcHR5IChiZWNhdXNlCisgKiB3ZSBoYXZlIGF0IGxlYXN0IG9uZSB0dXBs ZSBmb3IgdGhpcyByYW5nZSkuCisgKiBFdmVyeSBoZWFwIHR1cGxlIGFyZSBjaGVja2VkIHRvIGJl IGNvbnNpc3RlbnQgd2l0aCB0aGUgcmFuZ2UgaXQgYmVsb25ncyB0by4KKyAqIEluIGNhc2Ugb2Yg dW5zdW1tYXJpemVkIHJhbmdlcyBhbmQgcGxhY2Vob2xkZXJzIHdlIHNraXAgYWxsIGNoZWNrcy4K KyAqCisgKiBXaGlsZSBtb3ZpbmcsIHdlIG1heSBqdW1wIG92ZXIgc29tZSByYW5nZXMsCisgKiBi dXQgaXQncyBva2F5IGJlY2F1c2Ugd2Ugd291bGQgbm90IGJlIGFibGUgdG8gY2hlY2sgdGhlbSBh bnl3YXkuCisgKiBXZSBhbHNvIGNhbid0IHNheSB3aGV0aGVyIHNraXBwZWQgcmFuZ2VzIHNob3Vs ZCBiZSBtYXJrZWQgYXMgZW1wdHkgb3Igbm90LAorICogc2luY2UgaXQncyBwb3NzaWJsZSB0aGF0 IHRoZXJlIHdlcmUgc29tZSB0dXBsZXMgYmVmb3JlIHRoYXQgYXJlIG5vdyBkZWxldGVkLgorICoK KyAqLworc3RhdGljIHZvaWQKK2JyaW5fY2hlY2tfY2FsbGJhY2soUmVsYXRpb24gaW5kZXgsIEl0 ZW1Qb2ludGVyIHRpZCwgRGF0dW0gKnZhbHVlcywgYm9vbCAqaXNudWxsLCBib29sIHR1cGxlSXNB bGl2ZSwgdm9pZCAqYnJzdGF0ZSkKK3sKKwlCcmluQ2hlY2tTdGF0ZSAqc3RhdGU7CisJQmxvY2tO dW1iZXIgaGVhcGJsazsKKworCXN0YXRlID0gKEJyaW5DaGVja1N0YXRlICopIGJyc3RhdGU7CisJ aGVhcGJsayA9IEl0ZW1Qb2ludGVyR2V0QmxvY2tOdW1iZXIodGlkKTsKKworCS8qIElmIHdlIHdl bnQgYmV5b25kIHRoZSBjdXJyZW50IHJhbmdlIGxldCdzIGZldGNoIG5ldyByYW5nZSAqLworCWlm IChoZWFwYmxrID49IHN0YXRlLT5uZXh0cmFuZ2VCbGspCisJeworCQlCcmluVHVwbGUgICp0dXA7 CisJCUJyaW5UdXBsZSAgKnR1cGNvcHkgPSBOVUxMOworCQlNZW1vcnlDb250ZXh0IG9sZEN0eDsK KwkJT2Zmc2V0TnVtYmVyIG9mZjsKKwkJU2l6ZQkJc2l6ZTsKKwkJU2l6ZQkJYnR1cHN6ID0gMDsK KworCQlNZW1vcnlDb250ZXh0UmVzZXQoc3RhdGUtPnJhbmdlQ3R4KTsKKwkJb2xkQ3R4ID0gTWVt b3J5Q29udGV4dFN3aXRjaFRvKHN0YXRlLT5yYW5nZUN0eCk7CisKKwkJc3RhdGUtPnJhbmdlX2Nu dCsrOworCisJCS8qIE1vdmUgdG8gdGhlIHJhbmdlIHRoYXQgY29udGFpbnMgY3VycmVudCBoZWFw IHR1cGxlICovCisJCXR1cCA9IGJyaW5HZXRUdXBsZUZvckhlYXBCbG9jayhzdGF0ZS0+cmV2bWFw LCBoZWFwYmxrLCAmc3RhdGUtPmJ1ZiwKKwkJCQkJCQkJCSAgICZvZmYsICZzaXplLCBCVUZGRVJf TE9DS19TSEFSRSk7CisKKwkJaWYgKHR1cCkKKwkJeworCQkJdHVwY29weSA9IGJyaW5fY29weV90 dXBsZSh0dXAsIHNpemUsIHR1cGNvcHksICZidHVwc3opOworCQkJTG9ja0J1ZmZlcihzdGF0ZS0+ YnVmLCBCVUZGRVJfTE9DS19VTkxPQ0spOworCQkJc3RhdGUtPmR0dXAgPSBicmluX2RlZm9ybV90 dXBsZShzdGF0ZS0+YmRlc2MsIHR1cGNvcHksIHN0YXRlLT5kdHVwKTsKKworCQkJLyogV2UgY2Fu J3QgY2hlY2sgcGxhY2Vob2xkZXIgcmFuZ2VzICovCisJCQlzdGF0ZS0+Y2hlY2thYmxlX3Jhbmdl ID0gIXN0YXRlLT5kdHVwLT5idF9wbGFjZWhvbGRlcjsKKwkJfQorCQllbHNlCisJCXsKKwkJCS8q IFdlIGNhbid0IGNoZWNrIHVuc3VtbWFyaXplZCByYW5nZXMuICovCisJCQlzdGF0ZS0+Y2hlY2th YmxlX3JhbmdlID0gZmFsc2U7CisJCX0KKworCQkvKgorCQkgKiBVcGRhdGUgbmV4dHJhbmdlQmxr IHNvIHdlIGtub3cgd2hlbiB3ZSBhcmUgZG9uZSB3aXRoIHRoZSBjdXJyZW50CisJCSAqIHJhbmdl CisJCSAqLworCQlzdGF0ZS0+bmV4dHJhbmdlQmxrID0gKGhlYXBibGsgLyBzdGF0ZS0+cGFnZXNQ ZXJSYW5nZSArIDEpICogc3RhdGUtPnBhZ2VzUGVyUmFuZ2U7CisKKwkJTWVtb3J5Q29udGV4dFN3 aXRjaFRvKG9sZEN0eCk7CisKKwkJLyogUmFuZ2UgbXVzdCBub3QgYmUgZW1wdHkgKi8KKwkJaWYg KHN0YXRlLT5jaGVja2FibGVfcmFuZ2UgJiYgc3RhdGUtPmR0dXAtPmJ0X2VtcHR5X3JhbmdlKQor CQl7CisJCQlhbGxfY29uc2lzdF9lcmVwb3J0KHN0YXRlLCB0aWQsICJyYW5nZSBpcyBtYXJrZWQg YXMgZW1wdHkgYnV0IGNvbnRhaW5zIHF1YWxpZmllZCBsaXZlIHR1cGxlcyIpOworCQl9CisKKwl9 CisKKwkvKiBDaGVjayB0dXBsZSBpcyBjb25zaXN0ZW50IHdpdGggdGhlIGluZGV4ICovCisJaWYg KHN0YXRlLT5jaGVja2FibGVfcmFuZ2UpCisJeworCQljaGVja19oZWFwX3R1cGxlKHN0YXRlLCB2 YWx1ZXMsIGlzbnVsbCwgdGlkKTsKKwl9CisKK30KKworLyoKKyAqIFdlIGNoZWNrIGhhc251bGxz IGZsYWdzIGZvciBudWxsIHZhbHVlcyBhbmQgb2lfcmVndWxhcl9udWxscyA9IHRydWUsCisgKiBj aGVjayBhbGxudWxscyBpcyBmYWxzZSBmb3IgYWxsIG5vbm51bGwgdmFsdWVzIG5vdCBtYXR0ZXIg b2lfcmVndWxhcl9udWxscyBpcyBzZXQgb3Igbm90LAorICogRm9yIGFsbCBvdGhlciBjYXNlcyB3 ZSBjYWxsIGNvbnNpc3RlbnRGbiB3aXRoIGFwcHJvcHJpYXRlIHNjYW5LZXk6CisgKiAtIGZvciBv aV9yZWd1bGFyX251bGxzID0gZmFsc2UgYW5kIG51bGwgdmFsdWVzIHdlIHVzZSAnaXNOdWxsJyBz Y2FuS2V5LAorICogLSBmb3Igbm9ubnVsbCB2YWx1ZXMgd2UgdXNlICdub25udWxsJyBzY2FuS2V5 CisgKi8KK3N0YXRpYyB2b2lkCitjaGVja19oZWFwX3R1cGxlKEJyaW5DaGVja1N0YXRlICogc3Rh dGUsIGNvbnN0IERhdHVtICp2YWx1ZXMsIGNvbnN0IGJvb2wgKm51bGxzLCBJdGVtUG9pbnRlciB0 aWQpCit7CisJaW50CQkJYXR0aW5kZXg7CisJQnJpbk1lbVR1cGxlICpkdHVwID0gc3RhdGUtPmR0 dXA7CisJQnJpbkRlc2MgICAqYmRlc2MgPSBzdGF0ZS0+YmRlc2M7CisJTWVtb3J5Q29udGV4dCBv bGRDdHg7CisKKwlBc3NlcnQoc3RhdGUtPmNoZWNrYWJsZV9yYW5nZSk7CisKKwlNZW1vcnlDb250 ZXh0UmVzZXQoc3RhdGUtPmhlYXB0dXBsZUN0eCk7CisJb2xkQ3R4ID0gTWVtb3J5Q29udGV4dFN3 aXRjaFRvKHN0YXRlLT5oZWFwdHVwbGVDdHgpOworCisJLyogY2hlY2sgZXZlcnkgaW5kZXggYXR0 cmlidXRlICovCisJZm9yIChhdHRpbmRleCA9IDA7IGF0dGluZGV4IDwgc3RhdGUtPm5hdHRzOyBh dHRpbmRleCsrKQorCXsKKwkJQnJpblZhbHVlcyAqYnZhbDsKKwkJRGF0dW0JCWNvbnNpc3RlbnRG blJlc3VsdDsKKwkJYm9vbAkJY29uc2lzdGVudDsKKwkJU2NhbktleQkJc2NhbktleTsKKwkJYm9v bAkJb2lfcmVndWxhcl9udWxscyA9IGJkZXNjLT5iZF9pbmZvW2F0dGluZGV4XS0+b2lfcmVndWxh cl9udWxsczsKKworCQlidmFsID0gJmR0dXAtPmJ0X2NvbHVtbnNbYXR0aW5kZXhdOworCisJCWlm IChudWxsc1thdHRpbmRleF0pCisJCXsKKwkJCS8qCisJCQkgKiBVc2UgaGFzbnVsbHMgZmxhZyBm b3Igb2lfcmVndWxhcl9udWxscyBpcyB0cnVlLiBPdGhlcndpc2UsCisJCQkgKiBkZWxlZ2F0ZSBj aGVjayB0byBjb25zaXN0ZW50Rm4KKwkJCSAqLworCQkJaWYgKG9pX3JlZ3VsYXJfbnVsbHMpCisJ CQl7CisJCQkJLyogV2UgaGF2ZSBudWxsIHZhbHVlLCBzbyBoYXNudWxscyBvciBhbGxudWxscyBt dXN0IGJlIHRydWUgKi8KKwkJCQlpZiAoIShidmFsLT5idl9oYXNudWxscyB8fCBidmFsLT5idl9h bGxudWxscykpCisJCQkJeworCQkJCQlhbGxfY29uc2lzdF9lcmVwb3J0KHN0YXRlLCB0aWQsICJy YW5nZSBoYXNudWxscyBhbmQgYWxsbnVsbHMgYXJlIGZhbHNlLCBidXQgY29udGFpbnMgYSBudWxs IHZhbHVlIik7CisJCQkJfQorCQkJCWNvbnRpbnVlOworCQkJfQorCisJCQkvKgorCQkJICogSW4g Y2FzZSBvZiBudWxsIGFuZCBvaV9yZWd1bGFyX251bGxzID0gZmFsc2Ugd2UgdXNlIGlzTnVsbAor CQkJICogc2NhbktleSBmb3IgaW52b2NhdGlvbiBvZiBjb25zaXN0ZW50Rm4KKwkJCSAqLworCQkJ c2NhbktleSA9IHN0YXRlLT5pc251bGxfc2tbYXR0aW5kZXhdOworCQl9CisJCWVsc2UKKwkJewor CQkJLyogV2UgaGF2ZSBhIG5vbm51bGwgdmFsdWUsIHNvIGFsbG51bGxzIHNob3VsZCBiZSBmYWxz ZSAqLworCQkJaWYgKGJ2YWwtPmJ2X2FsbG51bGxzKQorCQkJeworCQkJCWFsbF9jb25zaXN0X2Vy ZXBvcnQoc3RhdGUsIHRpZCwgInJhbmdlIGFsbG51bGxzIGlzIHRydWUsIGJ1dCBjb250YWlucyBu b25udWxsIHZhbHVlIik7CisJCQl9CisKKwkJCS8qIHVzZSAiYXR0ciA9IHZhbHVlIiBzY2FuIGtl eSBmb3Igbm9ubnVsbCB2YWx1ZXMgKi8KKwkJCXNjYW5LZXkgPSBzdGF0ZS0+bm9ubnVsbF9za1th dHRpbmRleF07CisJCQlzY2FuS2V5LT5za19hcmd1bWVudCA9IHZhbHVlc1thdHRpbmRleF07CisJ CX0KKworCQkvKiBJZiBvaV9yZWd1bGFyX251bGxzID0gdHJ1ZSB3ZSBzaG91bGQgbmV2ZXIgZ2V0 IHRoZXJlIHdpdGggbnVsbCAqLworCQlBc3NlcnQoIW9pX3JlZ3VsYXJfbnVsbHMgfHwgIW51bGxz W2F0dGluZGV4XSk7CisKKwkJaWYgKHN0YXRlLT5jb25zaXN0ZW50Rm5bYXR0aW5kZXhdLmZuX25h cmdzID49IDQpCisJCXsKKwkJCWNvbnNpc3RlbnRGblJlc3VsdCA9IEZ1bmN0aW9uQ2FsbDRDb2xs KCZzdGF0ZS0+Y29uc2lzdGVudEZuW2F0dGluZGV4XSwKKwkJCQkJCQkJCQkJCSAgIHN0YXRlLT5p ZHhyZWwtPnJkX2luZGNvbGxhdGlvblthdHRpbmRleF0sCisJCQkJCQkJCQkJCQkgICBQb2ludGVy R2V0RGF0dW0oc3RhdGUtPmJkZXNjKSwKKwkJCQkJCQkJCQkJCSAgIFBvaW50ZXJHZXREYXR1bShi dmFsKSwKKwkJCQkJCQkJCQkJCSAgIFBvaW50ZXJHZXREYXR1bSgmc2NhbktleSksCisJCQkJCQkJ CQkJCQkgICBJbnQzMkdldERhdHVtKDEpCisJCQkJKTsKKwkJfQorCQllbHNlCisJCXsKKwkJCWNv bnNpc3RlbnRGblJlc3VsdCA9IEZ1bmN0aW9uQ2FsbDNDb2xsKCZzdGF0ZS0+Y29uc2lzdGVudEZu W2F0dGluZGV4XSwKKwkJCQkJCQkJCQkJCSAgIHN0YXRlLT5pZHhyZWwtPnJkX2luZGNvbGxhdGlv blthdHRpbmRleF0sCisJCQkJCQkJCQkJCQkgICBQb2ludGVyR2V0RGF0dW0oc3RhdGUtPmJkZXNj KSwKKwkJCQkJCQkJCQkJCSAgIFBvaW50ZXJHZXREYXR1bShidmFsKSwKKwkJCQkJCQkJCQkJCSAg IFBvaW50ZXJHZXREYXR1bShzY2FuS2V5KQorCQkJCSk7CisJCX0KKworCQljb25zaXN0ZW50ID0g RGF0dW1HZXRCb29sKGNvbnNpc3RlbnRGblJlc3VsdCk7CisKKwkJaWYgKCFjb25zaXN0ZW50KQor CQl7CisJCQlhbGxfY29uc2lzdF9lcmVwb3J0KHN0YXRlLCB0aWQsICJoZWFwIHR1cGxlIGluY29u c2lzdGVudCB3aXRoIGluZGV4Iik7CisJCX0KKworCX0KKworCU1lbW9yeUNvbnRleHRTd2l0Y2hU byhvbGRDdHgpOworfQogCiAvKiBSZXBvcnQgd2l0aG91dCBhbnkgYWRkaXRpb25hbCBpbmZvICov CiBzdGF0aWMgdm9pZApAQCAtODA1LDMgKzEyNzEsMTkgQEAgcmV2bWFwX2l0ZW1fZXJlcG9ydChC cmluQ2hlY2tTdGF0ZSAqIHN0YXRlLCBjb25zdCBjaGFyICpmbXQpCiAJCQkJCXN0YXRlLT5yZXZt YXBCbGssCiAJCQkJCXN0YXRlLT5yZXZtYXBpZHgpKSk7CiB9CisKKy8qIFJlcG9ydCB3aXRoIHJh bmdlIGJsa25vLCBoZWFwIHR1cGxlIGluZm8gKi8KK3N0YXRpYyB2b2lkCithbGxfY29uc2lzdF9l cmVwb3J0KGNvbnN0IEJyaW5DaGVja1N0YXRlICogc3RhdGUsIGNvbnN0IEl0ZW1Qb2ludGVyRGF0 YSAqdGlkLCBjb25zdCBjaGFyICptZXNzYWdlKQoreworCUFzc2VydChzdGF0ZS0+cmFuZ2VCbGtu byAhPSBJbnZhbGlkQmxvY2tOdW1iZXIpOworCisJZXJlcG9ydChFUlJPUiwKKwkJCShlcnJjb2Rl KEVSUkNPREVfREFUQV9DT1JSVVBURUQpLAorCQkJIGVycm1zZygiSW5kZXggJXMgaXMgY29ycnVw dGVkIC0gJXMuIFJhbmdlIGJsa25vOiAldSwgaGVhcCB0aWQgKCV1LCV1KSIsCisJCQkJCVJlbGF0 aW9uR2V0UmVsYXRpb25OYW1lKHN0YXRlLT5pZHhyZWwpLAorCQkJCQltZXNzYWdlLAorCQkJCQlz dGF0ZS0+ZHR1cC0+YnRfYmxrbm8sCisJCQkJCUl0ZW1Qb2ludGVyR2V0QmxvY2tOdW1iZXIodGlk KSwKKwkJCQkJSXRlbVBvaW50ZXJHZXRPZmZzZXROdW1iZXIodGlkKSkpKTsKK30KLS0gCjIuNDMu MAoK --000000000000fc23510637d47cf8--