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 1udX8o-008xyd-Eo for pgsql-hackers@arkaria.postgresql.org; Sun, 20 Jul 2025 16:43: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 1udX8l-00Biz8-U9 for pgsql-hackers@arkaria.postgresql.org; Sun, 20 Jul 2025 16:43:55 +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 <3danissimo@gmail.com>) id 1udX8l-00Biyz-4t for pgsql-hackers@lists.postgresql.org; Sun, 20 Jul 2025 16:43:55 +0000 Received: from mail-yb1-xb31.google.com ([2607:f8b0:4864:20::b31]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from <3danissimo@gmail.com>) id 1udX8h-008IeJ-2R for pgsql-hackers@lists.postgresql.org; Sun, 20 Jul 2025 16:43:53 +0000 Received: by mail-yb1-xb31.google.com with SMTP id 3f1490d57ef6-e8bd2eaf8ccso3403769276.2 for ; Sun, 20 Jul 2025 09:43:51 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1753029830; x=1753634630; 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=4trU+AjWlu6pnxwQr1qacsKjUpK6Pv3yH2VcyUDlZVQ=; b=IatmEoe6dwDzkkCa7lyRDB3iFbzCpdqYbvZgLEe54TiK3t1zYxBoBDu7HaSMt9RxF5 MhdDfVrqpRsFmhlLUW7/yxSaJk6E29nNypoHcUmyuS1vDCL52Ao3iLA51rmYI8+Mvawa 366EsWeU0ESht54Z6ssxIdjgwYRtp1iXbVd5kCVcXv24yWqsHsED8HNeN0LLozMHbBEo 65zv+sP3ecAFQas413QfPFaFQ6LOQUblTanPCJ62QK6YGNqTLcQty81ub7aNIj9B7fIh gfm77bQ4jiZXQAJmqxEdE1xDo2Zyl0O15fnRiN3H2okxnPmNyrhQx9cVAiwd/RwGhDgH hF8w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1753029830; x=1753634630; 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=4trU+AjWlu6pnxwQr1qacsKjUpK6Pv3yH2VcyUDlZVQ=; b=WDbk4BHpa8uDT4pAPneafvJsKB5sREJX3tEjKirlHe9IJZYeQPRb68PNXsdWTaze4Y c0m9CbH/ZrZVNQ4WIRF/AWd03q2pVQKpYZ4uPERr6xtUe3gJb4lz4kSP1/X49CuzfWhd fj9rd2ZHtPVforqt8GhUL2j4MBb3ED9pfMBkYMsGT4F0I+6oO0dyeqPN4h6eozmjOEDK ecgzXoNyobm/ExbnOjkoXZscGTczF0CZST6E0/5Gv6ENB/II6A3QXphlycNK4dhn5MAr oWKFCt7oRzhReD2qSjEtZdrqssWIeVJqAkaJIYbct4HgtnqMt51HMJGCTiBDsVgpvS/+ jAwA== X-Forwarded-Encrypted: i=1; AJvYcCUD4DYeC1ZPS9vMdWemkORnKisVzNxEihyj0Oqw5H2csYPPhsl/4y+L9BmPOPYc7l+fFzZU/Vt5coFL3m/R@lists.postgresql.org X-Gm-Message-State: AOJu0Yx9/bOwWYl+50AHspUYiBNrdz8ofAPe0oILS7DKmsvdHpD3/9sE /dzESIJCeoYzusYmooIAf9qk2LKBTX2UHpv+kjNcTFgczaw7mLYzlYX276uf7PacQaKvisAeHWJ fLoY6bO5HU30rNfz/lghER8Kv8QzlfGY= X-Gm-Gg: ASbGncsX63NnEvXySzGcJPjm5VmprxSfjXmZw4c69fonkS4keHX2DwPVHwYdYfgJEp3 GWCPrWqbAqlEj/RKbnBjVRONUsBKb+VT1/jJ6UKJtOkCA0WOmccr5yLvWhhVg9VkY+y6WHJzVZN Nx6gtSoKKuUaJaTQ53R1sPzCOf4KZ9PFlWMf5p0tmbgSkc6hEopkLdLByFTpdt/BaPrra6Srs03 qZ1JOZk X-Google-Smtp-Source: AGHT+IGKArXD6ms6D2O29v3CFbXG1CJf+KY9Db4Jm52P50xJv/yGpiyIbzssgcQbvLdSz/e9X/3Mtr4Fc9DnDT4kxp4= X-Received: by 2002:a05:690c:4803:b0:712:cc11:af8 with SMTP id 00721157ae682-718a9799e1dmr160371927b3.27.1753029830081; Sun, 20 Jul 2025 09:43:50 -0700 (PDT) MIME-Version: 1.0 References: In-Reply-To: From: Daniil Davydov <3danissimo@gmail.com> Date: Sun, 20 Jul 2025 23:43:38 +0700 X-Gm-Features: Ac12FXwmC7kyTzKB4vFOtkVwE4jEyopC3EARMdW6LyJ7F03hgq-8dbmerHDksDA Message-ID: Subject: Re: POC: Parallel processing of indexes in autovacuum To: Masahiko Sawada Cc: Matheus Alcantara , Sami Imseih , Maxim Orlov , Postgres hackers Content-Type: multipart/mixed; boundary="0000000000004dd102063a5f1086" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0000000000004dd102063a5f1086 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Hi, On Fri, Jul 18, 2025 at 2:43=E2=80=AFAM Masahiko Sawada wrote: > > On Mon, Jul 14, 2025 at 3:49=E2=80=AFAM Daniil Davydov <3danissimo@gmail.= com> wrote: > > > > This log level is used only "for messages about parallel workers launch= ed". > > I think that such logs relate more to the parallel workers module than > > autovacuum itself. Moreover, if we emit log "planned vs. launched" each > > time, it will simplify the task of selecting the optimal value of > > 'autovacuum_max_parallel_workers' parameter. What do you think? > > INFO level is normally not sent to the server log. And regarding > autovacuums, they don't write any log mentioning it started. If we > want to write planned vs. launched I think it's better to gather these > statistics during execution and write it together with other existing > logs. > > > > > About "%svacuum" - I guess we need to clarify what exactly the workers > > were launched for. I'll add errhint to this log, but I don't know wheth= er such > > approach is acceptable. > > I'm not sure errhint is an appropriate place. If we write such > information together with other existing autovacuum logs as I > suggested above, I think we don't need to add such information to this > log message. > I thought about it for some time and came up with this idea : 1) When gathering such statistics, we need to take into account that users might not want autovacuum to log something. Thus, we should collect statist= ics in "higher" level that knows about log_min_duration. 2) By analogy with the rest of the statistics, we can only accumulate a total number of planned and launched parallel workers. Alternatively, we could build an = array (one element for each index scan) of "planned vs. launched". But it will ma= ke the code "dirty", and I don't sure that this will be useful. This may be a discussion point, so I will separate it to another .patch fil= e. > I've reviewed v7 patch and here are some comments: > > + { > + { > + "parallel_autovacuum_workers", > + "Maximum number of parallel autovacuum workers that can be > taken from bgworkers pool for processing this table. " > + "If value is 0 then parallel degree will computed based on > number of indexes.", > + RELOPT_KIND_HEAP, > + ShareUpdateExclusiveLock > + }, > + -1, -1, 1024 > + }, > > Many autovacuum related reloptions have the prefix "autovacuum". So > how about renaming it to autovacuum_parallel_worker (change > check_parallel_av_gucs() name too accordingly)? > I have no objections. > --- > +bool > +check_autovacuum_max_parallel_workers(int *newval, void **extra, > + GucSource source) > +{ > + if (*newval >=3D max_worker_processes) > + return false; > + return true; > +} > > I think we don't need to strictly check the > autovacuum_max_parallel_workers value. Instead, we can accept any > integer value but internally cap by max_worker_processes. > I don't think that such a limitation is excessive, but I don't see similar behavior in other "max_parallel_..." GUCs, so I think we can get rid of it. I'll replace the "check hook" with an "assign hook", where autovacuum_max_parallel_workers will be limited. > --- > +/* > + * Make sure that number of available parallel workers corresponds to th= e > + * autovacuum_max_parallel_workers parameter (after it was changed). > + */ > +static void > +check_parallel_av_gucs(int prev_max_parallel_workers) > +{ > > I think this function doesn't just check the value but does adjust the > number of available workers, so how about > adjust_free_parallel_workers() or something along these lines? I agree, it's better this way. > > --- > + /* > + * Number of available workers must not exceed limit. > + * > + * Note, that if some parallel autovacuum workers are running at = this > + * moment, available workers number will not exceed limit after > + * releasing them (see ParallelAutoVacuumReleaseWorkers). > + */ > + AutoVacuumShmem->av_freeParallelWorkers =3D > + autovacuum_max_parallel_workers; > > I think the comment refers to the following code in > AutoVacuumReleaseParallelWorkers(): > > + /* > + * If autovacuum_max_parallel_workers variable was reduced during par= allel > + * autovacuum execution, we must cap available workers number by its = new > + * value. > + */ > + if (AutoVacuumShmem->av_freeParallelWorkers > > + autovacuum_max_parallel_workers) > + { > + AutoVacuumShmem->av_freeParallelWorkers =3D > + autovacuum_max_parallel_workers; > + } > > After the autovacuum launchers decreases av_freeParallelWorkers, it's > not guaranteed that the autovacuum worker already reflects the new > value from the config file when executing the > AutoVacuumReleaseParallelWorkers(), which leds to skips the above > codes. For example, suppose that autovacuum_max_parallel_workers is 10 > and 3 parallel workers are running by one autovacuum worker (i.e., > av_freeParallelWorkers =3D 7 now), if the user changes > autovacuum_max_parallel_workers to 5, the autovacuum launchers adjust > av_freeParallelWorkers to 5. However, if the worker doesn't reload the > config file and executes AutoVacuumReleaseParallelWorkers(), it > increases av_freeParallelWorkers to 8 and skips the adjusting logic. > I've not tested this scenarios so I might be missing something though. > Yes, this is a possible scenario. I'll rework av_freeParallelWorkers calculation. Main change is that a/v worker now checks whether config reload is pending. Thus, it will have the relevant value of the autovacuum_max_parallel_workers parameter. Thank you very much for your comments! Please, see v8 patches: 1) Rename table option. 2) Replace check_hook with assign_hook for autovacuum_max_parallel_workers. 3) Simplify and correct logic for handling autovacuum_max_parallel_workers parameter change. 4) Rework logic with "planned vs. launched" statistics for autovacuum (see second patch file). 5) Get rid of "sandbox" - I don't see the point in continuing to drag him a= long. -- Best regards, Daniil Davydov --0000000000004dd102063a5f1086 Content-Type: text/x-patch; charset="US-ASCII"; name="v8-0002-Logging-for-parallel-autovacuum.patch" Content-Disposition: attachment; filename="v8-0002-Logging-for-parallel-autovacuum.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mdbwlglh1 RnJvbSAyN2IyYzdkMGRmYjE5M2FhZGQ5ZDAxOTk2NDdlNTkwOWRlM2FjMGFhIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBEYW5paWwgRGF2aWRvdiA8ZC5kYXZ5ZG92QHBvc3RncmVzcHJv LnJ1PgpEYXRlOiBTdW4sIDIwIEp1bCAyMDI1IDIzOjI2OjEzICswNzAwClN1YmplY3Q6IFtQQVRD SCB2OCAyLzJdIExvZ2dpbmcgZm9yIHBhcmFsbGVsIGF1dG92YWN1dW0KCi0tLQogc3JjL2JhY2tl bmQvYWNjZXNzL2hlYXAvdmFjdXVtbGF6eS5jICB8IDI2ICsrKysrKysrKysrKysrKysrKysrKysr Ky0tCiBzcmMvYmFja2VuZC9jb21tYW5kcy92YWN1dW1wYXJhbGxlbC5jIHwgMjAgKysrKysrKysr KysrKystLS0tLS0KIHNyYy9pbmNsdWRlL2NvbW1hbmRzL3ZhY3V1bS5oICAgICAgICAgfCAxNiAr KysrKysrKysrKysrKy0tCiAzIGZpbGVzIGNoYW5nZWQsIDUyIGluc2VydGlvbnMoKyksIDEwIGRl bGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL3ZhY3V1bWxh enkuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL3ZhY3V1bWxhenkuYwppbmRleCAxNDAzNmMy N2U4Ny4uMTFkYzJjNDhhN2UgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL3Zh Y3V1bWxhenkuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC92YWN1dW1sYXp5LmMKQEAg LTM0OCw2ICszNDgsMTEgQEAgdHlwZWRlZiBzdHJ1Y3QgTFZSZWxTdGF0ZQogCiAJLyogSW5zdHJ1 bWVudGF0aW9uIGNvdW50ZXJzICovCiAJaW50CQkJbnVtX2luZGV4X3NjYW5zOworCS8qCisJICog TnVtYmVyIG9mIHBsYW5uZWQgYW5kIGFjdHVhbGx5IGxhdW5jaGVkIHBhcmFsbGVsIHdvcmtlcnMg Zm9yIGFsbCBpbmRleAorCSAqIHNjYW5zLCBvciBOVUxMCisJICovCisJUFZXb3JrZXJzVXNhZ2Ug KndvcmtlcnNfdXNhZ2U7CiAJLyogQ291bnRlcnMgdGhhdCBmb2xsb3cgYXJlIG9ubHkgZm9yIHNj YW5uZWRfcGFnZXMgKi8KIAlpbnQ2NAkJdHVwbGVzX2RlbGV0ZWQ7IC8qICMgZGVsZXRlZCBmcm9t IHRhYmxlICovCiAJaW50NjQJCXR1cGxlc19mcm96ZW47CS8qICMgbmV3bHkgZnJvemVuICovCkBA IC02ODgsNiArNjkzLDE2IEBAIGhlYXBfdmFjdXVtX3JlbChSZWxhdGlvbiByZWwsIGNvbnN0IFZh Y3V1bVBhcmFtcyBwYXJhbXMsCiAJCWluZG5hbWVzID0gcGFsbG9jKHNpemVvZihjaGFyICopICog dmFjcmVsLT5uaW5kZXhlcyk7CiAJCWZvciAoaW50IGkgPSAwOyBpIDwgdmFjcmVsLT5uaW5kZXhl czsgaSsrKQogCQkJaW5kbmFtZXNbaV0gPSBwc3RyZHVwKFJlbGF0aW9uR2V0UmVsYXRpb25OYW1l KHZhY3JlbC0+aW5kcmVsc1tpXSkpOworCisJCS8qCisJCSAqIEFsbG9jYXRlIHNwYWNlIGZvciB3 b3JrZXJzIHVzYWdlIHN0YXRpc3RpY3MuIFRodXMsIHdlIGV4cGxpY2l0bHkKKwkJICogbWFrZSBj bGVhciB0aGF0IHN1Y2ggc3RhdGlzdGljcyBtdXN0IGJlIGFjY3VtdWxhdGVkLgorCQkgKiBGb3Ig bm93LCB0aGlzIGlzIHVzZWQgb25seSBieSBhdXRvdmFjdXVtIGxlYWRlciB3b3JrZXIsIGJlY2F1 c2UgaXQKKwkJICogbXVzdCBsb2cgaXQgaW4gdGhlIGVuZCBvZiB0YWJsZSBwcm9jZXNzaW5nLgor CQkgKi8KKwkJdmFjcmVsLT53b3JrZXJzX3VzYWdlID0gQW1BdXRvVmFjdXVtV29ya2VyUHJvY2Vz cygpID8KKwkJCShQVldvcmtlcnNVc2FnZSAqKSBwYWxsb2MwKHNpemVvZihQVldvcmtlcnNVc2Fn ZSkpIDoKKwkJCU5VTEw7CiAJfQogCiAJLyoKQEAgLTEwMTIsNiArMTAyNywxMSBAQCBoZWFwX3Zh Y3V1bV9yZWwoUmVsYXRpb24gcmVsLCBjb25zdCBWYWN1dW1QYXJhbXMgcGFyYW1zLAogCQkJCQkJ CSB2YWNyZWwtPnJlbG5hbWVzcGFjZSwKIAkJCQkJCQkgdmFjcmVsLT5yZWxuYW1lLAogCQkJCQkJ CSB2YWNyZWwtPm51bV9pbmRleF9zY2Fucyk7CisJCQlpZiAodmFjcmVsLT53b3JrZXJzX3VzYWdl KQorCQkJCWFwcGVuZFN0cmluZ0luZm8oJmJ1ZiwKKwkJCQkJCQkJIF8oIndvcmtlcnMgdXNhZ2Ug c3RhdGlzdGljcyBmb3IgYWxsIG9mIGluZGV4IHNjYW5zIDogbGF1bmNoZWQgaW4gdG90YWwgPSAl ZCwgcGxhbm5lZCBpbiB0b3RhbCA9ICVkXG4iKSwKKwkJCQkJCQkJIHZhY3JlbC0+d29ya2Vyc191 c2FnZS0+bmxhdW5jaGVkLAorCQkJCQkJCQkgdmFjcmVsLT53b3JrZXJzX3VzYWdlLT5ucGxhbm5l ZCk7CiAJCQlhcHBlbmRTdHJpbmdJbmZvKCZidWYsIF8oInBhZ2VzOiAldSByZW1vdmVkLCAldSBy ZW1haW4sICV1IHNjYW5uZWQgKCUuMmYlJSBvZiB0b3RhbCksICV1IGVhZ2VybHkgc2Nhbm5lZFxu IiksCiAJCQkJCQkJIHZhY3JlbC0+cmVtb3ZlZF9wYWdlcywKIAkJCQkJCQkgbmV3X3JlbF9wYWdl cywKQEAgLTI2MzQsNyArMjY1NCw4IEBAIGxhenlfdmFjdXVtX2FsbF9pbmRleGVzKExWUmVsU3Rh dGUgKnZhY3JlbCkKIAl7CiAJCS8qIE91dHNvdXJjZSBldmVyeXRoaW5nIHRvIHBhcmFsbGVsIHZh cmlhbnQgKi8KIAkJcGFyYWxsZWxfdmFjdXVtX2J1bGtkZWxfYWxsX2luZGV4ZXModmFjcmVsLT5w dnMsIG9sZF9saXZlX3R1cGxlcywKLQkJCQkJCQkJCQkJdmFjcmVsLT5udW1faW5kZXhfc2NhbnMp OworCQkJCQkJCQkJCQl2YWNyZWwtPm51bV9pbmRleF9zY2FucywKKwkJCQkJCQkJCQkJdmFjcmVs LT53b3JrZXJzX3VzYWdlKTsKIAogCQkvKgogCQkgKiBEbyBhIHBvc3RjaGVjayB0byBjb25zaWRl ciBhcHBseWluZyB3cmFwYXJvdW5kIGZhaWxzYWZlIG5vdy4gIE5vdGUKQEAgLTMwNDcsNyArMzA2 OCw4IEBAIGxhenlfY2xlYW51cF9hbGxfaW5kZXhlcyhMVlJlbFN0YXRlICp2YWNyZWwpCiAJCS8q IE91dHNvdXJjZSBldmVyeXRoaW5nIHRvIHBhcmFsbGVsIHZhcmlhbnQgKi8KIAkJcGFyYWxsZWxf dmFjdXVtX2NsZWFudXBfYWxsX2luZGV4ZXModmFjcmVsLT5wdnMsIHJlbHR1cGxlcywKIAkJCQkJ CQkJCQkJdmFjcmVsLT5udW1faW5kZXhfc2NhbnMsCi0JCQkJCQkJCQkJCWVzdGltYXRlZF9jb3Vu dCk7CisJCQkJCQkJCQkJCWVzdGltYXRlZF9jb3VudCwKKwkJCQkJCQkJCQkJdmFjcmVsLT53b3Jr ZXJzX3VzYWdlKTsKIAl9CiAKIAkvKiBSZXNldCB0aGUgcHJvZ3Jlc3MgY291bnRlcnMgKi8KZGlm ZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3ZhY3V1bXBhcmFsbGVsLmMgYi9zcmMvYmFj a2VuZC9jb21tYW5kcy92YWN1dW1wYXJhbGxlbC5jCmluZGV4IDM4Y2Q2ZjY4MTA1Li44MzFjYzY0 YjUyOSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvdmFjdXVtcGFyYWxsZWwuYwor KysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy92YWN1dW1wYXJhbGxlbC5jCkBAIC0yMjcsNyArMjI3 LDcgQEAgc3RydWN0IFBhcmFsbGVsVmFjdXVtU3RhdGUKIHN0YXRpYyBpbnQJcGFyYWxsZWxfdmFj dXVtX2NvbXB1dGVfd29ya2VycyhSZWxhdGlvbiAqaW5kcmVscywgaW50IG5pbmRleGVzLCBpbnQg bnJlcXVlc3RlZCwKIAkJCQkJCQkJCQkJYm9vbCAqd2lsbF9wYXJhbGxlbF92YWN1dW0pOwogc3Rh dGljIHZvaWQgcGFyYWxsZWxfdmFjdXVtX3Byb2Nlc3NfYWxsX2luZGV4ZXMoUGFyYWxsZWxWYWN1 dW1TdGF0ZSAqcHZzLCBpbnQgbnVtX2luZGV4X3NjYW5zLAotCQkJCQkJCQkJCQkJYm9vbCB2YWN1 dW0pOworCQkJCQkJCQkJCQkJYm9vbCB2YWN1dW0sIFBWV29ya2Vyc1VzYWdlICp3dXNhZ2UpOwog c3RhdGljIHZvaWQgcGFyYWxsZWxfdmFjdXVtX3Byb2Nlc3Nfc2FmZV9pbmRleGVzKFBhcmFsbGVs VmFjdXVtU3RhdGUgKnB2cyk7CiBzdGF0aWMgdm9pZCBwYXJhbGxlbF92YWN1dW1fcHJvY2Vzc191 bnNhZmVfaW5kZXhlcyhQYXJhbGxlbFZhY3V1bVN0YXRlICpwdnMpOwogc3RhdGljIHZvaWQgcGFy YWxsZWxfdmFjdXVtX3Byb2Nlc3Nfb25lX2luZGV4KFBhcmFsbGVsVmFjdXVtU3RhdGUgKnB2cywg UmVsYXRpb24gaW5kcmVsLApAQCAtNTEwLDcgKzUxMCw3IEBAIHBhcmFsbGVsX3ZhY3V1bV9yZXNl dF9kZWFkX2l0ZW1zKFBhcmFsbGVsVmFjdXVtU3RhdGUgKnB2cykKICAqLwogdm9pZAogcGFyYWxs ZWxfdmFjdXVtX2J1bGtkZWxfYWxsX2luZGV4ZXMoUGFyYWxsZWxWYWN1dW1TdGF0ZSAqcHZzLCBs b25nIG51bV90YWJsZV90dXBsZXMsCi0JCQkJCQkJCQlpbnQgbnVtX2luZGV4X3NjYW5zKQorCQkJ CQkJCQkJaW50IG51bV9pbmRleF9zY2FucywgUFZXb3JrZXJzVXNhZ2UgKnd1c2FnZSkKIHsKIAlB c3NlcnQoIUlzUGFyYWxsZWxXb3JrZXIoKSk7CiAKQEAgLTUyMSw3ICs1MjEsNyBAQCBwYXJhbGxl bF92YWN1dW1fYnVsa2RlbF9hbGxfaW5kZXhlcyhQYXJhbGxlbFZhY3V1bVN0YXRlICpwdnMsIGxv bmcgbnVtX3RhYmxlX3R1cAogCXB2cy0+c2hhcmVkLT5yZWx0dXBsZXMgPSBudW1fdGFibGVfdHVw bGVzOwogCXB2cy0+c2hhcmVkLT5lc3RpbWF0ZWRfY291bnQgPSB0cnVlOwogCi0JcGFyYWxsZWxf dmFjdXVtX3Byb2Nlc3NfYWxsX2luZGV4ZXMocHZzLCBudW1faW5kZXhfc2NhbnMsIHRydWUpOwor CXBhcmFsbGVsX3ZhY3V1bV9wcm9jZXNzX2FsbF9pbmRleGVzKHB2cywgbnVtX2luZGV4X3NjYW5z LCB0cnVlLCB3dXNhZ2UpOwogfQogCiAvKgpAQCAtNTI5LDcgKzUyOSw4IEBAIHBhcmFsbGVsX3Zh Y3V1bV9idWxrZGVsX2FsbF9pbmRleGVzKFBhcmFsbGVsVmFjdXVtU3RhdGUgKnB2cywgbG9uZyBu dW1fdGFibGVfdHVwCiAgKi8KIHZvaWQKIHBhcmFsbGVsX3ZhY3V1bV9jbGVhbnVwX2FsbF9pbmRl eGVzKFBhcmFsbGVsVmFjdXVtU3RhdGUgKnB2cywgbG9uZyBudW1fdGFibGVfdHVwbGVzLAotCQkJ CQkJCQkJaW50IG51bV9pbmRleF9zY2FucywgYm9vbCBlc3RpbWF0ZWRfY291bnQpCisJCQkJCQkJ CQlpbnQgbnVtX2luZGV4X3NjYW5zLCBib29sIGVzdGltYXRlZF9jb3VudCwKKwkJCQkJCQkJCVBW V29ya2Vyc1VzYWdlICp3dXNhZ2UpCiB7CiAJQXNzZXJ0KCFJc1BhcmFsbGVsV29ya2VyKCkpOwog CkBAIC01NDEsNyArNTQyLDcgQEAgcGFyYWxsZWxfdmFjdXVtX2NsZWFudXBfYWxsX2luZGV4ZXMo UGFyYWxsZWxWYWN1dW1TdGF0ZSAqcHZzLCBsb25nIG51bV90YWJsZV90dXAKIAlwdnMtPnNoYXJl ZC0+cmVsdHVwbGVzID0gbnVtX3RhYmxlX3R1cGxlczsKIAlwdnMtPnNoYXJlZC0+ZXN0aW1hdGVk X2NvdW50ID0gZXN0aW1hdGVkX2NvdW50OwogCi0JcGFyYWxsZWxfdmFjdXVtX3Byb2Nlc3NfYWxs X2luZGV4ZXMocHZzLCBudW1faW5kZXhfc2NhbnMsIGZhbHNlKTsKKwlwYXJhbGxlbF92YWN1dW1f cHJvY2Vzc19hbGxfaW5kZXhlcyhwdnMsIG51bV9pbmRleF9zY2FucywgZmFsc2UsIHd1c2FnZSk7 CiB9CiAKIC8qCkBAIC02MjYsNyArNjI3LDcgQEAgcGFyYWxsZWxfdmFjdXVtX2NvbXB1dGVfd29y a2VycyhSZWxhdGlvbiAqaW5kcmVscywgaW50IG5pbmRleGVzLCBpbnQgbnJlcXVlc3RlZCwKICAq Lwogc3RhdGljIHZvaWQKIHBhcmFsbGVsX3ZhY3V1bV9wcm9jZXNzX2FsbF9pbmRleGVzKFBhcmFs bGVsVmFjdXVtU3RhdGUgKnB2cywgaW50IG51bV9pbmRleF9zY2FucywKLQkJCQkJCQkJCWJvb2wg dmFjdXVtKQorCQkJCQkJCQkJYm9vbCB2YWN1dW0sIFBWV29ya2Vyc1VzYWdlICp3dXNhZ2UpCiB7 CiAJaW50CQkJbndvcmtlcnM7CiAJUFZJbmRWYWNTdGF0dXMgbmV3X3N0YXR1czsKQEAgLTc1MCw2 ICs3NTEsMTMgQEAgcGFyYWxsZWxfdmFjdXVtX3Byb2Nlc3NfYWxsX2luZGV4ZXMoUGFyYWxsZWxW YWN1dW1TdGF0ZSAqcHZzLCBpbnQgbnVtX2luZGV4X3NjYW4KIAkJCQkJCQkJCSAibGF1bmNoZWQg JWQgcGFyYWxsZWwgdmFjdXVtIHdvcmtlcnMgZm9yIGluZGV4IGNsZWFudXAgKHBsYW5uZWQ6ICVk KSIsCiAJCQkJCQkJCQkgcHZzLT5wY3h0LT5ud29ya2Vyc19sYXVuY2hlZCksCiAJCQkJCQkJcHZz LT5wY3h0LT5ud29ya2Vyc19sYXVuY2hlZCwgbndvcmtlcnMpKSk7CisKKwkJLyogUmVtZW1iZXIg dGhlc2UgdmFsdWVzLCBpZiB3ZSBhc2tlZCB0by4gKi8KKwkJaWYgKHd1c2FnZSAhPSBOVUxMKQor CQl7CisJCQl3dXNhZ2UtPm5sYXVuY2hlZCArPSBwdnMtPnBjeHQtPm53b3JrZXJzX2xhdW5jaGVk OworCQkJd3VzYWdlLT5ucGxhbm5lZCArPSBud29ya2VyczsKKwkJfQogCX0KIAogCS8qIFZhY3V1 bSB0aGUgaW5kZXhlcyB0aGF0IGNhbiBiZSBwcm9jZXNzZWQgYnkgb25seSBsZWFkZXIgcHJvY2Vz cyAqLwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvY29tbWFuZHMvdmFjdXVtLmggYi9zcmMvaW5j bHVkZS9jb21tYW5kcy92YWN1dW0uaAppbmRleCAxNGVlY2NiZDcxOC4uNjRiMjM2ODc1MDYgMTAw NjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2NvbW1hbmRzL3ZhY3V1bS5oCisrKyBiL3NyYy9pbmNsdWRl L2NvbW1hbmRzL3ZhY3V1bS5oCkBAIC0yOTUsNiArMjk1LDE2IEBAIHR5cGVkZWYgc3RydWN0IFZh Y0RlYWRJdGVtc0luZm8KIAlpbnQ2NAkJbnVtX2l0ZW1zOwkJLyogY3VycmVudCAjIG9mIGVudHJp ZXMgKi8KIH0gVmFjRGVhZEl0ZW1zSW5mbzsKIAorLyoKKyAqIFBWV29ya2Vyc1VzYWdlIHN0b3Jl cyBpbmZvcm1hdGlvbiBhYm91dCB0b3RhbCBudW1iZXIgb2YgbGF1bmNoZWQgYW5kIHBsYW5uZWQK KyAqIHdvcmtlcnMgZHVyaW5nIHBhcmFsbGVsIHZhY3V1bS4KKyAqLwordHlwZWRlZiBzdHJ1Y3Qg UFZXb3JrZXJzVXNhZ2UKK3sKKwlpbnQJCW5sYXVuY2hlZDsKKwlpbnQJCW5wbGFubmVkOworfQkJ UFZXb3JrZXJzVXNhZ2U7CisKIC8qIEdVQyBwYXJhbWV0ZXJzICovCiBleHRlcm4gUEdETExJTVBP UlQgaW50IGRlZmF1bHRfc3RhdGlzdGljc190YXJnZXQ7CS8qIFBHRExMSU1QT1JUIGZvciBQb3N0 R0lTICovCiBleHRlcm4gUEdETExJTVBPUlQgaW50IHZhY3V1bV9mcmVlemVfbWluX2FnZTsKQEAg LTM4OSwxMSArMzk5LDEzIEBAIGV4dGVybiBUaWRTdG9yZSAqcGFyYWxsZWxfdmFjdXVtX2dldF9k ZWFkX2l0ZW1zKFBhcmFsbGVsVmFjdXVtU3RhdGUgKnB2cywKIGV4dGVybiB2b2lkIHBhcmFsbGVs X3ZhY3V1bV9yZXNldF9kZWFkX2l0ZW1zKFBhcmFsbGVsVmFjdXVtU3RhdGUgKnB2cyk7CiBleHRl cm4gdm9pZCBwYXJhbGxlbF92YWN1dW1fYnVsa2RlbF9hbGxfaW5kZXhlcyhQYXJhbGxlbFZhY3V1 bVN0YXRlICpwdnMsCiAJCQkJCQkJCQkJCQlsb25nIG51bV90YWJsZV90dXBsZXMsCi0JCQkJCQkJ CQkJCQlpbnQgbnVtX2luZGV4X3NjYW5zKTsKKwkJCQkJCQkJCQkJCWludCBudW1faW5kZXhfc2Nh bnMsCisJCQkJCQkJCQkJCQlQVldvcmtlcnNVc2FnZSAqd3VzYWdlKTsKIGV4dGVybiB2b2lkIHBh cmFsbGVsX3ZhY3V1bV9jbGVhbnVwX2FsbF9pbmRleGVzKFBhcmFsbGVsVmFjdXVtU3RhdGUgKnB2 cywKIAkJCQkJCQkJCQkJCWxvbmcgbnVtX3RhYmxlX3R1cGxlcywKIAkJCQkJCQkJCQkJCWludCBu dW1faW5kZXhfc2NhbnMsCi0JCQkJCQkJCQkJCQlib29sIGVzdGltYXRlZF9jb3VudCk7CisJCQkJ CQkJCQkJCQlib29sIGVzdGltYXRlZF9jb3VudCwKKwkJCQkJCQkJCQkJCVBWV29ya2Vyc1VzYWdl ICp3dXNhZ2UpOwogZXh0ZXJuIHZvaWQgcGFyYWxsZWxfdmFjdXVtX21haW4oZHNtX3NlZ21lbnQg KnNlZywgc2htX3RvYyAqdG9jKTsKIAogLyogaW4gY29tbWFuZHMvYW5hbHl6ZS5jICovCi0tIAoy LjQzLjAKCg== --0000000000004dd102063a5f1086 Content-Type: text/x-patch; charset="US-ASCII"; name="v8-0001-Parallel-index-autovacuum.patch" Content-Disposition: attachment; filename="v8-0001-Parallel-index-autovacuum.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mdbwlgk60 RnJvbSA3NDMyOWRmYmFlYmZmMTg3OGM0NDNkNzBiNDVhYTFiNWY3ZjJlZjc0IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBEYW5paWwgRGF2aWRvdiA8ZC5kYXZ5ZG92QHBvc3RncmVzcHJv LnJ1PgpEYXRlOiBTdW4sIDIwIEp1bCAyMDI1IDIzOjAzOjU3ICswNzAwClN1YmplY3Q6IFtQQVRD SCB2OCAxLzJdIFBhcmFsbGVsIGluZGV4IGF1dG92YWN1dW0KCi0tLQogc3JjL2JhY2tlbmQvYWNj ZXNzL2NvbW1vbi9yZWxvcHRpb25zLmMgICAgICAgIHwgIDEyICsrCiBzcmMvYmFja2VuZC9jb21t YW5kcy92YWN1dW1wYXJhbGxlbC5jICAgICAgICAgfCAgNDYgKysrKysrLQogc3JjL2JhY2tlbmQv cG9zdG1hc3Rlci9hdXRvdmFjdXVtLmMgICAgICAgICAgIHwgMTIwICsrKysrKysrKysrKysrKysr LQogc3JjL2JhY2tlbmQvdXRpbHMvaW5pdC9nbG9iYWxzLmMgICAgICAgICAgICAgIHwgICAxICsK IHNyYy9iYWNrZW5kL3V0aWxzL21pc2MvZ3VjX3RhYmxlcy5jICAgICAgICAgICB8ICAxMCArKwog c3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9wb3N0Z3Jlc3FsLmNvbmYuc2FtcGxlIHwgICAxICsKIHNy Yy9pbmNsdWRlL21pc2NhZG1pbi5oICAgICAgICAgICAgICAgICAgICAgICB8ICAgMSArCiBzcmMv aW5jbHVkZS9wb3N0bWFzdGVyL2F1dG92YWN1dW0uaCAgICAgICAgICAgfCAgIDQgKwogc3JjL2lu Y2x1ZGUvdXRpbHMvZ3VjX2hvb2tzLmggICAgICAgICAgICAgICAgIHwgICAxICsKIHNyYy9pbmNs dWRlL3V0aWxzL3JlbC5oICAgICAgICAgICAgICAgICAgICAgICB8ICAgMiArCiAxMCBmaWxlcyBj aGFuZ2VkLCAxOTAgaW5zZXJ0aW9ucygrKSwgOCBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC9hY2Nlc3MvY29tbW9uL3JlbG9wdGlvbnMuYyBiL3NyYy9iYWNrZW5kL2FjY2Vz cy9jb21tb24vcmVsb3B0aW9ucy5jCmluZGV4IDUwNzQ3YzE2Mzk2Li41NGFiZTdmMjFmNSAxMDA2 NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL2NvbW1vbi9yZWxvcHRpb25zLmMKKysrIGIvc3Jj L2JhY2tlbmQvYWNjZXNzL2NvbW1vbi9yZWxvcHRpb25zLmMKQEAgLTIyMiw2ICsyMjIsMTYgQEAg c3RhdGljIHJlbG9wdF9pbnQgaW50UmVsT3B0c1tdID0KIAkJfSwKIAkJU1BHSVNUX0RFRkFVTFRf RklMTEZBQ1RPUiwgU1BHSVNUX01JTl9GSUxMRkFDVE9SLCAxMDAKIAl9LAorCXsKKwkJeworCQkJ ImF1dG92YWN1dW1fcGFyYWxsZWxfd29ya2VycyIsCisJCQkiTWF4aW11bSBudW1iZXIgb2YgcGFy YWxsZWwgYXV0b3ZhY3V1bSB3b3JrZXJzIHRoYXQgY2FuIGJlIHRha2VuIGZyb20gYmd3b3JrZXJz IHBvb2wgZm9yIHByb2Nlc3NpbmcgdGhpcyB0YWJsZS4gIgorCQkJIklmIHZhbHVlIGlzIDAgdGhl biBwYXJhbGxlbCBkZWdyZWUgd2lsbCBjb21wdXRlZCBiYXNlZCBvbiBudW1iZXIgb2YgaW5kZXhl cy4iLAorCQkJUkVMT1BUX0tJTkRfSEVBUCwKKwkJCVNoYXJlVXBkYXRlRXhjbHVzaXZlTG9jawor CQl9LAorCQktMSwgLTEsIDEwMjQKKwl9LAogCXsKIAkJewogCQkJImF1dG92YWN1dW1fdmFjdXVt X3RocmVzaG9sZCIsCkBAIC0xODcyLDYgKzE4ODIsOCBAQCBkZWZhdWx0X3JlbG9wdGlvbnMoRGF0 dW0gcmVsb3B0aW9ucywgYm9vbCB2YWxpZGF0ZSwgcmVsb3B0X2tpbmQga2luZCkKIAkJeyJmaWxs ZmFjdG9yIiwgUkVMT1BUX1RZUEVfSU5ULCBvZmZzZXRvZihTdGRSZE9wdGlvbnMsIGZpbGxmYWN0 b3IpfSwKIAkJeyJhdXRvdmFjdXVtX2VuYWJsZWQiLCBSRUxPUFRfVFlQRV9CT09MLAogCQlvZmZz ZXRvZihTdGRSZE9wdGlvbnMsIGF1dG92YWN1dW0pICsgb2Zmc2V0b2YoQXV0b1ZhY09wdHMsIGVu YWJsZWQpfSwKKwkJeyJhdXRvdmFjdXVtX3BhcmFsbGVsX3dvcmtlcnMiLCBSRUxPUFRfVFlQRV9J TlQsCisJCW9mZnNldG9mKFN0ZFJkT3B0aW9ucywgYXV0b3ZhY3V1bSkgKyBvZmZzZXRvZihBdXRv VmFjT3B0cywgYXV0b3ZhY3V1bV9wYXJhbGxlbF93b3JrZXJzKX0sCiAJCXsiYXV0b3ZhY3V1bV92 YWN1dW1fdGhyZXNob2xkIiwgUkVMT1BUX1RZUEVfSU5ULAogCQlvZmZzZXRvZihTdGRSZE9wdGlv bnMsIGF1dG92YWN1dW0pICsgb2Zmc2V0b2YoQXV0b1ZhY09wdHMsIHZhY3V1bV90aHJlc2hvbGQp fSwKIAkJeyJhdXRvdmFjdXVtX3ZhY3V1bV9tYXhfdGhyZXNob2xkIiwgUkVMT1BUX1RZUEVfSU5U LApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvdmFjdXVtcGFyYWxsZWwuYyBiL3Ny Yy9iYWNrZW5kL2NvbW1hbmRzL3ZhY3V1bXBhcmFsbGVsLmMKaW5kZXggMGZlZWExZDMwZWMuLjM4 Y2Q2ZjY4MTA1IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy92YWN1dW1wYXJhbGxl bC5jCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3ZhY3V1bXBhcmFsbGVsLmMKQEAgLTEsNyAr MSw5IEBACiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqCiAgKiB2YWN1dW1wYXJhbGxlbC5jCi0gKgkg IFN1cHBvcnQgcm91dGluZXMgZm9yIHBhcmFsbGVsIHZhY3V1bSBleGVjdXRpb24uCisgKgkgIFN1 cHBvcnQgcm91dGluZXMgZm9yIHBhcmFsbGVsIHZhY3V1bSBhbmQgYXV0b3ZhY3V1bSBleGVjdXRp b24uIEluIHRoZQorICoJICBmdXR1cmUgY29tbWVudHMsIHRoZSB3b3JkICJ2YWN1dW0iIHdpbGwg cmVmZXIgdG8gYm90aCB2YWN1dW0gYW5kCisgKgkgIGF1dG92YWN1dW0uCiAgKgogICogVGhpcyBm aWxlIGNvbnRhaW5zIHJvdXRpbmVzIHRoYXQgYXJlIGludGVuZGVkIHRvIHN1cHBvcnQgc2V0dGlu ZyB1cCwgdXNpbmcsCiAgKiBhbmQgdGVhcmluZyBkb3duIGEgUGFyYWxsZWxWYWN1dW1TdGF0ZS4K QEAgLTM0LDYgKzM2LDcgQEAKICNpbmNsdWRlICJleGVjdXRvci9pbnN0cnVtZW50LmgiCiAjaW5j bHVkZSAib3B0aW1pemVyL3BhdGhzLmgiCiAjaW5jbHVkZSAicGdzdGF0LmgiCisjaW5jbHVkZSAi cG9zdG1hc3Rlci9hdXRvdmFjdXVtLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9idWZtZ3IuaCIKICNp bmNsdWRlICJ0Y29wL3Rjb3Bwcm90LmgiCiAjaW5jbHVkZSAidXRpbHMvbHN5c2NhY2hlLmgiCkBA IC0zNzMsOCArMzc2LDkgQEAgcGFyYWxsZWxfdmFjdXVtX2luaXQoUmVsYXRpb24gcmVsLCBSZWxh dGlvbiAqaW5kcmVscywgaW50IG5pbmRleGVzLAogCXNoYXJlZC0+cXVlcnlpZCA9IHBnc3RhdF9n ZXRfbXlfcXVlcnlfaWQoKTsKIAlzaGFyZWQtPm1haW50ZW5hbmNlX3dvcmtfbWVtX3dvcmtlciA9 CiAJCShuaW5kZXhlc19td20gPiAwKSA/Ci0JCW1haW50ZW5hbmNlX3dvcmtfbWVtIC8gTWluKHBh cmFsbGVsX3dvcmtlcnMsIG5pbmRleGVzX213bSkgOgotCQltYWludGVuYW5jZV93b3JrX21lbTsK KwkJdmFjX3dvcmtfbWVtIC8gTWluKHBhcmFsbGVsX3dvcmtlcnMsIG5pbmRleGVzX213bSkgOgor CQl2YWNfd29ya19tZW07CisKIAlzaGFyZWQtPmRlYWRfaXRlbXNfaW5mby5tYXhfYnl0ZXMgPSB2 YWNfd29ya19tZW0gKiAoc2l6ZV90KSAxMDI0OwogCiAJLyogUHJlcGFyZSBEU0Egc3BhY2UgZm9y IGRlYWQgaXRlbXMgKi8KQEAgLTQzNSw2ICs0MzksOCBAQCBwYXJhbGxlbF92YWN1dW1faW5pdChS ZWxhdGlvbiByZWwsIFJlbGF0aW9uICppbmRyZWxzLCBpbnQgbmluZGV4ZXMsCiB2b2lkCiBwYXJh bGxlbF92YWN1dW1fZW5kKFBhcmFsbGVsVmFjdXVtU3RhdGUgKnB2cywgSW5kZXhCdWxrRGVsZXRl UmVzdWx0ICoqaXN0YXRzKQogeworCWludCBubGF1bmNoZWRfd29ya2VyczsKKwogCUFzc2VydCgh SXNQYXJhbGxlbFdvcmtlcigpKTsKIAogCS8qIENvcHkgdGhlIHVwZGF0ZWQgc3RhdGlzdGljcyAq LwpAQCAtNDUzLDcgKzQ1OSwxMyBAQCBwYXJhbGxlbF92YWN1dW1fZW5kKFBhcmFsbGVsVmFjdXVt U3RhdGUgKnB2cywgSW5kZXhCdWxrRGVsZXRlUmVzdWx0ICoqaXN0YXRzKQogCiAJVGlkU3RvcmVE ZXN0cm95KHB2cy0+ZGVhZF9pdGVtcyk7CiAKKwlubGF1bmNoZWRfd29ya2VycyA9IHB2cy0+cGN4 dC0+bndvcmtlcnNfbGF1bmNoZWQ7IC8qIHJlbWVtYmVyIHRoaXMgdmFsdWUgKi8KIAlEZXN0cm95 UGFyYWxsZWxDb250ZXh0KHB2cy0+cGN4dCk7CisKKwkvKiBSZWxlYXNlIGFsbCBsYXVuY2hlZCAo aS5lLiByZXNlcnZlZCkgcGFyYWxsZWwgYXV0b3ZhY3V1bSB3b3JrZXJzLiAqLworCWlmIChBbUF1 dG9WYWN1dW1Xb3JrZXJQcm9jZXNzKCkpCisJCUF1dG9WYWN1dW1SZWxlYXNlUGFyYWxsZWxXb3Jr ZXJzKG5sYXVuY2hlZF93b3JrZXJzKTsKKwogCUV4aXRQYXJhbGxlbE1vZGUoKTsKIAogCXBmcmVl KHB2cy0+d2lsbF9wYXJhbGxlbF92YWN1dW0pOwpAQCAtNTUzLDEyICs1NjUsMTcgQEAgcGFyYWxs ZWxfdmFjdXVtX2NvbXB1dGVfd29ya2VycyhSZWxhdGlvbiAqaW5kcmVscywgaW50IG5pbmRleGVz LCBpbnQgbnJlcXVlc3RlZCwKIAlpbnQJCQluaW5kZXhlc19wYXJhbGxlbF9idWxrZGVsID0gMDsK IAlpbnQJCQluaW5kZXhlc19wYXJhbGxlbF9jbGVhbnVwID0gMDsKIAlpbnQJCQlwYXJhbGxlbF93 b3JrZXJzOworCWludAkJCW1heF9wYXJhbGxlbF93b3JrZXJzOworCisJbWF4X3BhcmFsbGVsX3dv cmtlcnMgPSBBbUF1dG9WYWN1dW1Xb3JrZXJQcm9jZXNzKCkgPworCQlhdXRvdmFjdXVtX21heF9w YXJhbGxlbF93b3JrZXJzIDoKKwkJbWF4X3BhcmFsbGVsX21haW50ZW5hbmNlX3dvcmtlcnM7CiAK IAkvKgogCSAqIFdlIGRvbid0IGFsbG93IHBlcmZvcm1pbmcgcGFyYWxsZWwgb3BlcmF0aW9uIGlu IHN0YW5kYWxvbmUgYmFja2VuZCBvcgogCSAqIHdoZW4gcGFyYWxsZWxpc20gaXMgZGlzYWJsZWQu CiAJICovCi0JaWYgKCFJc1VuZGVyUG9zdG1hc3RlciB8fCBtYXhfcGFyYWxsZWxfbWFpbnRlbmFu Y2Vfd29ya2VycyA9PSAwKQorCWlmICghSXNVbmRlclBvc3RtYXN0ZXIgfHwgbWF4X3BhcmFsbGVs X3dvcmtlcnMgPT0gMCkKIAkJcmV0dXJuIDA7CiAKIAkvKgpAQCAtNTk3LDggKzYxNCw4IEBAIHBh cmFsbGVsX3ZhY3V1bV9jb21wdXRlX3dvcmtlcnMoUmVsYXRpb24gKmluZHJlbHMsIGludCBuaW5k ZXhlcywgaW50IG5yZXF1ZXN0ZWQsCiAJcGFyYWxsZWxfd29ya2VycyA9IChucmVxdWVzdGVkID4g MCkgPwogCQlNaW4obnJlcXVlc3RlZCwgbmluZGV4ZXNfcGFyYWxsZWwpIDogbmluZGV4ZXNfcGFy YWxsZWw7CiAKLQkvKiBDYXAgYnkgbWF4X3BhcmFsbGVsX21haW50ZW5hbmNlX3dvcmtlcnMgKi8K LQlwYXJhbGxlbF93b3JrZXJzID0gTWluKHBhcmFsbGVsX3dvcmtlcnMsIG1heF9wYXJhbGxlbF9t YWludGVuYW5jZV93b3JrZXJzKTsKKwkvKiBDYXAgYnkgR1VDIHZhcmlhYmxlICovCisJcGFyYWxs ZWxfd29ya2VycyA9IE1pbihwYXJhbGxlbF93b3JrZXJzLCBtYXhfcGFyYWxsZWxfd29ya2Vycyk7 CiAKIAlyZXR1cm4gcGFyYWxsZWxfd29ya2VyczsKIH0KQEAgLTY0Niw2ICs2NjMsMTMgQEAgcGFy YWxsZWxfdmFjdXVtX3Byb2Nlc3NfYWxsX2luZGV4ZXMoUGFyYWxsZWxWYWN1dW1TdGF0ZSAqcHZz LCBpbnQgbnVtX2luZGV4X3NjYW4KIAkgKi8KIAlud29ya2VycyA9IE1pbihud29ya2VycywgcHZz LT5wY3h0LT5ud29ya2Vycyk7CiAKKwkvKgorCSAqIEFsc28gcmVzZXJ2ZSB3b3JrZXJzIGluIGF1 dG92YWN1dW0gZ2xvYmFsIHN0YXRlLiBOb3RlLCB0aGF0IHdlIG1heSBiZQorCSAqIGdpdmVuIGZl d2VyIHdvcmtlcnMgdGhhbiB3ZSByZXF1ZXN0ZWQuCisJICovCisJaWYgKEFtQXV0b1ZhY3V1bVdv cmtlclByb2Nlc3MoKSAmJiBud29ya2VycyA+IDApCisJCW53b3JrZXJzID0gQXV0b1ZhY3V1bVJl c2VydmVQYXJhbGxlbFdvcmtlcnMobndvcmtlcnMpOworCiAJLyoKIAkgKiBTZXQgaW5kZXggdmFj dXVtIHN0YXR1cyBhbmQgbWFyayB3aGV0aGVyIHBhcmFsbGVsIHZhY3V1bSB3b3JrZXIgY2FuCiAJ ICogcHJvY2VzcyBpdC4KQEAgLTY5MCw2ICs3MTQsMTYgQEAgcGFyYWxsZWxfdmFjdXVtX3Byb2Nl c3NfYWxsX2luZGV4ZXMoUGFyYWxsZWxWYWN1dW1TdGF0ZSAqcHZzLCBpbnQgbnVtX2luZGV4X3Nj YW4KIAogCQlMYXVuY2hQYXJhbGxlbFdvcmtlcnMocHZzLT5wY3h0KTsKIAorCQlpZiAoQW1BdXRv VmFjdXVtV29ya2VyUHJvY2VzcygpICYmCisJCQlwdnMtPnBjeHQtPm53b3JrZXJzX2xhdW5jaGVk IDwgbndvcmtlcnMpCisJCXsKKwkJCS8qCisJCQkgKiBUZWxsIGF1dG92YWN1dW0gdGhhdCB3ZSBj b3VsZCBub3QgbGF1bmNoIGFsbCB0aGUgcHJldmlvdXNseQorCQkJICogcmVzZXJ2ZWQgd29ya2Vy cy4KKwkJCSAqLworCQkJQXV0b1ZhY3V1bVJlbGVhc2VQYXJhbGxlbFdvcmtlcnMobndvcmtlcnMg LSBwdnMtPnBjeHQtPm53b3JrZXJzX2xhdW5jaGVkKTsKKwkJfQorCiAJCWlmIChwdnMtPnBjeHQt Pm53b3JrZXJzX2xhdW5jaGVkID4gMCkKIAkJewogCQkJLyoKZGlmZiAtLWdpdCBhL3NyYy9iYWNr ZW5kL3Bvc3RtYXN0ZXIvYXV0b3ZhY3V1bS5jIGIvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9hdXRv dmFjdXVtLmMKaW5kZXggOTQ3NDA5NWYyNzEuLjYxYTUwYzllY2E4IDEwMDY0NAotLS0gYS9zcmMv YmFja2VuZC9wb3N0bWFzdGVyL2F1dG92YWN1dW0uYworKysgYi9zcmMvYmFja2VuZC9wb3N0bWFz dGVyL2F1dG92YWN1dW0uYwpAQCAtMjg1LDYgKzI4NSw3IEBAIHR5cGVkZWYgc3RydWN0IEF1dG9W YWN1dW1Xb3JrSXRlbQogICogYXZfd29ya0l0ZW1zCQl3b3JrIGl0ZW0gYXJyYXkKICAqIGF2X253 b3JrZXJzRm9yQmFsYW5jZSB0aGUgbnVtYmVyIG9mIGF1dG92YWN1dW0gd29ya2VycyB0byB1c2Ug d2hlbgogICogCQkJCQljYWxjdWxhdGluZyB0aGUgcGVyIHdvcmtlciBjb3N0IGxpbWl0CisgKiBh dl9mcmVlUGFyYWxsZWxXb3JrZXJzIHRoZSBudW1iZXIgb2YgZnJlZSBwYXJhbGxlbCBhdXRvdmFj dXVtIHdvcmtlcnMKICAqCiAgKiBUaGlzIHN0cnVjdCBpcyBwcm90ZWN0ZWQgYnkgQXV0b3ZhY3V1 bUxvY2ssIGV4Y2VwdCBmb3IgYXZfc2lnbmFsIGFuZCBwYXJ0cwogICogb2YgdGhlIHdvcmtlciBs aXN0IChzZWUgYWJvdmUpLgpAQCAtMjk5LDYgKzMwMCw3IEBAIHR5cGVkZWYgc3RydWN0CiAJV29y a2VySW5mbwlhdl9zdGFydGluZ1dvcmtlcjsKIAlBdXRvVmFjdXVtV29ya0l0ZW0gYXZfd29ya0l0 ZW1zW05VTV9XT1JLSVRFTVNdOwogCXBnX2F0b21pY191aW50MzIgYXZfbndvcmtlcnNGb3JCYWxh bmNlOworCXVpbnQzMiBhdl9mcmVlUGFyYWxsZWxXb3JrZXJzOwogfSBBdXRvVmFjdXVtU2htZW1T dHJ1Y3Q7CiAKIHN0YXRpYyBBdXRvVmFjdXVtU2htZW1TdHJ1Y3QgKkF1dG9WYWN1dW1TaG1lbTsK QEAgLTM1NCw2ICszNTYsNyBAQCBzdGF0aWMgdm9pZCBhdXRvdmFjX3JlcG9ydF93b3JraXRlbShB dXRvVmFjdXVtV29ya0l0ZW0gKndvcmtpdGVtLAogc3RhdGljIHZvaWQgYXZsX3NpZ3VzcjJfaGFu ZGxlcihTSUdOQUxfQVJHUyk7CiBzdGF0aWMgYm9vbCBhdl93b3JrZXJfYXZhaWxhYmxlKHZvaWQp Owogc3RhdGljIHZvaWQgY2hlY2tfYXZfd29ya2VyX2d1Y3Modm9pZCk7CitzdGF0aWMgdm9pZCBh ZGp1c3RfZnJlZV9wYXJhbGxlbF93b3JrZXJzKGludCBwcmV2X21heF9wYXJhbGxlbF93b3JrZXJz KTsKIAogCiAKQEAgLTc1Myw2ICs3NTYsOCBAQCBQcm9jZXNzQXV0b1ZhY0xhdW5jaGVySW50ZXJy dXB0cyh2b2lkKQogCWlmIChDb25maWdSZWxvYWRQZW5kaW5nKQogCXsKIAkJaW50CQkJYXV0b3Zh Y3V1bV9tYXhfd29ya2Vyc19wcmV2ID0gYXV0b3ZhY3V1bV9tYXhfd29ya2VyczsKKwkJaW50CQkJ YXV0b3ZhY3V1bV9tYXhfcGFyYWxsZWxfd29ya2Vyc19wcmV2ID0KKwkJCWF1dG92YWN1dW1fbWF4 X3BhcmFsbGVsX3dvcmtlcnM7CiAKIAkJQ29uZmlnUmVsb2FkUGVuZGluZyA9IGZhbHNlOwogCQlQ cm9jZXNzQ29uZmlnRmlsZShQR0NfU0lHSFVQKTsKQEAgLTc2OSw2ICs3NzQsMTQgQEAgUHJvY2Vz c0F1dG9WYWNMYXVuY2hlckludGVycnVwdHModm9pZCkKIAkJaWYgKGF1dG92YWN1dW1fbWF4X3dv cmtlcnNfcHJldiAhPSBhdXRvdmFjdXVtX21heF93b3JrZXJzKQogCQkJY2hlY2tfYXZfd29ya2Vy X2d1Y3MoKTsKIAorCQkvKgorCQkgKiBJZiBhdXRvdmFjdXVtX21heF9wYXJhbGxlbF93b3JrZXJz IGNoYW5nZWQsIHdlIG11c3QgdGFrZSBjYXJlIG9mCisJCSAqIHRoZSBjb3JyZWN0IHZhbHVlIG9m IGF2YWlsYWJsZSBwYXJhbGxlbCBhdXRvdmFjdXVtIHdvcmtlcnMgaW4gc2htZW0uCisJCSAqLwor CQlpZiAoYXV0b3ZhY3V1bV9tYXhfcGFyYWxsZWxfd29ya2Vyc19wcmV2ICE9CisJCQlhdXRvdmFj dXVtX21heF9wYXJhbGxlbF93b3JrZXJzKQorCQkJYWRqdXN0X2ZyZWVfcGFyYWxsZWxfd29ya2Vy cyhhdXRvdmFjdXVtX21heF9wYXJhbGxlbF93b3JrZXJzX3ByZXYpOworCiAJCS8qIHJlYnVpbGQg dGhlIGxpc3QgaW4gY2FzZSB0aGUgbmFwdGltZSBjaGFuZ2VkICovCiAJCXJlYnVpbGRfZGF0YWJh c2VfbGlzdChJbnZhbGlkT2lkKTsKIAl9CkBAIC0yODQ3LDggKzI4NjAsMTIgQEAgdGFibGVfcmVj aGVja19hdXRvdmFjKE9pZCByZWxpZCwgSFRBQiAqdGFibGVfdG9hc3RfbWFwLAogCQkgKi8KIAkJ dGFiLT5hdF9wYXJhbXMuaW5kZXhfY2xlYW51cCA9IFZBQ09QVFZBTFVFX1VOU1BFQ0lGSUVEOwog CQl0YWItPmF0X3BhcmFtcy50cnVuY2F0ZSA9IFZBQ09QVFZBTFVFX1VOU1BFQ0lGSUVEOwotCQkv KiBBcyBvZiBub3csIHdlIGRvbid0IHN1cHBvcnQgcGFyYWxsZWwgdmFjdXVtIGZvciBhdXRvdmFj dXVtICovCi0JCXRhYi0+YXRfcGFyYW1zLm53b3JrZXJzID0gLTE7CisKKwkJLyogRGVjaWRlIHdo ZXRoZXIgd2UgbmVlZCB0byBwcm9jZXNzIGluZGV4ZXMgb2YgdGFibGUgaW4gcGFyYWxsZWwuICov CisJCXRhYi0+YXRfcGFyYW1zLm53b3JrZXJzID0gYXZvcHRzCisJCQk/IGF2b3B0cy0+YXV0b3Zh Y3V1bV9wYXJhbGxlbF93b3JrZXJzCisJCQk6IC0xOworCiAJCXRhYi0+YXRfcGFyYW1zLmZyZWV6 ZV9taW5fYWdlID0gZnJlZXplX21pbl9hZ2U7CiAJCXRhYi0+YXRfcGFyYW1zLmZyZWV6ZV90YWJs ZV9hZ2UgPSBmcmVlemVfdGFibGVfYWdlOwogCQl0YWItPmF0X3BhcmFtcy5tdWx0aXhhY3RfZnJl ZXplX21pbl9hZ2UgPSBtdWx0aXhhY3RfZnJlZXplX21pbl9hZ2U7CkBAIC0zMzI5LDYgKzMzNDYs NjggQEAgQXV0b1ZhY3V1bVJlcXVlc3RXb3JrKEF1dG9WYWN1dW1Xb3JrSXRlbVR5cGUgdHlwZSwg T2lkIHJlbGF0aW9uSWQsCiAJcmV0dXJuIHJlc3VsdDsKIH0KIAorLyoKKyAqIEluIG9yZGVyIHRv IG1lZXQgdGhlICdhdXRvdmFjdXVtX21heF9wYXJhbGxlbF93b3JrZXJzJyBsaW1pdCwgbGVhZGVy IHdvcmtlcgorICogbXVzdCBjYWxsIHRoaXMgZnVuY3Rpb24uIEl0IHJldHVybnMgdGhlIG51bWJl ciBvZiBwYXJhbGxlbCB3b3JrZXJzIHRoYXQKKyAqIGFjdHVhbGx5IGNhbiBiZSBsYXVuY2hlZCBh bmQgcmVzZXJ2ZXMgKGlmIGFueSkgdGhlc2Ugd29ya2VycyBpbiBnbG9iYWwKKyAqIGF1dG92YWN1 dW0gc3RhdGUuCisgKgorICogTk9URTogV2Ugd2lsbCB0cnkgdG8gcHJvdmlkZSBhcyBtYW55IHdv cmtlcnMgYXMgcmVxdWVzdGVkLCBldmVuIGlmIGNhbGxlcgorICogd2lsbCBvY2N1cHkgYWxsIGF2 YWlsYWJsZSB3b3JrZXJzLgorICovCitpbnQKK0F1dG9WYWN1dW1SZXNlcnZlUGFyYWxsZWxXb3Jr ZXJzKGludCBud29ya2VycykKK3sKKwlpbnQgY2FuX2xhdW5jaDsKKworCS8qIE9ubHkgbGVhZGVy IHdvcmtlciBjYW4gY2FsbCB0aGlzIGZ1bmN0aW9uLiAqLworCUFzc2VydChBbUF1dG9WYWN1dW1X b3JrZXJQcm9jZXNzKCkgJiYgIUlzUGFyYWxsZWxXb3JrZXIoKSk7CisKKwlMV0xvY2tBY3F1aXJl KEF1dG92YWN1dW1Mb2NrLCBMV19FWENMVVNJVkUpOworCisJLyogUHJvdmlkZSBhcyBtYW55IHdv cmtlcnMgYXMgd2UgY2FuLiAqLworCWNhbl9sYXVuY2ggPSBNaW4oQXV0b1ZhY3V1bVNobWVtLT5h dl9mcmVlUGFyYWxsZWxXb3JrZXJzLCBud29ya2Vycyk7CisJQXV0b1ZhY3V1bVNobWVtLT5hdl9m cmVlUGFyYWxsZWxXb3JrZXJzIC09IG53b3JrZXJzOworCisJTFdMb2NrUmVsZWFzZShBdXRvdmFj dXVtTG9jayk7CisJcmV0dXJuIGNhbl9sYXVuY2g7Cit9CisKKy8qCisgKiBXaGVuIHBhcmFsbGVs IGF1dG92YWN1dW0gd29ya2VyIGRpZSwgbGVhZGVyIHdvcmtlciBtdXN0IGNhbGwgdGhpcyBmdW5j dGlvbgorICogaW4gb3JkZXIgdG8gcmVmcmVzaCBnbG9iYWwgYXV0b3ZhY3V1bSBzdGF0ZS4gVGh1 cywgb3RoZXIgbGVhZGVycyB3aWxsIGJlCisgKiBhYmxlIHRvIHVzZSB0aGVzZSB3b3JrZXJzLgor ICoKKyAqICdud29ya2VycycgLSBob3cgbWFueSB3b3JrZXJzIGNhbGxlciB3YW50cyB0byByZWxl YXNlLgorICovCit2b2lkCitBdXRvVmFjdXVtUmVsZWFzZVBhcmFsbGVsV29ya2VycyhpbnQgbndv cmtlcnMpCit7CisJLyogT25seSBsZWFkZXIgd29ya2VyIGNhbiBjYWxsIHRoaXMgZnVuY3Rpb24u ICovCisJQXNzZXJ0KEFtQXV0b1ZhY3V1bVdvcmtlclByb2Nlc3MoKSAmJiAhSXNQYXJhbGxlbFdv cmtlcigpKTsKKworCS8qIFJlZnJlc2ggYXV0b3ZhY3V1bV9tYXhfcGFyYWxsZWxfd29ya2VycyBw YXJlbWV0ZXIgKi8KKwlDSEVDS19GT1JfSU5URVJSVVBUUygpOworCWlmIChDb25maWdSZWxvYWRQ ZW5kaW5nKQorCXsKKwkJQ29uZmlnUmVsb2FkUGVuZGluZyA9IGZhbHNlOworCQlQcm9jZXNzQ29u ZmlnRmlsZShQR0NfU0lHSFVQKTsKKwl9CisKKwlMV0xvY2tBY3F1aXJlKEF1dG92YWN1dW1Mb2Nr LCBMV19FWENMVVNJVkUpOworCisJLyoKKwkgKiBJZiBhdXRvdmFjdXVtX21heF9wYXJhbGxlbF93 b3JrZXJzIHBhcmFtZXRlciB3YXMgcmVkdWNlZCBkdXJpbmcgcGFyYWxsZWwKKwkgKiBhdXRvdmFj dXVtIGV4ZWN1dGlvbiwgd2UgbXVzdCBjYXAgYXZhaWxhYmxlIHdvcmtlcnMgbnVtYmVyIGJ5IGl0 cyBuZXcKKwkgKiB2YWx1ZS4KKwkgKi8KKwlBdXRvVmFjdXVtU2htZW0tPmF2X2ZyZWVQYXJhbGxl bFdvcmtlcnMgPQorCQlNaW4oQXV0b1ZhY3V1bVNobWVtLT5hdl9mcmVlUGFyYWxsZWxXb3JrZXJz ICsgbndvcmtlcnMsCisJCQlhdXRvdmFjdXVtX21heF9wYXJhbGxlbF93b3JrZXJzKTsKKworCUxX TG9ja1JlbGVhc2UoQXV0b3ZhY3V1bUxvY2spOworfQorCiAvKgogICogYXV0b3ZhY19pbml0CiAg KgkJVGhpcyBpcyBjYWxsZWQgYXQgcG9zdG1hc3RlciBpbml0aWFsaXphdGlvbi4KQEAgLTMzODks NiArMzQ2OCw4IEBAIEF1dG9WYWN1dW1TaG1lbUluaXQodm9pZCkKIAkJQXNzZXJ0KCFmb3VuZCk7 CiAKIAkJQXV0b1ZhY3V1bVNobWVtLT5hdl9sYXVuY2hlcnBpZCA9IDA7CisJCUF1dG9WYWN1dW1T aG1lbS0+YXZfZnJlZVBhcmFsbGVsV29ya2VycyA9CisJCQlhdXRvdmFjdXVtX21heF9wYXJhbGxl bF93b3JrZXJzOwogCQlkY2xpc3RfaW5pdCgmQXV0b1ZhY3V1bVNobWVtLT5hdl9mcmVlV29ya2Vy cyk7CiAJCWRsaXN0X2luaXQoJkF1dG9WYWN1dW1TaG1lbS0+YXZfcnVubmluZ1dvcmtlcnMpOwog CQlBdXRvVmFjdXVtU2htZW0tPmF2X3N0YXJ0aW5nV29ya2VyID0gTlVMTDsKQEAgLTM0MzksNiAr MzUyMCwxMiBAQCBjaGVja19hdXRvdmFjdXVtX3dvcmtfbWVtKGludCAqbmV3dmFsLCB2b2lkICoq ZXh0cmEsIEd1Y1NvdXJjZSBzb3VyY2UpCiAJcmV0dXJuIHRydWU7CiB9CiAKK3ZvaWQKK2Fzc2ln bl9hdXRvdmFjdXVtX21heF9wYXJhbGxlbF93b3JrZXJzKGludCBuZXd2YWwsIHZvaWQgKmV4dHJh KQoreworCWF1dG92YWN1dW1fbWF4X3BhcmFsbGVsX3dvcmtlcnMgPSBNaW4obmV3dmFsLCBtYXhf d29ya2VyX3Byb2Nlc3Nlcyk7Cit9CisKIC8qCiAgKiBSZXR1cm5zIHdoZXRoZXIgdGhlcmUgaXMg YSBmcmVlIGF1dG92YWN1dW0gd29ya2VyIHNsb3QgYXZhaWxhYmxlLgogICovCkBAIC0zNDcwLDMg KzM1NTcsMzIgQEAgY2hlY2tfYXZfd29ya2VyX2d1Y3Modm9pZCkKIAkJCQkgZXJyZGV0YWlsKCJU aGUgc2VydmVyIHdpbGwgb25seSBzdGFydCB1cCB0byBcImF1dG92YWN1dW1fd29ya2VyX3Nsb3Rz XCIgKCVkKSBhdXRvdmFjdXVtIHdvcmtlcnMgYXQgYSBnaXZlbiB0aW1lLiIsCiAJCQkJCQkgICBh dXRvdmFjdXVtX3dvcmtlcl9zbG90cykpKTsKIH0KKworLyoKKyAqIE1ha2Ugc3VyZSB0aGF0IG51 bWJlciBvZiBmcmVlIHBhcmFsbGVsIHdvcmtlcnMgY29ycmVzcG9uZHMgdG8gdGhlCisgKiBhdXRv dmFjdXVtX21heF9wYXJhbGxlbF93b3JrZXJzIHBhcmFtZXRlciAoYWZ0ZXIgaXQgd2FzIGNoYW5n ZWQpLgorICovCitzdGF0aWMgdm9pZAorYWRqdXN0X2ZyZWVfcGFyYWxsZWxfd29ya2VycyhpbnQg cHJldl9tYXhfcGFyYWxsZWxfd29ya2VycykKK3sKKwlMV0xvY2tBY3F1aXJlKEF1dG92YWN1dW1M b2NrLCBMV19FWENMVVNJVkUpOworCisJLyoKKwkgKiBDYXAgdGhlIG51bWJlciBvZiBmcmVlIHdv cmtlcnMgYnkgbmV3IHBhcmFtZXRlcidzIHZhbHVlLCBpZiBuZWVkZWQuCisJICovCisJQXV0b1Zh Y3V1bVNobWVtLT5hdl9mcmVlUGFyYWxsZWxXb3JrZXJzID0KKwkJTWluKEF1dG9WYWN1dW1TaG1l bS0+YXZfZnJlZVBhcmFsbGVsV29ya2VycywKKwkJCWF1dG92YWN1dW1fbWF4X3BhcmFsbGVsX3dv cmtlcnMpOworCisJaWYgKGF1dG92YWN1dW1fbWF4X3BhcmFsbGVsX3dvcmtlcnMgPiBwcmV2X21h eF9wYXJhbGxlbF93b3JrZXJzKQorCXsKKwkJLyoKKwkJICogSWYgdXNlciB3YW50cyB0byBpbmNy ZWFzZSBudW1iZXIgb2YgcGFyYWxsZWwgYXV0b3ZhY3V1bSB3b3JrZXJzLCB3ZQorCQkgKiBtdXN0 IGluY3JlYXNlIG51bWJlciBvZiBmcmVlIHdvcmtlcnMuCisJCSAqLworCQlBdXRvVmFjdXVtU2ht ZW0tPmF2X2ZyZWVQYXJhbGxlbFdvcmtlcnMgKz0KKwkJCShhdXRvdmFjdXVtX21heF9wYXJhbGxl bF93b3JrZXJzIC0gcHJldl9tYXhfcGFyYWxsZWxfd29ya2Vycyk7CisJfQorCisJTFdMb2NrUmVs ZWFzZShBdXRvdmFjdXVtTG9jayk7Cit9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9p bml0L2dsb2JhbHMuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL2luaXQvZ2xvYmFscy5jCmluZGV4IGQz MWNiNDVhMDU4Li45Nzc2NDQ5NzhjMSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvaW5p dC9nbG9iYWxzLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvaW5pdC9nbG9iYWxzLmMKQEAgLTE0 Myw2ICsxNDMsNyBAQCBpbnQJCQlOQnVmZmVycyA9IDE2Mzg0OwogaW50CQkJTWF4Q29ubmVjdGlv bnMgPSAxMDA7CiBpbnQJCQltYXhfd29ya2VyX3Byb2Nlc3NlcyA9IDg7CiBpbnQJCQltYXhfcGFy YWxsZWxfd29ya2VycyA9IDg7CitpbnQgICAgICAgICBhdXRvdmFjdXVtX21heF9wYXJhbGxlbF93 b3JrZXJzID0gMDsKIGludAkJCU1heEJhY2tlbmRzID0gMDsKIAogLyogR1VDIHBhcmFtZXRlcnMg Zm9yIHZhY3V1bSAqLwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9ndWNfdGFi bGVzLmMgYi9zcmMvYmFja2VuZC91dGlscy9taXNjL2d1Y190YWJsZXMuYwppbmRleCBkMTRiMTY3 OGU3Zi4uNDk0MWFkOTc2ZGYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvZ3Vj X3RhYmxlcy5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvZ3VjX3RhYmxlcy5jCkBAIC0z NjA0LDYgKzM2MDQsMTYgQEAgc3RydWN0IGNvbmZpZ19pbnQgQ29uZmlndXJlTmFtZXNJbnRbXSA9 CiAJCU5VTEwsIE5VTEwsIE5VTEwKIAl9LAogCisJeworCQl7ImF1dG92YWN1dW1fbWF4X3BhcmFs bGVsX3dvcmtlcnMiLCBQR0NfU0lHSFVQLCBWQUNVVU1fQVVUT1ZBQ1VVTSwKKwkJCWdldHRleHRf bm9vcCgiTWF4aW11bSBudW1iZXIgb2YgcGFyYWxsZWwgYXV0b3ZhY3V1bSB3b3JrZXJzLCB0aGF0 IGNhbiBiZSB0YWtlbiBmcm9tIGJnd29ya2VycyBwb29sLiIpLAorCQkJZ2V0dGV4dF9ub29wKCJU aGlzIHBhcmFtZXRlciBpcyBjYXBwZWQgYnkgXCJtYXhfd29ya2VyX3Byb2Nlc3Nlc1wiIChub3Qg YnkgXCJhdXRvdmFjdXVtX21heF93b3JrZXJzXCIhKS4iKSwKKwkJfSwKKwkJJmF1dG92YWN1dW1f bWF4X3BhcmFsbGVsX3dvcmtlcnMsCisJCTAsIDAsIE1BWF9CQUNLRU5EUywKKwkJTlVMTCwgYXNz aWduX2F1dG92YWN1dW1fbWF4X3BhcmFsbGVsX3dvcmtlcnMsIE5VTEwKKwl9LAorCiAJewogCQl7 Im1heF9wYXJhbGxlbF9tYWludGVuYW5jZV93b3JrZXJzIiwgUEdDX1VTRVJTRVQsIFJFU09VUkNF U19XT1JLRVJfUFJPQ0VTU0VTLAogCQkJZ2V0dGV4dF9ub29wKCJTZXRzIHRoZSBtYXhpbXVtIG51 bWJlciBvZiBwYXJhbGxlbCBwcm9jZXNzZXMgcGVyIG1haW50ZW5hbmNlIG9wZXJhdGlvbi4iKSwK ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvcG9zdGdyZXNxbC5jb25mLnNhbXBs ZSBiL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvcG9zdGdyZXNxbC5jb25mLnNhbXBsZQppbmRleCBh OWQ4MjkzNDc0YS4uYmJmNTMwNzAwMGYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL21p c2MvcG9zdGdyZXNxbC5jb25mLnNhbXBsZQorKysgYi9zcmMvYmFja2VuZC91dGlscy9taXNjL3Bv c3RncmVzcWwuY29uZi5zYW1wbGUKQEAgLTY4Myw2ICs2ODMsNyBAQAogYXV0b3ZhY3V1bV93b3Jr ZXJfc2xvdHMgPSAxNgkjIGF1dG92YWN1dW0gd29ya2VyIHNsb3RzIHRvIGFsbG9jYXRlCiAJCQkJ CSMgKGNoYW5nZSByZXF1aXJlcyByZXN0YXJ0KQogI2F1dG92YWN1dW1fbWF4X3dvcmtlcnMgPSAz CQkjIG1heCBudW1iZXIgb2YgYXV0b3ZhY3V1bSBzdWJwcm9jZXNzZXMKKyNhdXRvdmFjdXVtX21h eF9wYXJhbGxlbF93b3JrZXJzID0gMAkjIGRpc2FibGVkIGJ5IGRlZmF1bHQgYW5kIGxpbWl0ZWQg YnkgbWF4X3dvcmtlcl9wcm9jZXNzZXMKICNhdXRvdmFjdXVtX25hcHRpbWUgPSAxbWluCQkjIHRp bWUgYmV0d2VlbiBhdXRvdmFjdXVtIHJ1bnMKICNhdXRvdmFjdXVtX3ZhY3V1bV90aHJlc2hvbGQg PSA1MAkjIG1pbiBudW1iZXIgb2Ygcm93IHVwZGF0ZXMgYmVmb3JlCiAJCQkJCSMgdmFjdXVtCmRp ZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9taXNjYWRtaW4uaCBiL3NyYy9pbmNsdWRlL21pc2NhZG1p bi5oCmluZGV4IDFiZWY5ODQ3MWMzLi44NTkyNjQxNTY1NyAxMDA2NDQKLS0tIGEvc3JjL2luY2x1 ZGUvbWlzY2FkbWluLmgKKysrIGIvc3JjL2luY2x1ZGUvbWlzY2FkbWluLmgKQEAgLTE3Nyw2ICsx NzcsNyBAQCBleHRlcm4gUEdETExJTVBPUlQgaW50IE1heEJhY2tlbmRzOwogZXh0ZXJuIFBHRExM SU1QT1JUIGludCBNYXhDb25uZWN0aW9uczsKIGV4dGVybiBQR0RMTElNUE9SVCBpbnQgbWF4X3dv cmtlcl9wcm9jZXNzZXM7CiBleHRlcm4gUEdETExJTVBPUlQgaW50IG1heF9wYXJhbGxlbF93b3Jr ZXJzOworZXh0ZXJuIFBHRExMSU1QT1JUIGludCBhdXRvdmFjdXVtX21heF9wYXJhbGxlbF93b3Jr ZXJzOwogCiBleHRlcm4gUEdETExJTVBPUlQgaW50IGNvbW1pdF90aW1lc3RhbXBfYnVmZmVyczsK IGV4dGVybiBQR0RMTElNUE9SVCBpbnQgbXVsdGl4YWN0X21lbWJlcl9idWZmZXJzOwpkaWZmIC0t Z2l0IGEvc3JjL2luY2x1ZGUvcG9zdG1hc3Rlci9hdXRvdmFjdXVtLmggYi9zcmMvaW5jbHVkZS9w b3N0bWFzdGVyL2F1dG92YWN1dW0uaAppbmRleCBlODEzNWY0MWExYy4uODYzZDIwNmYyYmQgMTAw NjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3Bvc3RtYXN0ZXIvYXV0b3ZhY3V1bS5oCisrKyBiL3NyYy9p bmNsdWRlL3Bvc3RtYXN0ZXIvYXV0b3ZhY3V1bS5oCkBAIC02NCw2ICs2NCwxMCBAQCBwZ19ub3Jl dHVybiBleHRlcm4gdm9pZCBBdXRvVmFjV29ya2VyTWFpbihjb25zdCB2b2lkICpzdGFydHVwX2Rh dGEsIHNpemVfdCBzdGFydAogZXh0ZXJuIGJvb2wgQXV0b1ZhY3V1bVJlcXVlc3RXb3JrKEF1dG9W YWN1dW1Xb3JrSXRlbVR5cGUgdHlwZSwKIAkJCQkJCQkJICBPaWQgcmVsYXRpb25JZCwgQmxvY2tO dW1iZXIgYmxrbm8pOwogCisvKiBwYXJhbGxlbCBhdXRvdmFjdXVtIHN0dWZmICovCitleHRlcm4g aW50IEF1dG9WYWN1dW1SZXNlcnZlUGFyYWxsZWxXb3JrZXJzKGludCBud29ya2Vycyk7CitleHRl cm4gdm9pZCBBdXRvVmFjdXVtUmVsZWFzZVBhcmFsbGVsV29ya2VycyhpbnQgbndvcmtlcnMpOwor CiAvKiBzaGFyZWQgbWVtb3J5IHN0dWZmICovCiBleHRlcm4gU2l6ZSBBdXRvVmFjdXVtU2htZW1T aXplKHZvaWQpOwogZXh0ZXJuIHZvaWQgQXV0b1ZhY3V1bVNobWVtSW5pdCh2b2lkKTsKZGlmZiAt LWdpdCBhL3NyYy9pbmNsdWRlL3V0aWxzL2d1Y19ob29rcy5oIGIvc3JjL2luY2x1ZGUvdXRpbHMv Z3VjX2hvb2tzLmgKaW5kZXggODJhYzg2NDZhOGQuLjA0ODMzYjRmMTQ3IDEwMDY0NAotLS0gYS9z cmMvaW5jbHVkZS91dGlscy9ndWNfaG9va3MuaAorKysgYi9zcmMvaW5jbHVkZS91dGlscy9ndWNf aG9va3MuaApAQCAtMzEsNiArMzEsNyBAQCBleHRlcm4gdm9pZCBhc3NpZ25fYXBwbGljYXRpb25f bmFtZShjb25zdCBjaGFyICpuZXd2YWwsIHZvaWQgKmV4dHJhKTsKIGV4dGVybiBjb25zdCBjaGFy ICpzaG93X2FyY2hpdmVfY29tbWFuZCh2b2lkKTsKIGV4dGVybiBib29sIGNoZWNrX2F1dG92YWN1 dW1fd29ya19tZW0oaW50ICpuZXd2YWwsIHZvaWQgKipleHRyYSwKIAkJCQkJCQkJCSAgR3VjU291 cmNlIHNvdXJjZSk7CitleHRlcm4gdm9pZCBhc3NpZ25fYXV0b3ZhY3V1bV9tYXhfcGFyYWxsZWxf d29ya2VycyhpbnQgbmV3dmFsLCB2b2lkICpleHRyYSk7CiBleHRlcm4gYm9vbCBjaGVja192YWN1 dW1fYnVmZmVyX3VzYWdlX2xpbWl0KGludCAqbmV3dmFsLCB2b2lkICoqZXh0cmEsCiAJCQkJCQkJ CQkJCUd1Y1NvdXJjZSBzb3VyY2UpOwogZXh0ZXJuIGJvb2wgY2hlY2tfYmFja3RyYWNlX2Z1bmN0 aW9ucyhjaGFyICoqbmV3dmFsLCB2b2lkICoqZXh0cmEsCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVk ZS91dGlscy9yZWwuaCBiL3NyYy9pbmNsdWRlL3V0aWxzL3JlbC5oCmluZGV4IGI1NTIzNTk5MTVm Li4zNzcwMDAxOTlkNyAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvdXRpbHMvcmVsLmgKKysrIGIv c3JjL2luY2x1ZGUvdXRpbHMvcmVsLmgKQEAgLTMxMSw2ICszMTEsOCBAQCB0eXBlZGVmIHN0cnVj dCBGb3JlaWduS2V5Q2FjaGVJbmZvCiB0eXBlZGVmIHN0cnVjdCBBdXRvVmFjT3B0cwogewogCWJv b2wJCWVuYWJsZWQ7CisJaW50CQkJYXV0b3ZhY3V1bV9wYXJhbGxlbF93b3JrZXJzOyAvKiBtYXgg bnVtYmVyIG9mIHBhcmFsbGVsCisJCQkJCQkJCQkJCQlhdXRvdmFjdXVtIHdvcmtlcnMgKi8KIAlp bnQJCQl2YWN1dW1fdGhyZXNob2xkOwogCWludAkJCXZhY3V1bV9tYXhfdGhyZXNob2xkOwogCWlu dAkJCXZhY3V1bV9pbnNfdGhyZXNob2xkOwotLSAKMi40My4wCgo= --0000000000004dd102063a5f1086--