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 1ubGkT-00Fs1V-0j for pgsql-hackers@arkaria.postgresql.org; Mon, 14 Jul 2025 10:49:29 +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 1ubGkQ-006PXZ-Nk for pgsql-hackers@arkaria.postgresql.org; Mon, 14 Jul 2025 10:49:27 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) 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 1ubGkQ-006PXR-AX for pgsql-hackers@lists.postgresql.org; Mon, 14 Jul 2025 10:49:27 +0000 Received: from mail-yw1-x112d.google.com ([2607:f8b0:4864:20::112d]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from <3danissimo@gmail.com>) id 1ubGkO-007UXa-21 for pgsql-hackers@lists.postgresql.org; Mon, 14 Jul 2025 10:49:26 +0000 Received: by mail-yw1-x112d.google.com with SMTP id 00721157ae682-70e5e6ab7b8so37530387b3.1 for ; Mon, 14 Jul 2025 03:49:24 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1752490163; x=1753094963; 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=3sCOO7WPk1cYZn2vqkCZLSqdI2cLhufXRYws6ecKQ18=; b=F2O8eNfnlKEoNJRsrqngmBnBHCaC/prW88UiRkf1r2PpnudbGhvhO/7xyvBdrBSEu3 1FXTr5nuUWcQRnRl5fHau7vANQ2esBKlmvZzmbAYQJxvF7FcN14Vct80+ooviwYalVTT 9il43v4HE9f4dh/SPqJqxX95mpRfsYakhX5CEuEqlszMX0/e4eXmZNigVrPGPVKo6xnL t4i29yPN+4iQlLxjI0S41AFW7Ox7UJ09thGtie9tISMWEDODqiiLeumucD1WM5Za5t1h qztkC8hkO8NB5QIJd2C8NCIuzOnSohSBBzmq8Y3E5zTIcR8XVGIgV34bE1LfZvEcwDW3 vl1Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1752490163; x=1753094963; 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=3sCOO7WPk1cYZn2vqkCZLSqdI2cLhufXRYws6ecKQ18=; b=Yt/Isi8VLqxEwFrJA5R0FtcU6QANOL2LKJgDwInDBpWlzsbXX5Ywo02cl28d4PqUMx e5pOavBOn8z5/yUHrBtQNDFM/LU5Zha0inbBA/6N9k3smXJ2lANItd4yGicQpWR3k960 xRe8VTuhZhqTI5CurCpqnZ25O2sTDgCufF6GYQDqPeMuXaAkSkLFdeym1zKHPd5XA1L7 pYADc4zY3mU4cLQlJcTjhdnQlP2bPZIiQxZ8jGms8MhFKWrZVTaTX1eREiew+8DfttLZ h2Tk/tzZyPLkQKxchp3HuPmv/kalbxnEH4jlXt/LJ9qo7fOzhF/hdOF2TCeyOol4n/uJ aDuA== X-Forwarded-Encrypted: i=1; AJvYcCVjDJAeNwPFJGTKN4XwmMHXkNL6lnt5QPlFWvOPM7JrzQpNFL5STZpPZ9HC0E49Q+LCPR8PKqSeGLkjgeQi@lists.postgresql.org X-Gm-Message-State: AOJu0Yw9WpXN2BiagEEvwrETfRk1uGdsIhi/8xIOOqZxcZh2VmSuFPLm GlCQotTaerKz2Wa7v6UW1VRW5mUI4S5hFA6k9EQQCL6Wky4kIkaK+qL5WojUe3EsjLHeMfdfGTl nHfAsXgcVq4sDPRjatdl3f4PGUla1blE7YJ0Fu9c= X-Gm-Gg: ASbGncv6qg65vXYhaUNVW2h+fymkjdk9xALonDux7e+3Vm7U4R8PUi7QcOWOu9sWuJV QFqG3Pl/8CprC4zGLupdn2m4Esvf2cYdoKZUKSAUSEiXwITKgBGjbcGNMD8sNJCT1gGJjd2+GNw x35KvJl5i8vS4HyhwoFnWRKj1Je65uFZhZuhCcB6Dpx5S1+5hQgC3WJEB1/GEUjEe4w40eY0WWx ReuEQ== X-Google-Smtp-Source: AGHT+IG+MUO1MdMjvz+WRR90YsiNZZH6G70skTAeSZzLl+hS+rijKLIStwJpTrX7fFQ/IOql2oelEkBTKV8g3hCrrQs= X-Received: by 2002:a05:690c:6f03:b0:711:16d4:60dd with SMTP id 00721157ae682-717dae74d73mr163781977b3.19.1752490162635; Mon, 14 Jul 2025 03:49:22 -0700 (PDT) MIME-Version: 1.0 References: In-Reply-To: From: Daniil Davydov <3danissimo@gmail.com> Date: Mon, 14 Jul 2025 17:49:10 +0700 X-Gm-Features: Ac12FXzws4_dHDIE-XXvpcFcTBc-R8xqdOEj16dZlbW5EGr7dOEgruWKZ-SIIX0 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="0000000000009e2cc40639e16923" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0000000000009e2cc40639e16923 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Hi, On Mon, Jul 14, 2025 at 2:10=E2=80=AFPM Masahiko Sawada wrote: > > --- > - shared->maintenance_work_mem_worker =3D > - (nindexes_mwm > 0) ? > - maintenance_work_mem / Min(parallel_workers, nindexes_mwm) : > - maintenance_work_mem; > + > + if (AmAutoVacuumWorkerProcess()) > + shared->maintenance_work_mem_worker =3D > + (nindexes_mwm > 0) ? > + autovacuum_work_mem / Min(parallel_workers, nindexes_mwm) : > + autovacuum_work_mem; > + else > + shared->maintenance_work_mem_worker =3D > + (nindexes_mwm > 0) ? > + maintenance_work_mem / Min(parallel_workers, nindexes_mwm) : > + maintenance_work_mem; > > Since we have a similar code in dead_items_alloc() I think it's better > to follow it: > > int vac_work_mem =3D AmAutoVacuumWorkerProcess() && > autovacuum_work_mem !=3D -1 ? > autovacuum_work_mem : maintenance_work_mem; > > That is, we calculate vac_work_mem first and then calculate > shared->maintenance_work_mem_worker. I think it's more straightforward > as the formula of maintenance_work_mem_worker is the same whereas the > amount of memory used for vacuum and autovacuum varies. > I was confused by the fact that initially maintenance_work_mem was used for calculations, not vac_work_mem. I agree that we should better use already calculated vac_work_mem value. > --- > + nlaunched_workers =3D pvs->pcxt->nworkers_launched; /* remember this = value */ > DestroyParallelContext(pvs->pcxt); > + > + /* Release all launched (i.e. reserved) parallel autovacuum workers. = */ > + if (AmAutoVacuumWorkerProcess()) > + ParallelAutoVacuumReleaseWorkers(nlaunched_workers); > + > > Why don't we release workers before destroying the parallel context? > Destroying parallel context includes waiting for all workers to exit (after which, other operations can use them). If we first call ParallelAutoVacuumReleaseWorkers, some operation can reasonably request all released workers. But this request can fail, because there is no guarantee that workers managed to finish. Actually, there's nothing wrong with that, but I think releasing workers only after finishing work is a more logical approach. > --- > @@ -558,7 +576,9 @@ parallel_vacuum_compute_workers(Relation *indrels, > int nindexes, int nrequested, > * We don't allow performing parallel operation in standalone backend= or > * when parallelism is disabled. > */ > - if (!IsUnderPostmaster || max_parallel_maintenance_workers =3D=3D 0) > + if (!IsUnderPostmaster || > + (autovacuum_max_parallel_workers =3D=3D 0 && AmAutoVacuumWorkerPr= ocess()) || > + (max_parallel_maintenance_workers =3D=3D 0 && !AmAutoVacuumWorker= Process())) > return 0; > > /* > @@ -597,15 +617,17 @@ parallel_vacuum_compute_workers(Relation > *indrels, int nindexes, int nrequested, > parallel_workers =3D (nrequested > 0) ? > Min(nrequested, nindexes_parallel) : nindexes_parallel; > > - /* Cap by max_parallel_maintenance_workers */ > - parallel_workers =3D Min(parallel_workers, max_parallel_maintenance_w= orkers); > + /* Cap by GUC variable */ > + parallel_workers =3D AmAutoVacuumWorkerProcess() ? > + Min(parallel_workers, autovacuum_max_parallel_workers) : > + Min(parallel_workers, max_parallel_maintenance_workers); > > return parallel_workers; > > How about calculating the maximum number of workers once and using it > in the above both places? > Agree. Good idea. > --- > + /* Check how many workers can provide autovacuum. */ > + if (AmAutoVacuumWorkerProcess() && nworkers > 0) > + nworkers =3D ParallelAutoVacuumReserveWorkers(nworkers); > + > > I think it's better to move this code to right after setting "nworkers > =3D Min(nworkers, pvs->pcxt->nworkers);" as it's a more related code. > > The comment needs to be updated as it doesn't match what the function > actually does (i.e. reserving the workers). > You are right, I'll fix it. > --- > /* Reinitialize parallel context to relaunch parallel workers */ > if (num_index_scans > 0) > + { > ReinitializeParallelDSM(pvs->pcxt); > > + /* > + * Release all launched (i.e. reserved) parallel autovacuum > + * workers. > + */ > + if (AmAutoVacuumWorkerProcess()) > + ParallelAutoVacuumReleaseWorkers(pvs->pcxt->nworkers_laun= ched); > + } > > Why do we need to release all workers here? If there is a reason, we > should mention it as a comment. > Hm, I guess it was left over from previous patch versions. Actually we don't need to release workers here, as we will try to launch them immediately. It is a bug, thank you for noticing it. > --- > @@ -706,16 +751,16 @@ > parallel_vacuum_process_all_indexes(ParallelVacuumState *pvs, int > num_index_scan > > if (vacuum) > ereport(pvs->shared->elevel, > - (errmsg(ngettext("launched %d parallel vacuum > worker for index vacuuming (planned: %d)", > - "launched %d parallel vacuum > workers for index vacuuming (planned: %d)", > + (errmsg(ngettext("launched %d parallel %svacuum > worker for index vacuuming (planned: %d)", > + "launched %d parallel %svacuum > workers for index vacuuming (planned: %d)", > pvs->pcxt->nworkers_launched), > - pvs->pcxt->nworkers_launched, nworkers))); > + pvs->pcxt->nworkers_launched, > AmAutoVacuumWorkerProcess() ? "auto" : "", nworkers))); > > The "%svacuum" part doesn't work in terms of translation. We need to > construct the whole sentence instead. > But do we need this log message > change in the first place? IIUC autovacuums write logs only when the > execution time exceed the log_autovacuum_min_duration (or its > reloption). The patch unconditionally sets LOG level for autovacuums > but I'm not sure it's consistent with other autovacuum logging > behavior: > > + int elevel =3D AmAutoVacuumWorkerProcess() || > + vacrel->verbose ? > + INFO : DEBUG2; > > This log level is used only "for messages about parallel workers launched". 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? 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 whether s= uch approach is acceptable. > - * Support routines for parallel vacuum execution. > + * Support routines for parallel [auto]vacuum execution. > > The patch includes the change of "vacuum" -> "[auto]vacuum" in many > places. While I think we need to mention that vacuumparallel.c > supports autovacuums I'm not sure we really need all of them. If we > accept this style, we would require for all subsequent changes to > follow it, which could increase maintenance costs. > Agree. I'll leave a comment which says that vacuumparallel also supports parallel autovacuum. All other changes like "[auto]vacuum" will be deleted. > --- > @@ -299,6 +301,7 @@ typedef struct > WorkerInfo av_startingWorker; > AutoVacuumWorkItem av_workItems[NUM_WORKITEMS]; > pg_atomic_uint32 av_nworkersForBalance; > + uint32 av_available_parallel_workers; > > Other field names seem to have consistent naming rules; 'av_' prefix > followed by name in camel case. So how about renaming it to > av_freeParallelWorkers or something along those lines? > > --- > +int > +ParallelAutoVacuumReserveWorkers(int nworkers) > +{ > > Other exposed functions have "AutoVacuum" prefix, so how about > renaming it to AutoVacuumReserveParallelWorkers() or something along > those lines? > Agreeing with both comments, I'll rename the structure field and functions. > --- > + if (AutoVacuumShmem->av_available_parallel_workers < nworkers) > + { > + /* Provide as many workers as we can. */ > + can_launch =3D AutoVacuumShmem->av_available_parallel_workers; > + AutoVacuumShmem->av_available_parallel_workers =3D 0; > + } > + else > + { > + /* OK, we can provide all requested workers. */ > + can_launch =3D nworkers; > + AutoVacuumShmem->av_available_parallel_workers -=3D nworkers; > + } > > Can we simplify this logic as follows? > > can_launch =3D Min(AutoVacuumShmem->av_available_parallel_workers, nwork= ers); > AutoVacuumShmem->av_available_parallel_workers -=3D can_launch; > Sure, I'll simplify it. --- Thank you very much for your comments! Please, see v7 patch : 1) Rename few functions and variables + get rid of comments like "[auto]vacuum" in vacuumparallel.c 2) Simplified logic in 'parallel_vacuum_init' and 'AutoVacuumReserveParallelWorkers' functions 3) Refactor and bug fix in 'parallel_vacuum_process_all_indexes' function 4) Change "planned vs. launched" logging, so it can be translated 5) Rebased on newest commit in master branch -- Best regards, Daniil Davydov --0000000000009e2cc40639e16923 Content-Type: text/x-patch; charset="US-ASCII"; name="v7-0002-Sandbox-for-parallel-index-autovacuum.patch" Content-Disposition: attachment; filename="v7-0002-Sandbox-for-parallel-index-autovacuum.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_md2ynlrn1 RnJvbSA3YWYyNTViNGQwYTVlNzkyN2Y2YTFjMjEyYzRiMjM0MmQ2YjA0NGE3IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBEYW5paWwgRGF2aWRvdiA8ZC5kYXZ5ZG92QHBvc3RncmVzcHJv LnJ1PgpEYXRlOiBGcmksIDE2IE1heSAyMDI1IDExOjU5OjAzICswNzAwClN1YmplY3Q6IFtQQVRD SCB2NyAyLzJdIFNhbmRib3ggZm9yIHBhcmFsbGVsIGluZGV4IGF1dG92YWN1dW0KCi0tLQogc3Jj L3Rlc3QvbW9kdWxlcy9NYWtlZmlsZSAgICAgICAgICAgICAgICAgICAgIHwgICAxICsKIHNyYy90 ZXN0L21vZHVsZXMvYXV0b3ZhY3V1bS8uZ2l0aWdub3JlICAgICAgICB8ICAgMSArCiBzcmMvdGVz dC9tb2R1bGVzL2F1dG92YWN1dW0vTWFrZWZpbGUgICAgICAgICAgfCAgMTQgKysKIHNyYy90ZXN0 L21vZHVsZXMvYXV0b3ZhY3V1bS9tZXNvbi5idWlsZCAgICAgICB8ICAxMiArKwogLi4uL2F1dG92 YWN1dW0vdC8wMDFfYXV0b3ZhY19wYXJhbGxlbC5wbCAgICAgIHwgMTMxICsrKysrKysrKysrKysr KysrKwogc3JjL3Rlc3QvbW9kdWxlcy9tZXNvbi5idWlsZCAgICAgICAgICAgICAgICAgIHwgICAx ICsKIDYgZmlsZXMgY2hhbmdlZCwgMTYwIGluc2VydGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEwMDY0 NCBzcmMvdGVzdC9tb2R1bGVzL2F1dG92YWN1dW0vLmdpdGlnbm9yZQogY3JlYXRlIG1vZGUgMTAw NjQ0IHNyYy90ZXN0L21vZHVsZXMvYXV0b3ZhY3V1bS9NYWtlZmlsZQogY3JlYXRlIG1vZGUgMTAw NjQ0IHNyYy90ZXN0L21vZHVsZXMvYXV0b3ZhY3V1bS9tZXNvbi5idWlsZAogY3JlYXRlIG1vZGUg MTAwNjQ0IHNyYy90ZXN0L21vZHVsZXMvYXV0b3ZhY3V1bS90LzAwMV9hdXRvdmFjX3BhcmFsbGVs LnBsCgpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbW9kdWxlcy9NYWtlZmlsZSBiL3NyYy90ZXN0L21v ZHVsZXMvTWFrZWZpbGUKaW5kZXggYWExZDI3YmJlZDMuLmI3ZjNlMzQyZTgyIDEwMDY0NAotLS0g YS9zcmMvdGVzdC9tb2R1bGVzL01ha2VmaWxlCisrKyBiL3NyYy90ZXN0L21vZHVsZXMvTWFrZWZp bGUKQEAgLTUsNiArNSw3IEBAIHRvcF9idWlsZGRpciA9IC4uLy4uLy4uCiBpbmNsdWRlICQodG9w X2J1aWxkZGlyKS9zcmMvTWFrZWZpbGUuZ2xvYmFsCiAKIFNVQkRJUlMgPSBcCisJCSAgYXV0b3Zh Y3V1bSBcCiAJCSAgYnJpbiBcCiAJCSAgY29tbWl0X3RzIFwKIAkJICBkZWxheV9leGVjdXRpb24g XApkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbW9kdWxlcy9hdXRvdmFjdXVtLy5naXRpZ25vcmUgYi9z cmMvdGVzdC9tb2R1bGVzL2F1dG92YWN1dW0vLmdpdGlnbm9yZQpuZXcgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCAwMDAwMDAwMDAwMC4uMGI1NDY0MWJjZWIKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMv dGVzdC9tb2R1bGVzL2F1dG92YWN1dW0vLmdpdGlnbm9yZQpAQCAtMCwwICsxIEBACisvdG1wX2No ZWNrLwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21v ZHVsZXMvYXV0b3ZhY3V1bS9NYWtlZmlsZSBiL3NyYy90ZXN0L21vZHVsZXMvYXV0b3ZhY3V1bS9N YWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uOTBjMDBmZjM1 MGIKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9tb2R1bGVzL2F1dG92YWN1dW0vTWFrZWZp bGUKQEAgLTAsMCArMSwxNCBAQAorIyBzcmMvdGVzdC9tb2R1bGVzL2F1dG92YWN1dW0vTWFrZWZp bGUKKworVEFQX1RFU1RTID0gMQorCitpZmRlZiBVU0VfUEdYUworUEdfQ09ORklHID0gcGdfY29u ZmlnCitQR1hTIDo9ICQoc2hlbGwgJChQR19DT05GSUcpIC0tcGd4cykKK2luY2x1ZGUgJChQR1hT KQorZWxzZQorc3ViZGlyID0gc3JjL3Rlc3QvbW9kdWxlcy9hdXRvdmFjdXVtCit0b3BfYnVpbGRk aXIgPSAuLi8uLi8uLi8uLgoraW5jbHVkZSAkKHRvcF9idWlsZGRpcikvc3JjL01ha2VmaWxlLmds b2JhbAoraW5jbHVkZSAkKHRvcF9zcmNkaXIpL2NvbnRyaWIvY29udHJpYi1nbG9iYWwubWsKK2Vu ZGlmClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbW9k dWxlcy9hdXRvdmFjdXVtL21lc29uLmJ1aWxkIGIvc3JjL3Rlc3QvbW9kdWxlcy9hdXRvdmFjdXVt L21lc29uLmJ1aWxkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5mOTFj MWExNGQyYgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L21vZHVsZXMvYXV0b3ZhY3V1bS9t ZXNvbi5idWlsZApAQCAtMCwwICsxLDEyIEBACisjIENvcHlyaWdodCAoYykgMjAyMi0yMDI1LCBQ b3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorCit0ZXN0cyArPSB7CisgICduYW1l JzogJ2F1dG92YWN1dW0nLAorICAnc2QnOiBtZXNvbi5jdXJyZW50X3NvdXJjZV9kaXIoKSwKKyAg J2JkJzogbWVzb24uY3VycmVudF9idWlsZF9kaXIoKSwKKyAgJ3RhcCc6IHsKKyAgICAndGVzdHMn OiBbCisgICAgICAndC8wMDFfYXV0b3ZhY19wYXJhbGxlbC5wbCcsCisgICAgXSwKKyAgfSwKK30K ZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvYXV0b3ZhY3V1bS90LzAwMV9hdXRvdmFjX3Bh cmFsbGVsLnBsIGIvc3JjL3Rlc3QvbW9kdWxlcy9hdXRvdmFjdXVtL3QvMDAxX2F1dG92YWNfcGFy YWxsZWwucGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmFlODkyZTVi NGRlCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3QvbW9kdWxlcy9hdXRvdmFjdXVtL3QvMDAx X2F1dG92YWNfcGFyYWxsZWwucGwKQEAgLTAsMCArMSwxMzEgQEAKK3VzZSB3YXJuaW5ncyBGQVRB TCA9PiAnYWxsJzsKK3VzZSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyOwordXNlIFBvc3RncmVT UUw6OlRlc3Q6OlV0aWxzOwordXNlIFRlc3Q6Ok1vcmU7CisKK215ICRwc3FsX291dDsKKworbXkg JG5vZGUgPSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyLT5uZXcoJ25vZGUxJyk7Ciskbm9kZS0+ aW5pdDsKKyRub2RlLT5hcHBlbmRfY29uZigncG9zdGdyZXNxbC5jb25mJywgcXF7CisJYXV0b3Zh Y3V1bSA9IG9mZgorCW1heF93YWxfc2l6ZSA9IDQwOTYKKwltYXhfd29ya2VyX3Byb2Nlc3NlcyA9 IDIwCisJbWF4X3BhcmFsbGVsX3dvcmtlcnMgPSAyMAorCW1heF9wYXJhbGxlbF9tYWludGVuYW5j ZV93b3JrZXJzID0gMjAKKwlhdXRvdmFjdXVtX21heF9wYXJhbGxlbF93b3JrZXJzID0gMTAKKwls b2dfbWluX21lc3NhZ2VzID0gaW5mbworfSk7Ciskbm9kZS0+c3RhcnQ7CisKK215ICRpbmRleGVz X251bSA9IDgwOworbXkgJGluaXRpYWxfcm93c19udW0gPSAxMDBfMDAwOworbXkgJHBhcmFsbGVs X2F1dG92YWN1dW1fd29ya2VycyA9IDU7CisKKyMgQ3JlYXRlIGJpZyB0YWJsZSBhbmQgY3JlYXRl IHNwZWNpZmllZCBudW1iZXIgb2YgYi10cmVlIGluZGV4ZXMgb24gaXQKKyRub2RlLT5zYWZlX3Bz cWwoJ3Bvc3RncmVzJywgcXF7CisJQ1JFQVRFIFRBQkxFIHRlc3RfYXV0b3ZhYyAoCisJCWlkIFNF UklBTCBQUklNQVJZIEtFWSwKKwkJY29sXzEgSU5URUdFUiwgIGNvbF8yIElOVEVHRVIsICBjb2xf MyBJTlRFR0VSLCAgY29sXzQgSU5URUdFUiwgIGNvbF81IElOVEVHRVIsCisJCWNvbF82IElOVEVH RVIsICBjb2xfNyBJTlRFR0VSLCAgY29sXzggSU5URUdFUiwgIGNvbF85IElOVEVHRVIsICBjb2xf MTAgSU5URUdFUiwKKwkJY29sXzExIElOVEVHRVIsIGNvbF8xMiBJTlRFR0VSLCBjb2xfMTMgSU5U RUdFUiwgY29sXzE0IElOVEVHRVIsIGNvbF8xNSBJTlRFR0VSLAorCQljb2xfMTYgSU5URUdFUiwg Y29sXzE3IElOVEVHRVIsIGNvbF8xOCBJTlRFR0VSLCBjb2xfMTkgSU5URUdFUiwgY29sXzIwIElO VEVHRVIsCisJCWNvbF8yMSBJTlRFR0VSLCBjb2xfMjIgSU5URUdFUiwgY29sXzIzIElOVEVHRVIs IGNvbF8yNCBJTlRFR0VSLCBjb2xfMjUgSU5URUdFUiwKKwkJY29sXzI2IElOVEVHRVIsIGNvbF8y NyBJTlRFR0VSLCBjb2xfMjggSU5URUdFUiwgY29sXzI5IElOVEVHRVIsIGNvbF8zMCBJTlRFR0VS LAorCQljb2xfMzEgSU5URUdFUiwgY29sXzMyIElOVEVHRVIsIGNvbF8zMyBJTlRFR0VSLCBjb2xf MzQgSU5URUdFUiwgY29sXzM1IElOVEVHRVIsCisJCWNvbF8zNiBJTlRFR0VSLCBjb2xfMzcgSU5U RUdFUiwgY29sXzM4IElOVEVHRVIsIGNvbF8zOSBJTlRFR0VSLCBjb2xfNDAgSU5URUdFUiwKKwkJ Y29sXzQxIElOVEVHRVIsIGNvbF80MiBJTlRFR0VSLCBjb2xfNDMgSU5URUdFUiwgY29sXzQ0IElO VEVHRVIsIGNvbF80NSBJTlRFR0VSLAorCQljb2xfNDYgSU5URUdFUiwgY29sXzQ3IElOVEVHRVIs IGNvbF80OCBJTlRFR0VSLCBjb2xfNDkgSU5URUdFUiwgY29sXzUwIElOVEVHRVIsCisJCWNvbF81 MSBJTlRFR0VSLCBjb2xfNTIgSU5URUdFUiwgY29sXzUzIElOVEVHRVIsIGNvbF81NCBJTlRFR0VS LCBjb2xfNTUgSU5URUdFUiwKKwkJY29sXzU2IElOVEVHRVIsIGNvbF81NyBJTlRFR0VSLCBjb2xf NTggSU5URUdFUiwgY29sXzU5IElOVEVHRVIsIGNvbF82MCBJTlRFR0VSLAorCQljb2xfNjEgSU5U RUdFUiwgY29sXzYyIElOVEVHRVIsIGNvbF82MyBJTlRFR0VSLCBjb2xfNjQgSU5URUdFUiwgY29s XzY1IElOVEVHRVIsCisJCWNvbF82NiBJTlRFR0VSLCBjb2xfNjcgSU5URUdFUiwgY29sXzY4IElO VEVHRVIsIGNvbF82OSBJTlRFR0VSLCBjb2xfNzAgSU5URUdFUiwKKwkJY29sXzcxIElOVEVHRVIs IGNvbF83MiBJTlRFR0VSLCBjb2xfNzMgSU5URUdFUiwgY29sXzc0IElOVEVHRVIsIGNvbF83NSBJ TlRFR0VSLAorCQljb2xfNzYgSU5URUdFUiwgY29sXzc3IElOVEVHRVIsIGNvbF83OCBJTlRFR0VS LCBjb2xfNzkgSU5URUdFUiwgY29sXzgwIElOVEVHRVIsCisJCWNvbF84MSBJTlRFR0VSLCBjb2xf ODIgSU5URUdFUiwgY29sXzgzIElOVEVHRVIsIGNvbF84NCBJTlRFR0VSLCBjb2xfODUgSU5URUdF UiwKKwkJY29sXzg2IElOVEVHRVIsIGNvbF84NyBJTlRFR0VSLCBjb2xfODggSU5URUdFUiwgY29s Xzg5IElOVEVHRVIsIGNvbF85MCBJTlRFR0VSLAorCQljb2xfOTEgSU5URUdFUiwgY29sXzkyIElO VEVHRVIsIGNvbF85MyBJTlRFR0VSLCBjb2xfOTQgSU5URUdFUiwgY29sXzk1IElOVEVHRVIsCisJ CWNvbF85NiBJTlRFR0VSLCBjb2xfOTcgSU5URUdFUiwgY29sXzk4IElOVEVHRVIsIGNvbF85OSBJ TlRFR0VSLCBjb2xfMTAwIElOVEVHRVIKKwkpIFdJVEggKHBhcmFsbGVsX2F1dG92YWN1dW1fd29y a2VycyA9ICRwYXJhbGxlbF9hdXRvdmFjdXVtX3dvcmtlcnMpOworCisJRE8gXCRcJAorCURFQ0xB UkUKKwkJaSBJTlRFR0VSOworCUJFR0lOCisJCUZPUiBpIElOIDEuLiRpbmRleGVzX251bSBMT09Q CisJCQlFWEVDVVRFIGZvcm1hdCgnQ1JFQVRFIElOREVYIGlkeF9jb2xfXCVzIE9OIHRlc3RfYXV0 b3ZhYyAoY29sX1wlcyk7JywgaSwgaSk7CisJCUVORCBMT09QOworCUVORCBcJFwkOworfSk7CisK KyRub2RlLT5wc3FsKCdwb3N0Z3JlcycsCisJIlNFTEVDVCBDT1VOVCgqKSBGUk9NIHBnX2luZGV4 IGkKKwkgICBKT0lOIHBnX2NsYXNzIGMgT04gYy5vaWQgPSBpLmluZHJlbGlkCisJICBXSEVSRSBj LnJlbG5hbWUgPSAndGVzdF9hdXRvdmFjJzsiLAorCXN0ZG91dCA9PiBcJHBzcWxfb3V0CispOwor aXMoJHBzcWxfb3V0LCAkaW5kZXhlc19udW0gKyAxLCAiQWxsIGluZGV4ZXMgY3JlYXRlZCBzdWNj ZXNzZnVsbHkiKTsKKworJG5vZGUtPnNhZmVfcHNxbCgncG9zdGdyZXMnLCBxcXsKKwlETyBcJFwk CisJREVDTEFSRQorCSAgICBpIElOVEVHRVI7CisJQkVHSU4KKwkgICAgRk9SIGkgSU4gMS4uJGlu aXRpYWxfcm93c19udW0gTE9PUAorCSAgICAgICAgSU5TRVJUIElOVE8gdGVzdF9hdXRvdmFjICgK KwkgICAgICAgICAgICBjb2xfMSwgY29sXzIsIGNvbF8zLCBjb2xfNCwgY29sXzUsIGNvbF82LCBj b2xfNywgY29sXzgsIGNvbF85LCBjb2xfMTAsCisJICAgICAgICAgICAgY29sXzExLCBjb2xfMTIs IGNvbF8xMywgY29sXzE0LCBjb2xfMTUsIGNvbF8xNiwgY29sXzE3LCBjb2xfMTgsIGNvbF8xOSwg Y29sXzIwLAorCSAgICAgICAgICAgIGNvbF8yMSwgY29sXzIyLCBjb2xfMjMsIGNvbF8yNCwgY29s XzI1LCBjb2xfMjYsIGNvbF8yNywgY29sXzI4LCBjb2xfMjksIGNvbF8zMCwKKwkgICAgICAgICAg ICBjb2xfMzEsIGNvbF8zMiwgY29sXzMzLCBjb2xfMzQsIGNvbF8zNSwgY29sXzM2LCBjb2xfMzcs IGNvbF8zOCwgY29sXzM5LCBjb2xfNDAsCisJICAgICAgICAgICAgY29sXzQxLCBjb2xfNDIsIGNv bF80MywgY29sXzQ0LCBjb2xfNDUsIGNvbF80NiwgY29sXzQ3LCBjb2xfNDgsIGNvbF80OSwgY29s XzUwLAorCSAgICAgICAgICAgIGNvbF81MSwgY29sXzUyLCBjb2xfNTMsIGNvbF81NCwgY29sXzU1 LCBjb2xfNTYsIGNvbF81NywgY29sXzU4LCBjb2xfNTksIGNvbF82MCwKKwkgICAgICAgICAgICBj b2xfNjEsIGNvbF82MiwgY29sXzYzLCBjb2xfNjQsIGNvbF82NSwgY29sXzY2LCBjb2xfNjcsIGNv bF82OCwgY29sXzY5LCBjb2xfNzAsCisJICAgICAgICAgICAgY29sXzcxLCBjb2xfNzIsIGNvbF83 MywgY29sXzc0LCBjb2xfNzUsIGNvbF83NiwgY29sXzc3LCBjb2xfNzgsIGNvbF83OSwgY29sXzgw LAorCSAgICAgICAgICAgIGNvbF84MSwgY29sXzgyLCBjb2xfODMsIGNvbF84NCwgY29sXzg1LCBj b2xfODYsIGNvbF84NywgY29sXzg4LCBjb2xfODksIGNvbF85MCwKKwkgICAgICAgICAgICBjb2xf OTEsIGNvbF85MiwgY29sXzkzLCBjb2xfOTQsIGNvbF85NSwgY29sXzk2LCBjb2xfOTcsIGNvbF85 OCwgY29sXzk5LCBjb2xfMTAwCisJICAgICAgICApIFZBTFVFUyAoCisJICAgICAgICAgICAgaSwg aSArIDEsIGkgKyAyLCBpICsgMywgaSArIDQsIGkgKyA1LCBpICsgNiwgaSArIDcsIGkgKyA4LCBp ICsgOSwKKwkgICAgICAgICAgICBpICsgMTAsIGkgKyAxMSwgaSArIDEyLCBpICsgMTMsIGkgKyAx NCwgaSArIDE1LCBpICsgMTYsIGkgKyAxNywgaSArIDE4LCBpICsgMTksCisJICAgICAgICAgICAg aSArIDIwLCBpICsgMjEsIGkgKyAyMiwgaSArIDIzLCBpICsgMjQsIGkgKyAyNSwgaSArIDI2LCBp ICsgMjcsIGkgKyAyOCwgaSArIDI5LAorCSAgICAgICAgICAgIGkgKyAzMCwgaSArIDMxLCBpICsg MzIsIGkgKyAzMywgaSArIDM0LCBpICsgMzUsIGkgKyAzNiwgaSArIDM3LCBpICsgMzgsIGkgKyAz OSwKKwkgICAgICAgICAgICBpICsgNDAsIGkgKyA0MSwgaSArIDQyLCBpICsgNDMsIGkgKyA0NCwg aSArIDQ1LCBpICsgNDYsIGkgKyA0NywgaSArIDQ4LCBpICsgNDksCisJICAgICAgICAgICAgaSAr IDUwLCBpICsgNTEsIGkgKyA1MiwgaSArIDUzLCBpICsgNTQsIGkgKyA1NSwgaSArIDU2LCBpICsg NTcsIGkgKyA1OCwgaSArIDU5LAorCSAgICAgICAgICAgIGkgKyA2MCwgaSArIDYxLCBpICsgNjIs IGkgKyA2MywgaSArIDY0LCBpICsgNjUsIGkgKyA2NiwgaSArIDY3LCBpICsgNjgsIGkgKyA2OSwK KwkgICAgICAgICAgICBpICsgNzAsIGkgKyA3MSwgaSArIDcyLCBpICsgNzMsIGkgKyA3NCwgaSAr IDc1LCBpICsgNzYsIGkgKyA3NywgaSArIDc4LCBpICsgNzksCisJICAgICAgICAgICAgaSArIDgw LCBpICsgODEsIGkgKyA4MiwgaSArIDgzLCBpICsgODQsIGkgKyA4NSwgaSArIDg2LCBpICsgODcs IGkgKyA4OCwgaSArIDg5LAorCSAgICAgICAgICAgIGkgKyA5MCwgaSArIDkxLCBpICsgOTIsIGkg KyA5MywgaSArIDk0LCBpICsgOTUsIGkgKyA5NiwgaSArIDk3LCBpICsgOTgsIGkgKyA5OQorCSAg ICAgICAgKTsKKwkgICAgRU5EIExPT1A7CisJRU5EIFwkXCQ7Cit9KTsKKworJG5vZGUtPnBzcWwo J3Bvc3RncmVzJywKKwkiU0VMRUNUIENPVU5UKCopIEZST00gdGVzdF9hdXRvdmFjOyIsCisJc3Rk b3V0ID0+IFwkcHNxbF9vdXQKKyk7CitpcygkcHNxbF9vdXQsICRpbml0aWFsX3Jvd3NfbnVtLCAi QWxsIGRhdGEgaW5zZXJ0ZWQgaW50byB0YWJsZSBzdWNjZXNzZnVsbHkiKTsKKworJG5vZGUtPnNh ZmVfcHNxbCgncG9zdGdyZXMnLCBxcXsKKwlVUERBVEUgdGVzdF9hdXRvdmFjIFNFVCBjb2xfMSA9 IDAgV0hFUkUgKGNvbF8xICUgMykgPSAwOworCUFOQUxZWkUgdGVzdF9hdXRvdmFjOworfSk7CisK KyMgUmVkdWNlIGF1dG92YWN1dW1fd29ya19tZW0sIHNvIGxlYWRlciBwcm9jZXNzIHdpbGwgcGVy Zm9ybSBwYXJhbGxlbCBpbmRleGkKKyMgdmFjdXVtIHBoYXNlIHNldmVyYWwgdGltZXMKKyRub2Rl LT5hcHBlbmRfY29uZigncG9zdGdyZXNxbC5jb25mJywgcXF7CisJYXV0b3ZhY3V1bV9uYXB0aW1l ID0gJzFzJworCWF1dG92YWN1dW1fdmFjdXVtX3RocmVzaG9sZCA9IDEKKwlhdXRvdmFjdXVtX2Fu YWx5emVfdGhyZXNob2xkID0gMQorCWF1dG92YWN1dW1fdmFjdXVtX3NjYWxlX2ZhY3RvciA9IDAu MQorCWF1dG92YWN1dW1fYW5hbHl6ZV9zY2FsZV9mYWN0b3IgPSAwLjEKKwlhdXRvdmFjdXVtID0g b24KK30pOworCiskbm9kZS0+cmVzdGFydDsKKworIyBzbGVlcCgzNjAwKTsKKworb2soMSwgIlRo ZXJlIGFyZSBubyBzZWdmYXVsdHMiKTsKKworJG5vZGUtPnN0b3A7Citkb25lX3Rlc3RpbmcoKTsK ZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvbWVzb24uYnVpbGQgYi9zcmMvdGVzdC9tb2R1 bGVzL21lc29uLmJ1aWxkCmluZGV4IDlkZTAwNTdiZDFkLi43ZjJhZDgxMGNhMCAxMDA2NDQKLS0t IGEvc3JjL3Rlc3QvbW9kdWxlcy9tZXNvbi5idWlsZAorKysgYi9zcmMvdGVzdC9tb2R1bGVzL21l c29uLmJ1aWxkCkBAIC0xLDUgKzEsNiBAQAogIyBDb3B5cmlnaHQgKGMpIDIwMjItMjAyNSwgUG9z dGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKIAorc3ViZGlyKCdhdXRvdmFjdXVtJykK IHN1YmRpcignYnJpbicpCiBzdWJkaXIoJ2NvbW1pdF90cycpCiBzdWJkaXIoJ2RlbGF5X2V4ZWN1 dGlvbicpCi0tIAoyLjQzLjAKCg== --0000000000009e2cc40639e16923 Content-Type: text/x-patch; charset="US-ASCII"; name="v7-0001-Parallel-index-autovacuum-with-bgworkers.patch" Content-Disposition: attachment; filename="v7-0001-Parallel-index-autovacuum-with-bgworkers.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_md2ynlr10 RnJvbSA1NWI3NmYxNWJiYzM5OTFiNzQ1N2RlNmMxZDY5OThkMzliMTYyOTJjIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBEYW5paWwgRGF2aWRvdiA8ZC5kYXZ5ZG92QHBvc3RncmVzcHJv LnJ1PgpEYXRlOiBGcmksIDE2IE1heSAyMDI1IDExOjU4OjQwICswNzAwClN1YmplY3Q6IFtQQVRD SCB2NyAxLzJdIFBhcmFsbGVsIGluZGV4IGF1dG92YWN1dW0gd2l0aCBiZ3dvcmtlcnMKCi0tLQog c3JjL2JhY2tlbmQvYWNjZXNzL2NvbW1vbi9yZWxvcHRpb25zLmMgICAgICAgIHwgIDEyICsrCiBz cmMvYmFja2VuZC9hY2Nlc3MvaGVhcC92YWN1dW1sYXp5LmMgICAgICAgICAgfCAgIDYgKy0KIHNy Yy9iYWNrZW5kL2NvbW1hbmRzL3ZhY3V1bXBhcmFsbGVsLmMgICAgICAgICB8ICA1NyArKysrKyst LQogc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9hdXRvdmFjdXVtLmMgICAgICAgICAgIHwgMTM1ICsr KysrKysrKysrKysrKysrLQogc3JjL2JhY2tlbmQvdXRpbHMvaW5pdC9nbG9iYWxzLmMgICAgICAg ICAgICAgIHwgICAxICsKIHNyYy9iYWNrZW5kL3V0aWxzL21pc2MvZ3VjX3RhYmxlcy5jICAgICAg ICAgICB8ICAxMCArKwogc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9wb3N0Z3Jlc3FsLmNvbmYuc2Ft cGxlIHwgICAxICsKIHNyYy9pbmNsdWRlL21pc2NhZG1pbi5oICAgICAgICAgICAgICAgICAgICAg ICB8ICAgMSArCiBzcmMvaW5jbHVkZS9wb3N0bWFzdGVyL2F1dG92YWN1dW0uaCAgICAgICAgICAg fCAgIDQgKwogc3JjL2luY2x1ZGUvdXRpbHMvZ3VjX2hvb2tzLmggICAgICAgICAgICAgICAgIHwg ICAyICsKIHNyYy9pbmNsdWRlL3V0aWxzL3JlbC5oICAgICAgICAgICAgICAgICAgICAgICB8ICAg MiArCiAxMSBmaWxlcyBjaGFuZ2VkLCAyMjAgaW5zZXJ0aW9ucygrKSwgMTEgZGVsZXRpb25zKC0p CgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2NvbW1vbi9yZWxvcHRpb25zLmMgYi9z cmMvYmFja2VuZC9hY2Nlc3MvY29tbW9uL3JlbG9wdGlvbnMuYwppbmRleCA1MDc0N2MxNjM5Ni4u ZTM2ZDU5ZjYzMmIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9jb21tb24vcmVsb3B0 aW9ucy5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9jb21tb24vcmVsb3B0aW9ucy5jCkBAIC0y MjIsNiArMjIyLDE2IEBAIHN0YXRpYyByZWxvcHRfaW50IGludFJlbE9wdHNbXSA9CiAJCX0sCiAJ CVNQR0lTVF9ERUZBVUxUX0ZJTExGQUNUT1IsIFNQR0lTVF9NSU5fRklMTEZBQ1RPUiwgMTAwCiAJ fSwKKwl7CisJCXsKKwkJCSJwYXJhbGxlbF9hdXRvdmFjdXVtX3dvcmtlcnMiLAorCQkJIk1heGlt dW0gbnVtYmVyIG9mIHBhcmFsbGVsIGF1dG92YWN1dW0gd29ya2VycyB0aGF0IGNhbiBiZSB0YWtl biBmcm9tIGJnd29ya2VycyBwb29sIGZvciBwcm9jZXNzaW5nIHRoaXMgdGFibGUuICIKKwkJCSJJ ZiB2YWx1ZSBpcyAwIHRoZW4gcGFyYWxsZWwgZGVncmVlIHdpbGwgY29tcHV0ZWQgYmFzZWQgb24g bnVtYmVyIG9mIGluZGV4ZXMuIiwKKwkJCVJFTE9QVF9LSU5EX0hFQVAsCisJCQlTaGFyZVVwZGF0 ZUV4Y2x1c2l2ZUxvY2sKKwkJfSwKKwkJLTEsIC0xLCAxMDI0CisJfSwKIAl7CiAJCXsKIAkJCSJh dXRvdmFjdXVtX3ZhY3V1bV90aHJlc2hvbGQiLApAQCAtMTg3Miw2ICsxODgyLDggQEAgZGVmYXVs dF9yZWxvcHRpb25zKERhdHVtIHJlbG9wdGlvbnMsIGJvb2wgdmFsaWRhdGUsIHJlbG9wdF9raW5k IGtpbmQpCiAJCXsiZmlsbGZhY3RvciIsIFJFTE9QVF9UWVBFX0lOVCwgb2Zmc2V0b2YoU3RkUmRP cHRpb25zLCBmaWxsZmFjdG9yKX0sCiAJCXsiYXV0b3ZhY3V1bV9lbmFibGVkIiwgUkVMT1BUX1RZ UEVfQk9PTCwKIAkJb2Zmc2V0b2YoU3RkUmRPcHRpb25zLCBhdXRvdmFjdXVtKSArIG9mZnNldG9m KEF1dG9WYWNPcHRzLCBlbmFibGVkKX0sCisJCXsicGFyYWxsZWxfYXV0b3ZhY3V1bV93b3JrZXJz IiwgUkVMT1BUX1RZUEVfSU5ULAorCQlvZmZzZXRvZihTdGRSZE9wdGlvbnMsIGF1dG92YWN1dW0p ICsgb2Zmc2V0b2YoQXV0b1ZhY09wdHMsIHBhcmFsbGVsX2F1dG92YWN1dW1fd29ya2Vycyl9LAog CQl7ImF1dG92YWN1dW1fdmFjdXVtX3RocmVzaG9sZCIsIFJFTE9QVF9UWVBFX0lOVCwKIAkJb2Zm c2V0b2YoU3RkUmRPcHRpb25zLCBhdXRvdmFjdXVtKSArIG9mZnNldG9mKEF1dG9WYWNPcHRzLCB2 YWN1dW1fdGhyZXNob2xkKX0sCiAJCXsiYXV0b3ZhY3V1bV92YWN1dW1fbWF4X3RocmVzaG9sZCIs IFJFTE9QVF9UWVBFX0lOVCwKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL3Zh Y3V1bWxhenkuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL3ZhY3V1bWxhenkuYwppbmRleCAx NDAzNmMyN2U4Ny4uN2UwYWUwMTg0YWEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9o ZWFwL3ZhY3V1bWxhenkuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC92YWN1dW1sYXp5 LmMKQEAgLTM0NzcsNiArMzQ3NywxMCBAQCBkZWFkX2l0ZW1zX2FsbG9jKExWUmVsU3RhdGUgKnZh Y3JlbCwgaW50IG53b3JrZXJzKQogCQlhdXRvdmFjdXVtX3dvcmtfbWVtICE9IC0xID8KIAkJYXV0 b3ZhY3V1bV93b3JrX21lbSA6IG1haW50ZW5hbmNlX3dvcmtfbWVtOwogCisJaW50CQkJZWxldmVs ID0gQW1BdXRvVmFjdXVtV29ya2VyUHJvY2VzcygpIHx8CisJCXZhY3JlbC0+dmVyYm9zZSA/CisJ CUlORk8gOiBERUJVRzI7CisKIAkvKgogCSAqIEluaXRpYWxpemUgc3RhdGUgZm9yIGEgcGFyYWxs ZWwgdmFjdXVtLiAgQXMgb2Ygbm93LCBvbmx5IG9uZSB3b3JrZXIgY2FuCiAJICogYmUgdXNlZCBm b3IgYW4gaW5kZXgsIHNvIHdlIGludm9rZSBwYXJhbGxlbGlzbSBvbmx5IGlmIHRoZXJlIGFyZSBh dApAQCAtMzUwMyw3ICszNTA3LDcgQEAgZGVhZF9pdGVtc19hbGxvYyhMVlJlbFN0YXRlICp2YWNy ZWwsIGludCBud29ya2VycykKIAkJCXZhY3JlbC0+cHZzID0gcGFyYWxsZWxfdmFjdXVtX2luaXQo dmFjcmVsLT5yZWwsIHZhY3JlbC0+aW5kcmVscywKIAkJCQkJCQkJCQkJICAgdmFjcmVsLT5uaW5k ZXhlcywgbndvcmtlcnMsCiAJCQkJCQkJCQkJCSAgIHZhY193b3JrX21lbSwKLQkJCQkJCQkJCQkJ ICAgdmFjcmVsLT52ZXJib3NlID8gSU5GTyA6IERFQlVHMiwKKwkJCQkJCQkJCQkJICAgZWxldmVs LAogCQkJCQkJCQkJCQkgICB2YWNyZWwtPmJzdHJhdGVneSk7CiAKIAkJLyoKZGlmZiAtLWdpdCBh L3NyYy9iYWNrZW5kL2NvbW1hbmRzL3ZhY3V1bXBhcmFsbGVsLmMgYi9zcmMvYmFja2VuZC9jb21t YW5kcy92YWN1dW1wYXJhbGxlbC5jCmluZGV4IDBmZWVhMWQzMGVjLi42ZWM2MTBlMjllNCAxMDA2 NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvdmFjdXVtcGFyYWxsZWwuYworKysgYi9zcmMv YmFja2VuZC9jb21tYW5kcy92YWN1dW1wYXJhbGxlbC5jCkBAIC0xLDcgKzEsOSBAQAogLyotLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tCiAgKgogICogdmFjdXVtcGFyYWxsZWwuYwotICoJICBTdXBwb3J0IHJvdXRp bmVzIGZvciBwYXJhbGxlbCB2YWN1dW0gZXhlY3V0aW9uLgorICoJICBTdXBwb3J0IHJvdXRpbmVz IGZvciBwYXJhbGxlbCB2YWN1dW0gYW5kIGF1dG92YWN1dW0gZXhlY3V0aW9uLiBJbiB0aGUKKyAq CSAgZnV0dXJlIGNvbW1lbnRzLCB0aGUgd29yZCAidmFjdXVtIiB3aWxsIHJlZmVyIHRvIGJvdGgg dmFjdXVtIGFuZAorICoJICBhdXRvdmFjdXVtLgogICoKICAqIFRoaXMgZmlsZSBjb250YWlucyBy b3V0aW5lcyB0aGF0IGFyZSBpbnRlbmRlZCB0byBzdXBwb3J0IHNldHRpbmcgdXAsIHVzaW5nLAog ICogYW5kIHRlYXJpbmcgZG93biBhIFBhcmFsbGVsVmFjdXVtU3RhdGUuCkBAIC0zNCw2ICszNiw3 IEBACiAjaW5jbHVkZSAiZXhlY3V0b3IvaW5zdHJ1bWVudC5oIgogI2luY2x1ZGUgIm9wdGltaXpl ci9wYXRocy5oIgogI2luY2x1ZGUgInBnc3RhdC5oIgorI2luY2x1ZGUgInBvc3RtYXN0ZXIvYXV0 b3ZhY3V1bS5oIgogI2luY2x1ZGUgInN0b3JhZ2UvYnVmbWdyLmgiCiAjaW5jbHVkZSAidGNvcC90 Y29wcHJvdC5oIgogI2luY2x1ZGUgInV0aWxzL2xzeXNjYWNoZS5oIgpAQCAtMzcxLDEwICszNzQs MTIgQEAgcGFyYWxsZWxfdmFjdXVtX2luaXQoUmVsYXRpb24gcmVsLCBSZWxhdGlvbiAqaW5kcmVs cywgaW50IG5pbmRleGVzLAogCXNoYXJlZC0+cmVsaWQgPSBSZWxhdGlvbkdldFJlbGlkKHJlbCk7 CiAJc2hhcmVkLT5lbGV2ZWwgPSBlbGV2ZWw7CiAJc2hhcmVkLT5xdWVyeWlkID0gcGdzdGF0X2dl dF9teV9xdWVyeV9pZCgpOworCiAJc2hhcmVkLT5tYWludGVuYW5jZV93b3JrX21lbV93b3JrZXIg PQogCQkobmluZGV4ZXNfbXdtID4gMCkgPwotCQltYWludGVuYW5jZV93b3JrX21lbSAvIE1pbihw YXJhbGxlbF93b3JrZXJzLCBuaW5kZXhlc19td20pIDoKLQkJbWFpbnRlbmFuY2Vfd29ya19tZW07 CisJCXZhY193b3JrX21lbSAvIE1pbihwYXJhbGxlbF93b3JrZXJzLCBuaW5kZXhlc19td20pIDoK KwkJdmFjX3dvcmtfbWVtOworCiAJc2hhcmVkLT5kZWFkX2l0ZW1zX2luZm8ubWF4X2J5dGVzID0g dmFjX3dvcmtfbWVtICogKHNpemVfdCkgMTAyNDsKIAogCS8qIFByZXBhcmUgRFNBIHNwYWNlIGZv ciBkZWFkIGl0ZW1zICovCkBAIC00MzUsNiArNDQwLDggQEAgcGFyYWxsZWxfdmFjdXVtX2luaXQo UmVsYXRpb24gcmVsLCBSZWxhdGlvbiAqaW5kcmVscywgaW50IG5pbmRleGVzLAogdm9pZAogcGFy YWxsZWxfdmFjdXVtX2VuZChQYXJhbGxlbFZhY3V1bVN0YXRlICpwdnMsIEluZGV4QnVsa0RlbGV0 ZVJlc3VsdCAqKmlzdGF0cykKIHsKKwlpbnQgbmxhdW5jaGVkX3dvcmtlcnM7CisKIAlBc3NlcnQo IUlzUGFyYWxsZWxXb3JrZXIoKSk7CiAKIAkvKiBDb3B5IHRoZSB1cGRhdGVkIHN0YXRpc3RpY3Mg Ki8KQEAgLTQ1Myw3ICs0NjAsMTMgQEAgcGFyYWxsZWxfdmFjdXVtX2VuZChQYXJhbGxlbFZhY3V1 bVN0YXRlICpwdnMsIEluZGV4QnVsa0RlbGV0ZVJlc3VsdCAqKmlzdGF0cykKIAogCVRpZFN0b3Jl RGVzdHJveShwdnMtPmRlYWRfaXRlbXMpOwogCisJbmxhdW5jaGVkX3dvcmtlcnMgPSBwdnMtPnBj eHQtPm53b3JrZXJzX2xhdW5jaGVkOyAvKiByZW1lbWJlciB0aGlzIHZhbHVlICovCiAJRGVzdHJv eVBhcmFsbGVsQ29udGV4dChwdnMtPnBjeHQpOworCisJLyogUmVsZWFzZSBhbGwgbGF1bmNoZWQg KGkuZS4gcmVzZXJ2ZWQpIHBhcmFsbGVsIGF1dG92YWN1dW0gd29ya2Vycy4gKi8KKwlpZiAoQW1B dXRvVmFjdXVtV29ya2VyUHJvY2VzcygpKQorCQlBdXRvVmFjdXVtUmVsZWFzZVBhcmFsbGVsV29y a2VycyhubGF1bmNoZWRfd29ya2Vycyk7CisKIAlFeGl0UGFyYWxsZWxNb2RlKCk7CiAKIAlwZnJl ZShwdnMtPndpbGxfcGFyYWxsZWxfdmFjdXVtKTsKQEAgLTU1MywxMiArNTY2LDE3IEBAIHBhcmFs bGVsX3ZhY3V1bV9jb21wdXRlX3dvcmtlcnMoUmVsYXRpb24gKmluZHJlbHMsIGludCBuaW5kZXhl cywgaW50IG5yZXF1ZXN0ZWQsCiAJaW50CQkJbmluZGV4ZXNfcGFyYWxsZWxfYnVsa2RlbCA9IDA7 CiAJaW50CQkJbmluZGV4ZXNfcGFyYWxsZWxfY2xlYW51cCA9IDA7CiAJaW50CQkJcGFyYWxsZWxf d29ya2VyczsKKwlpbnQJCQltYXhfcGFyYWxsZWxfd29ya2VyczsKKworCW1heF9wYXJhbGxlbF93 b3JrZXJzID0gQW1BdXRvVmFjdXVtV29ya2VyUHJvY2VzcygpID8KKwkJYXV0b3ZhY3V1bV9tYXhf cGFyYWxsZWxfd29ya2VycyA6CisJCW1heF9wYXJhbGxlbF9tYWludGVuYW5jZV93b3JrZXJzOwog CiAJLyoKIAkgKiBXZSBkb24ndCBhbGxvdyBwZXJmb3JtaW5nIHBhcmFsbGVsIG9wZXJhdGlvbiBp biBzdGFuZGFsb25lIGJhY2tlbmQgb3IKIAkgKiB3aGVuIHBhcmFsbGVsaXNtIGlzIGRpc2FibGVk LgogCSAqLwotCWlmICghSXNVbmRlclBvc3RtYXN0ZXIgfHwgbWF4X3BhcmFsbGVsX21haW50ZW5h bmNlX3dvcmtlcnMgPT0gMCkKKwlpZiAoIUlzVW5kZXJQb3N0bWFzdGVyIHx8IG1heF9wYXJhbGxl bF93b3JrZXJzID09IDApCiAJCXJldHVybiAwOwogCiAJLyoKQEAgLTU5Nyw4ICs2MTUsOCBAQCBw YXJhbGxlbF92YWN1dW1fY29tcHV0ZV93b3JrZXJzKFJlbGF0aW9uICppbmRyZWxzLCBpbnQgbmlu ZGV4ZXMsIGludCBucmVxdWVzdGVkLAogCXBhcmFsbGVsX3dvcmtlcnMgPSAobnJlcXVlc3RlZCA+ IDApID8KIAkJTWluKG5yZXF1ZXN0ZWQsIG5pbmRleGVzX3BhcmFsbGVsKSA6IG5pbmRleGVzX3Bh cmFsbGVsOwogCi0JLyogQ2FwIGJ5IG1heF9wYXJhbGxlbF9tYWludGVuYW5jZV93b3JrZXJzICov Ci0JcGFyYWxsZWxfd29ya2VycyA9IE1pbihwYXJhbGxlbF93b3JrZXJzLCBtYXhfcGFyYWxsZWxf bWFpbnRlbmFuY2Vfd29ya2Vycyk7CisJLyogQ2FwIGJ5IEdVQyB2YXJpYWJsZSAqLworCXBhcmFs bGVsX3dvcmtlcnMgPSBNaW4ocGFyYWxsZWxfd29ya2VycywgbWF4X3BhcmFsbGVsX3dvcmtlcnMp OwogCiAJcmV0dXJuIHBhcmFsbGVsX3dvcmtlcnM7CiB9CkBAIC02NDYsNiArNjY0LDEzIEBAIHBh cmFsbGVsX3ZhY3V1bV9wcm9jZXNzX2FsbF9pbmRleGVzKFBhcmFsbGVsVmFjdXVtU3RhdGUgKnB2 cywgaW50IG51bV9pbmRleF9zY2FuCiAJICovCiAJbndvcmtlcnMgPSBNaW4obndvcmtlcnMsIHB2 cy0+cGN4dC0+bndvcmtlcnMpOwogCisJLyoKKwkgKiBBbHNvIHJlc2VydmUgd29ya2VycyBpbiBh dXRvdmFjdXVtIGdsb2JhbCBzdGF0ZS4gTm90ZSwgdGhhdCB3ZSBtYXkgYmUKKwkgKiBnaXZlbiBm ZXdlciB3b3JrZXJzIHRoYW4gd2UgcmVxdWVzdGVkLgorCSAqLworCWlmIChBbUF1dG9WYWN1dW1X b3JrZXJQcm9jZXNzKCkgJiYgbndvcmtlcnMgPiAwKQorCQlud29ya2VycyA9IEF1dG9WYWN1dW1S ZXNlcnZlUGFyYWxsZWxXb3JrZXJzKG53b3JrZXJzKTsKKwogCS8qCiAJICogU2V0IGluZGV4IHZh Y3V1bSBzdGF0dXMgYW5kIG1hcmsgd2hldGhlciBwYXJhbGxlbCB2YWN1dW0gd29ya2VyIGNhbgog CSAqIHByb2Nlc3MgaXQuCkBAIC02OTAsNiArNzE1LDE2IEBAIHBhcmFsbGVsX3ZhY3V1bV9wcm9j ZXNzX2FsbF9pbmRleGVzKFBhcmFsbGVsVmFjdXVtU3RhdGUgKnB2cywgaW50IG51bV9pbmRleF9z Y2FuCiAKIAkJTGF1bmNoUGFyYWxsZWxXb3JrZXJzKHB2cy0+cGN4dCk7CiAKKwkJaWYgKEFtQXV0 b1ZhY3V1bVdvcmtlclByb2Nlc3MoKSAmJgorCQkJcHZzLT5wY3h0LT5ud29ya2Vyc19sYXVuY2hl ZCA8IG53b3JrZXJzKQorCQl7CisJCQkvKgorCQkJICogVGVsbCBhdXRvdmFjdXVtIHRoYXQgd2Ug Y291bGQgbm90IGxhdW5jaCBhbGwgdGhlIHByZXZpb3VzbHkKKwkJCSAqIHJlc2VydmVkIHdvcmtl cnMuCisJCQkgKi8KKwkJCUF1dG9WYWN1dW1SZWxlYXNlUGFyYWxsZWxXb3JrZXJzKG53b3JrZXJz IC0gcHZzLT5wY3h0LT5ud29ya2Vyc19sYXVuY2hlZCk7CisJCX0KKwogCQlpZiAocHZzLT5wY3h0 LT5ud29ya2Vyc19sYXVuY2hlZCA+IDApCiAJCXsKIAkJCS8qCkBAIC03MDksMTMgKzc0NCwxOSBA QCBwYXJhbGxlbF92YWN1dW1fcHJvY2Vzc19hbGxfaW5kZXhlcyhQYXJhbGxlbFZhY3V1bVN0YXRl ICpwdnMsIGludCBudW1faW5kZXhfc2NhbgogCQkJCQkoZXJybXNnKG5nZXR0ZXh0KCJsYXVuY2hl ZCAlZCBwYXJhbGxlbCB2YWN1dW0gd29ya2VyIGZvciBpbmRleCB2YWN1dW1pbmcgKHBsYW5uZWQ6 ICVkKSIsCiAJCQkJCQkJCQkgImxhdW5jaGVkICVkIHBhcmFsbGVsIHZhY3V1bSB3b3JrZXJzIGZv ciBpbmRleCB2YWN1dW1pbmcgKHBsYW5uZWQ6ICVkKSIsCiAJCQkJCQkJCQkgcHZzLT5wY3h0LT5u d29ya2Vyc19sYXVuY2hlZCksCi0JCQkJCQkJcHZzLT5wY3h0LT5ud29ya2Vyc19sYXVuY2hlZCwg bndvcmtlcnMpKSk7CisJCQkJCQkJcHZzLT5wY3h0LT5ud29ya2Vyc19sYXVuY2hlZCwgbndvcmtl cnMpLAorCQkJCQlBbUF1dG9WYWN1dW1Xb3JrZXJQcm9jZXNzKCkgPworCQkJCQkJZXJyaGludCgi d29ya2VycyB3ZXJlIGxhdW5jaGVkIGZvciBwYXJhbGxlbCBhdXRvdmFjdXVtIikgOgorCQkJCQkJ ZXJyaGludCgid29ya2VycyB3ZXJlIGxhdW5jaGVkIGZvciBwYXJhbGxlbCB2YWN1dW0iKSkpOwog CQllbHNlCiAJCQllcmVwb3J0KHB2cy0+c2hhcmVkLT5lbGV2ZWwsCiAJCQkJCShlcnJtc2cobmdl dHRleHQoImxhdW5jaGVkICVkIHBhcmFsbGVsIHZhY3V1bSB3b3JrZXIgZm9yIGluZGV4IGNsZWFu dXAgKHBsYW5uZWQ6ICVkKSIsCiAJCQkJCQkJCQkgImxhdW5jaGVkICVkIHBhcmFsbGVsIHZhY3V1 bSB3b3JrZXJzIGZvciBpbmRleCBjbGVhbnVwIChwbGFubmVkOiAlZCkiLAogCQkJCQkJCQkJIHB2 cy0+cGN4dC0+bndvcmtlcnNfbGF1bmNoZWQpLAotCQkJCQkJCXB2cy0+cGN4dC0+bndvcmtlcnNf bGF1bmNoZWQsIG53b3JrZXJzKSkpOworCQkJCQkJCXB2cy0+cGN4dC0+bndvcmtlcnNfbGF1bmNo ZWQsIG53b3JrZXJzKSwKKwkJCQkJQW1BdXRvVmFjdXVtV29ya2VyUHJvY2VzcygpID8KKwkJCQkJ CWVycmhpbnQoIndvcmtlcnMgd2VyZSBsYXVuY2hlZCBmb3IgcGFyYWxsZWwgYXV0b3ZhY3V1bSIp IDoKKwkJCQkJCWVycmhpbnQoIndvcmtlcnMgd2VyZSBsYXVuY2hlZCBmb3IgcGFyYWxsZWwgdmFj dXVtIikpKTsKIAl9CiAKIAkvKiBWYWN1dW0gdGhlIGluZGV4ZXMgdGhhdCBjYW4gYmUgcHJvY2Vz c2VkIGJ5IG9ubHkgbGVhZGVyIHByb2Nlc3MgKi8KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3Bv c3RtYXN0ZXIvYXV0b3ZhY3V1bS5jIGIvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9hdXRvdmFjdXVt LmMKaW5kZXggOTQ3NDA5NWYyNzEuLjk4NjA5YWM4ZjhmIDEwMDY0NAotLS0gYS9zcmMvYmFja2Vu ZC9wb3N0bWFzdGVyL2F1dG92YWN1dW0uYworKysgYi9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL2F1 dG92YWN1dW0uYwpAQCAtMjg1LDYgKzI4NSw3IEBAIHR5cGVkZWYgc3RydWN0IEF1dG9WYWN1dW1X b3JrSXRlbQogICogYXZfd29ya0l0ZW1zCQl3b3JrIGl0ZW0gYXJyYXkKICAqIGF2X253b3JrZXJz Rm9yQmFsYW5jZSB0aGUgbnVtYmVyIG9mIGF1dG92YWN1dW0gd29ya2VycyB0byB1c2Ugd2hlbgog ICogCQkJCQljYWxjdWxhdGluZyB0aGUgcGVyIHdvcmtlciBjb3N0IGxpbWl0CisgKiBhdl9mcmVl UGFyYWxsZWxXb3JrZXJzIHRoZSBudW1iZXIgb2YgZnJlZSBwYXJhbGxlbCBhdXRvdmFjdXVtIHdv cmtlcnMKICAqCiAgKiBUaGlzIHN0cnVjdCBpcyBwcm90ZWN0ZWQgYnkgQXV0b3ZhY3V1bUxvY2ss IGV4Y2VwdCBmb3IgYXZfc2lnbmFsIGFuZCBwYXJ0cwogICogb2YgdGhlIHdvcmtlciBsaXN0IChz ZWUgYWJvdmUpLgpAQCAtMjk5LDYgKzMwMCw3IEBAIHR5cGVkZWYgc3RydWN0CiAJV29ya2VySW5m bwlhdl9zdGFydGluZ1dvcmtlcjsKIAlBdXRvVmFjdXVtV29ya0l0ZW0gYXZfd29ya0l0ZW1zW05V TV9XT1JLSVRFTVNdOwogCXBnX2F0b21pY191aW50MzIgYXZfbndvcmtlcnNGb3JCYWxhbmNlOwor CXVpbnQzMiBhdl9mcmVlUGFyYWxsZWxXb3JrZXJzOwogfSBBdXRvVmFjdXVtU2htZW1TdHJ1Y3Q7 CiAKIHN0YXRpYyBBdXRvVmFjdXVtU2htZW1TdHJ1Y3QgKkF1dG9WYWN1dW1TaG1lbTsKQEAgLTM1 NCw2ICszNTYsNyBAQCBzdGF0aWMgdm9pZCBhdXRvdmFjX3JlcG9ydF93b3JraXRlbShBdXRvVmFj dXVtV29ya0l0ZW0gKndvcmtpdGVtLAogc3RhdGljIHZvaWQgYXZsX3NpZ3VzcjJfaGFuZGxlcihT SUdOQUxfQVJHUyk7CiBzdGF0aWMgYm9vbCBhdl93b3JrZXJfYXZhaWxhYmxlKHZvaWQpOwogc3Rh dGljIHZvaWQgY2hlY2tfYXZfd29ya2VyX2d1Y3Modm9pZCk7CitzdGF0aWMgdm9pZCBjaGVja19w YXJhbGxlbF9hdl9ndWNzKGludCBwcmV2X21heF9wYXJhbGxlbF93b3JrZXJzKTsKIAogCiAKQEAg LTc1Myw3ICs3NTYsOSBAQCBQcm9jZXNzQXV0b1ZhY0xhdW5jaGVySW50ZXJydXB0cyh2b2lkKQog CWlmIChDb25maWdSZWxvYWRQZW5kaW5nKQogCXsKIAkJaW50CQkJYXV0b3ZhY3V1bV9tYXhfd29y a2Vyc19wcmV2ID0gYXV0b3ZhY3V1bV9tYXhfd29ya2VyczsKKwkJaW50CQkJYXV0b3ZhY3V1bV9t YXhfcGFyYWxsZWxfd29ya2Vyc19wcmV2OwogCisJCWF1dG92YWN1dW1fbWF4X3BhcmFsbGVsX3dv cmtlcnNfcHJldiA9IGF1dG92YWN1dW1fbWF4X3BhcmFsbGVsX3dvcmtlcnM7CiAJCUNvbmZpZ1Jl bG9hZFBlbmRpbmcgPSBmYWxzZTsKIAkJUHJvY2Vzc0NvbmZpZ0ZpbGUoUEdDX1NJR0hVUCk7CiAK QEAgLTc2OSw2ICs3NzQsMTQgQEAgUHJvY2Vzc0F1dG9WYWNMYXVuY2hlckludGVycnVwdHModm9p ZCkKIAkJaWYgKGF1dG92YWN1dW1fbWF4X3dvcmtlcnNfcHJldiAhPSBhdXRvdmFjdXVtX21heF93 b3JrZXJzKQogCQkJY2hlY2tfYXZfd29ya2VyX2d1Y3MoKTsKIAorCQkvKgorCQkgKiBJZiBhdXRv dmFjdXVtX21heF9wYXJhbGxlbF93b3JrZXJzIGNoYW5nZWQsIHdlIG11c3QgdGFrZSBjYXJlIG9m CisJCSAqIHRoZSBjb3JyZWN0IHZhbHVlIG9mIGF2YWlsYWJsZSBwYXJhbGxlbCBhdXRvdmFjdXVt IHdvcmtlcnMgaW4gc2htZW0uCisJCSAqLworCQlpZiAoYXV0b3ZhY3V1bV9tYXhfcGFyYWxsZWxf d29ya2Vyc19wcmV2ICE9CisJCQlhdXRvdmFjdXVtX21heF9wYXJhbGxlbF93b3JrZXJzKQorCQkJ Y2hlY2tfcGFyYWxsZWxfYXZfZ3VjcyhhdXRvdmFjdXVtX21heF9wYXJhbGxlbF93b3JrZXJzX3By ZXYpOworCiAJCS8qIHJlYnVpbGQgdGhlIGxpc3QgaW4gY2FzZSB0aGUgbmFwdGltZSBjaGFuZ2Vk ICovCiAJCXJlYnVpbGRfZGF0YWJhc2VfbGlzdChJbnZhbGlkT2lkKTsKIAl9CkBAIC0yODQ3LDgg KzI4NjAsMTIgQEAgdGFibGVfcmVjaGVja19hdXRvdmFjKE9pZCByZWxpZCwgSFRBQiAqdGFibGVf dG9hc3RfbWFwLAogCQkgKi8KIAkJdGFiLT5hdF9wYXJhbXMuaW5kZXhfY2xlYW51cCA9IFZBQ09Q VFZBTFVFX1VOU1BFQ0lGSUVEOwogCQl0YWItPmF0X3BhcmFtcy50cnVuY2F0ZSA9IFZBQ09QVFZB TFVFX1VOU1BFQ0lGSUVEOwotCQkvKiBBcyBvZiBub3csIHdlIGRvbid0IHN1cHBvcnQgcGFyYWxs ZWwgdmFjdXVtIGZvciBhdXRvdmFjdXVtICovCi0JCXRhYi0+YXRfcGFyYW1zLm53b3JrZXJzID0g LTE7CisKKwkJLyogRGVjaWRlIHdoZXRoZXIgd2UgbmVlZCB0byBwcm9jZXNzIGluZGV4ZXMgb2Yg dGFibGUgaW4gcGFyYWxsZWwuICovCisJCXRhYi0+YXRfcGFyYW1zLm53b3JrZXJzID0gYXZvcHRz CisJCQk/IGF2b3B0cy0+cGFyYWxsZWxfYXV0b3ZhY3V1bV93b3JrZXJzCisJCQk6IC0xOworCiAJ CXRhYi0+YXRfcGFyYW1zLmZyZWV6ZV9taW5fYWdlID0gZnJlZXplX21pbl9hZ2U7CiAJCXRhYi0+ YXRfcGFyYW1zLmZyZWV6ZV90YWJsZV9hZ2UgPSBmcmVlemVfdGFibGVfYWdlOwogCQl0YWItPmF0 X3BhcmFtcy5tdWx0aXhhY3RfZnJlZXplX21pbl9hZ2UgPSBtdWx0aXhhY3RfZnJlZXplX21pbl9h Z2U7CkBAIC0zMzI5LDYgKzMzNDYsNjQgQEAgQXV0b1ZhY3V1bVJlcXVlc3RXb3JrKEF1dG9WYWN1 dW1Xb3JrSXRlbVR5cGUgdHlwZSwgT2lkIHJlbGF0aW9uSWQsCiAJcmV0dXJuIHJlc3VsdDsKIH0K IAorLyoKKyAqIEluIG9yZGVyIHRvIG1lZXQgdGhlICdhdXRvdmFjdXVtX21heF9wYXJhbGxlbF93 b3JrZXJzJyBsaW1pdCwgbGVhZGVyIHdvcmtlcgorICogbXVzdCBjYWxsIHRoaXMgZnVuY3Rpb24u IEl0IHJldHVybnMgdGhlIG51bWJlciBvZiBwYXJhbGxlbCB3b3JrZXJzIHRoYXQKKyAqIGFjdHVh bGx5IGNhbiBiZSBsYXVuY2hlZCBhbmQgcmVzZXJ2ZXMgKGlmIGFueSkgdGhlc2Ugd29ya2VycyBp biBnbG9iYWwKKyAqIGF1dG92YWN1dW0gc3RhdGUuCisgKgorICogTk9URTogV2Ugd2lsbCB0cnkg dG8gcHJvdmlkZSBhcyBtYW55IHdvcmtlcnMgYXMgcmVxdWVzdGVkLCBldmVuIGlmIGNhbGxlcgor ICogd2lsbCBvY2N1cHkgYWxsIGF2YWlsYWJsZSB3b3JrZXJzLgorICovCitpbnQKK0F1dG9WYWN1 dW1SZXNlcnZlUGFyYWxsZWxXb3JrZXJzKGludCBud29ya2VycykKK3sKKwlpbnQgY2FuX2xhdW5j aDsKKworCS8qIE9ubHkgbGVhZGVyIHdvcmtlciBjYW4gY2FsbCB0aGlzIGZ1bmN0aW9uLiAqLwor CUFzc2VydChBbUF1dG9WYWN1dW1Xb3JrZXJQcm9jZXNzKCkgJiYgIUlzUGFyYWxsZWxXb3JrZXIo KSk7CisKKwlMV0xvY2tBY3F1aXJlKEF1dG92YWN1dW1Mb2NrLCBMV19FWENMVVNJVkUpOworCisJ LyogUHJvdmlkZSBhcyBtYW55IHdvcmtlcnMgYXMgd2UgY2FuLiAqLworCWNhbl9sYXVuY2ggPSBN aW4oQXV0b1ZhY3V1bVNobWVtLT5hdl9mcmVlUGFyYWxsZWxXb3JrZXJzLCBud29ya2Vycyk7CisJ QXV0b1ZhY3V1bVNobWVtLT5hdl9mcmVlUGFyYWxsZWxXb3JrZXJzIC09IG53b3JrZXJzOworCisJ TFdMb2NrUmVsZWFzZShBdXRvdmFjdXVtTG9jayk7CisJcmV0dXJuIGNhbl9sYXVuY2g7Cit9CisK Ky8qCisgKiBXaGVuIHBhcmFsbGVsIGF1dG92YWN1dW0gd29ya2VyIGRpZSwgbGVhZGVyIHdvcmtl ciBtdXN0IGNhbGwgdGhpcyBmdW5jdGlvbgorICogaW4gb3JkZXIgdG8gcmVmcmVzaCBnbG9iYWwg YXV0b3ZhY3V1bSBzdGF0ZS4gVGh1cywgb3RoZXIgbGVhZGVycyB3aWxsIGJlIGFibGUKKyAqIHRv IHVzZSB0aGVzZSB3b3JrZXJzLgorICoKKyAqICdud29ya2VycycgLSBob3cgbWFueSB3b3JrZXJz IGNhbGxlciB3YW50cyB0byByZWxlYXNlLgorICovCit2b2lkCitBdXRvVmFjdXVtUmVsZWFzZVBh cmFsbGVsV29ya2VycyhpbnQgbndvcmtlcnMpCit7CisJLyogT25seSBsZWFkZXIgd29ya2VyIGNh biBjYWxsIHRoaXMgZnVuY3Rpb24uICovCisJQXNzZXJ0KEFtQXV0b1ZhY3V1bVdvcmtlclByb2Nl c3MoKSAmJiAhSXNQYXJhbGxlbFdvcmtlcigpKTsKKworCUxXTG9ja0FjcXVpcmUoQXV0b3ZhY3V1 bUxvY2ssIExXX0VYQ0xVU0lWRSk7CisJQXV0b1ZhY3V1bVNobWVtLT5hdl9mcmVlUGFyYWxsZWxX b3JrZXJzICs9IG53b3JrZXJzOworCisJLyoKKwkgKiBJZiBhdXRvdmFjdXVtX21heF9wYXJhbGxl bF93b3JrZXJzIHZhcmlhYmxlIHdhcyByZWR1Y2VkIGR1cmluZyBwYXJhbGxlbAorCSAqIGF1dG92 YWN1dW0gZXhlY3V0aW9uLCB3ZSBtdXN0IGNhcCBhdmFpbGFibGUgd29ya2VycyBudW1iZXIgYnkg aXRzIG5ldworCSAqIHZhbHVlLgorCSAqLworCWlmIChBdXRvVmFjdXVtU2htZW0tPmF2X2ZyZWVQ YXJhbGxlbFdvcmtlcnMgPgorCQlhdXRvdmFjdXVtX21heF9wYXJhbGxlbF93b3JrZXJzKQorCXsK KwkJQXV0b1ZhY3V1bVNobWVtLT5hdl9mcmVlUGFyYWxsZWxXb3JrZXJzID0KKwkJCWF1dG92YWN1 dW1fbWF4X3BhcmFsbGVsX3dvcmtlcnM7CisJfQorCisJTFdMb2NrUmVsZWFzZShBdXRvdmFjdXVt TG9jayk7Cit9CisKIC8qCiAgKiBhdXRvdmFjX2luaXQKICAqCQlUaGlzIGlzIGNhbGxlZCBhdCBw b3N0bWFzdGVyIGluaXRpYWxpemF0aW9uLgpAQCAtMzM4OSw2ICszNDY0LDggQEAgQXV0b1ZhY3V1 bVNobWVtSW5pdCh2b2lkKQogCQlBc3NlcnQoIWZvdW5kKTsKIAogCQlBdXRvVmFjdXVtU2htZW0t PmF2X2xhdW5jaGVycGlkID0gMDsKKwkJQXV0b1ZhY3V1bVNobWVtLT5hdl9mcmVlUGFyYWxsZWxX b3JrZXJzID0KKwkJCWF1dG92YWN1dW1fbWF4X3BhcmFsbGVsX3dvcmtlcnM7CiAJCWRjbGlzdF9p bml0KCZBdXRvVmFjdXVtU2htZW0tPmF2X2ZyZWVXb3JrZXJzKTsKIAkJZGxpc3RfaW5pdCgmQXV0 b1ZhY3V1bVNobWVtLT5hdl9ydW5uaW5nV29ya2Vycyk7CiAJCUF1dG9WYWN1dW1TaG1lbS0+YXZf c3RhcnRpbmdXb3JrZXIgPSBOVUxMOwpAQCAtMzQzOSw2ICszNTE2LDE1IEBAIGNoZWNrX2F1dG92 YWN1dW1fd29ya19tZW0oaW50ICpuZXd2YWwsIHZvaWQgKipleHRyYSwgR3VjU291cmNlIHNvdXJj ZSkKIAlyZXR1cm4gdHJ1ZTsKIH0KIAorYm9vbAorY2hlY2tfYXV0b3ZhY3V1bV9tYXhfcGFyYWxs ZWxfd29ya2VycyhpbnQgKm5ld3ZhbCwgdm9pZCAqKmV4dHJhLAorCQkJCQkJCQkJICBHdWNTb3Vy Y2Ugc291cmNlKQoreworCWlmICgqbmV3dmFsID49IG1heF93b3JrZXJfcHJvY2Vzc2VzKQorCQly ZXR1cm4gZmFsc2U7CisJcmV0dXJuIHRydWU7Cit9CisKIC8qCiAgKiBSZXR1cm5zIHdoZXRoZXIg dGhlcmUgaXMgYSBmcmVlIGF1dG92YWN1dW0gd29ya2VyIHNsb3QgYXZhaWxhYmxlLgogICovCkBA IC0zNDcwLDMgKzM1NTYsNDggQEAgY2hlY2tfYXZfd29ya2VyX2d1Y3Modm9pZCkKIAkJCQkgZXJy ZGV0YWlsKCJUaGUgc2VydmVyIHdpbGwgb25seSBzdGFydCB1cCB0byBcImF1dG92YWN1dW1fd29y a2VyX3Nsb3RzXCIgKCVkKSBhdXRvdmFjdXVtIHdvcmtlcnMgYXQgYSBnaXZlbiB0aW1lLiIsCiAJ CQkJCQkgICBhdXRvdmFjdXVtX3dvcmtlcl9zbG90cykpKTsKIH0KKworLyoKKyAqIE1ha2Ugc3Vy ZSB0aGF0IG51bWJlciBvZiBhdmFpbGFibGUgcGFyYWxsZWwgd29ya2VycyBjb3JyZXNwb25kcyB0 byB0aGUKKyAqIGF1dG92YWN1dW1fbWF4X3BhcmFsbGVsX3dvcmtlcnMgcGFyYW1ldGVyIChhZnRl ciBpdCB3YXMgY2hhbmdlZCkuCisgKi8KK3N0YXRpYyB2b2lkCitjaGVja19wYXJhbGxlbF9hdl9n dWNzKGludCBwcmV2X21heF9wYXJhbGxlbF93b3JrZXJzKQoreworCUxXTG9ja0FjcXVpcmUoQXV0 b3ZhY3V1bUxvY2ssIExXX0VYQ0xVU0lWRSk7CisKKwlpZiAoQXV0b1ZhY3V1bVNobWVtLT5hdl9m cmVlUGFyYWxsZWxXb3JrZXJzID4KKwkJYXV0b3ZhY3V1bV9tYXhfcGFyYWxsZWxfd29ya2VycykK Kwl7CisJCUFzc2VydChwcmV2X21heF9wYXJhbGxlbF93b3JrZXJzID4gYXV0b3ZhY3V1bV9tYXhf cGFyYWxsZWxfd29ya2Vycyk7CisKKwkJLyoKKwkJICogTnVtYmVyIG9mIGF2YWlsYWJsZSB3b3Jr ZXJzIG11c3Qgbm90IGV4Y2VlZCBsaW1pdC4KKwkJICoKKwkJICogTm90ZSwgdGhhdCBpZiBzb21l IHBhcmFsbGVsIGF1dG92YWN1dW0gd29ya2VycyBhcmUgcnVubmluZyBhdCB0aGlzCisJCSAqIG1v bWVudCwgYXZhaWxhYmxlIHdvcmtlcnMgbnVtYmVyIHdpbGwgbm90IGV4Y2VlZCBsaW1pdCBhZnRl cgorCQkgKiByZWxlYXNpbmcgdGhlbSAoc2VlIFBhcmFsbGVsQXV0b1ZhY3V1bVJlbGVhc2VXb3Jr ZXJzKS4KKwkJKi8KKwkJQXV0b1ZhY3V1bVNobWVtLT5hdl9mcmVlUGFyYWxsZWxXb3JrZXJzID0K KwkJCWF1dG92YWN1dW1fbWF4X3BhcmFsbGVsX3dvcmtlcnM7CisJfQorCWVsc2UgaWYgKChBdXRv VmFjdXVtU2htZW0tPmF2X2ZyZWVQYXJhbGxlbFdvcmtlcnMgPAorCQkJICBhdXRvdmFjdXVtX21h eF9wYXJhbGxlbF93b3JrZXJzKSAmJgorCQkJIChhdXRvdmFjdXVtX21heF9wYXJhbGxlbF93b3Jr ZXJzID4gcHJldl9tYXhfcGFyYWxsZWxfd29ya2VycykpCisJeworCQkvKgorCQkgKiBJZiB1c2Vy IHdhbnRzIHRvIGluY3JlYXNlIG51bWJlciBvZiBwYXJhbGxlbCBhdXRvdmFjdXVtIHdvcmtlcnMs IHdlCisJCSAqIG11c3QgaW5jcmVhc2UgbnVtYmVyIG9mIGF2YWlsYWJsZSB3b3JrZXJzIGluIHNo bWVtLgorCQkgKi8KKwkJQXV0b1ZhY3V1bVNobWVtLT5hdl9mcmVlUGFyYWxsZWxXb3JrZXJzICs9 CisJCQkoYXV0b3ZhY3V1bV9tYXhfcGFyYWxsZWxfd29ya2VycyAtIHByZXZfbWF4X3BhcmFsbGVs X3dvcmtlcnMpOworCisJCS8qCisJCSAqIE5vdGhpbmcgdG8gZG8gd2hlbiBhdXRvdmFjdXVtX21h eF9wYXJhbGxlbF93b3JrZXJzIDwKKwkJICogcHJldl9tYXhfcGFyYWxsZWxfd29ya2Vycy4gQXZh aWxhYmxlIHdvcmtlcnMgbnVtYmVyIHdpbGwgYmUgY2FwcGVkCisJCSAqIGluc2lkZSBQYXJhbGxl bEF1dG9WYWN1dW1SZWxlYXNlV29ya2Vycy4KKwkJICovCisJfQorCisJTFdMb2NrUmVsZWFzZShB dXRvdmFjdXVtTG9jayk7Cit9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9pbml0L2ds b2JhbHMuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL2luaXQvZ2xvYmFscy5jCmluZGV4IGQzMWNiNDVh MDU4Li45Nzc2NDQ5NzhjMSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvaW5pdC9nbG9i YWxzLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvaW5pdC9nbG9iYWxzLmMKQEAgLTE0Myw2ICsx NDMsNyBAQCBpbnQJCQlOQnVmZmVycyA9IDE2Mzg0OwogaW50CQkJTWF4Q29ubmVjdGlvbnMgPSAx MDA7CiBpbnQJCQltYXhfd29ya2VyX3Byb2Nlc3NlcyA9IDg7CiBpbnQJCQltYXhfcGFyYWxsZWxf d29ya2VycyA9IDg7CitpbnQgICAgICAgICBhdXRvdmFjdXVtX21heF9wYXJhbGxlbF93b3JrZXJz ID0gMDsKIGludAkJCU1heEJhY2tlbmRzID0gMDsKIAogLyogR1VDIHBhcmFtZXRlcnMgZm9yIHZh Y3V1bSAqLwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9ndWNfdGFibGVzLmMg Yi9zcmMvYmFja2VuZC91dGlscy9taXNjL2d1Y190YWJsZXMuYwppbmRleCBkMTRiMTY3OGU3Zi4u YjZhMTkyYWY4ZjggMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvZ3VjX3RhYmxl cy5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvZ3VjX3RhYmxlcy5jCkBAIC0zNjA0LDYg KzM2MDQsMTYgQEAgc3RydWN0IGNvbmZpZ19pbnQgQ29uZmlndXJlTmFtZXNJbnRbXSA9CiAJCU5V TEwsIE5VTEwsIE5VTEwKIAl9LAogCisJeworCQl7ImF1dG92YWN1dW1fbWF4X3BhcmFsbGVsX3dv cmtlcnMiLCBQR0NfU0lHSFVQLCBWQUNVVU1fQVVUT1ZBQ1VVTSwKKwkJCWdldHRleHRfbm9vcCgi TWF4aW11bSBudW1iZXIgb2YgcGFyYWxsZWwgYXV0b3ZhY3V1bSB3b3JrZXJzLCB0aGF0IGNhbiBi ZSB0YWtlbiBmcm9tIGJnd29ya2VycyBwb29sLiIpLAorCQkJZ2V0dGV4dF9ub29wKCJUaGlzIHBh cmFtZXRlciBpcyBjYXBwZWQgYnkgXCJtYXhfd29ya2VyX3Byb2Nlc3Nlc1wiIChub3QgYnkgXCJh dXRvdmFjdXVtX21heF93b3JrZXJzXCIhKS4iKSwKKwkJfSwKKwkJJmF1dG92YWN1dW1fbWF4X3Bh cmFsbGVsX3dvcmtlcnMsCisJCTAsIDAsIE1BWF9CQUNLRU5EUywKKwkJY2hlY2tfYXV0b3ZhY3V1 bV9tYXhfcGFyYWxsZWxfd29ya2VycywgTlVMTCwgTlVMTAorCX0sCisKIAl7CiAJCXsibWF4X3Bh cmFsbGVsX21haW50ZW5hbmNlX3dvcmtlcnMiLCBQR0NfVVNFUlNFVCwgUkVTT1VSQ0VTX1dPUktF Ul9QUk9DRVNTRVMsCiAJCQlnZXR0ZXh0X25vb3AoIlNldHMgdGhlIG1heGltdW0gbnVtYmVyIG9m IHBhcmFsbGVsIHByb2Nlc3NlcyBwZXIgbWFpbnRlbmFuY2Ugb3BlcmF0aW9uLiIpLApkaWZmIC0t Z2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9wb3N0Z3Jlc3FsLmNvbmYuc2FtcGxlIGIvc3Jj L2JhY2tlbmQvdXRpbHMvbWlzYy9wb3N0Z3Jlc3FsLmNvbmYuc2FtcGxlCmluZGV4IGE5ZDgyOTM0 NzRhLi5iYmY1MzA3MDAwZiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9wb3N0 Z3Jlc3FsLmNvbmYuc2FtcGxlCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvcG9zdGdyZXNx bC5jb25mLnNhbXBsZQpAQCAtNjgzLDYgKzY4Myw3IEBACiBhdXRvdmFjdXVtX3dvcmtlcl9zbG90 cyA9IDE2CSMgYXV0b3ZhY3V1bSB3b3JrZXIgc2xvdHMgdG8gYWxsb2NhdGUKIAkJCQkJIyAoY2hh bmdlIHJlcXVpcmVzIHJlc3RhcnQpCiAjYXV0b3ZhY3V1bV9tYXhfd29ya2VycyA9IDMJCSMgbWF4 IG51bWJlciBvZiBhdXRvdmFjdXVtIHN1YnByb2Nlc3NlcworI2F1dG92YWN1dW1fbWF4X3BhcmFs bGVsX3dvcmtlcnMgPSAwCSMgZGlzYWJsZWQgYnkgZGVmYXVsdCBhbmQgbGltaXRlZCBieSBtYXhf d29ya2VyX3Byb2Nlc3NlcwogI2F1dG92YWN1dW1fbmFwdGltZSA9IDFtaW4JCSMgdGltZSBiZXR3 ZWVuIGF1dG92YWN1dW0gcnVucwogI2F1dG92YWN1dW1fdmFjdXVtX3RocmVzaG9sZCA9IDUwCSMg bWluIG51bWJlciBvZiByb3cgdXBkYXRlcyBiZWZvcmUKIAkJCQkJIyB2YWN1dW0KZGlmZiAtLWdp dCBhL3NyYy9pbmNsdWRlL21pc2NhZG1pbi5oIGIvc3JjL2luY2x1ZGUvbWlzY2FkbWluLmgKaW5k ZXggMWJlZjk4NDcxYzMuLjg1OTI2NDE1NjU3IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9taXNj YWRtaW4uaAorKysgYi9zcmMvaW5jbHVkZS9taXNjYWRtaW4uaApAQCAtMTc3LDYgKzE3Nyw3IEBA IGV4dGVybiBQR0RMTElNUE9SVCBpbnQgTWF4QmFja2VuZHM7CiBleHRlcm4gUEdETExJTVBPUlQg aW50IE1heENvbm5lY3Rpb25zOwogZXh0ZXJuIFBHRExMSU1QT1JUIGludCBtYXhfd29ya2VyX3By b2Nlc3NlczsKIGV4dGVybiBQR0RMTElNUE9SVCBpbnQgbWF4X3BhcmFsbGVsX3dvcmtlcnM7Citl eHRlcm4gUEdETExJTVBPUlQgaW50IGF1dG92YWN1dW1fbWF4X3BhcmFsbGVsX3dvcmtlcnM7CiAK IGV4dGVybiBQR0RMTElNUE9SVCBpbnQgY29tbWl0X3RpbWVzdGFtcF9idWZmZXJzOwogZXh0ZXJu IFBHRExMSU1QT1JUIGludCBtdWx0aXhhY3RfbWVtYmVyX2J1ZmZlcnM7CmRpZmYgLS1naXQgYS9z cmMvaW5jbHVkZS9wb3N0bWFzdGVyL2F1dG92YWN1dW0uaCBiL3NyYy9pbmNsdWRlL3Bvc3RtYXN0 ZXIvYXV0b3ZhY3V1bS5oCmluZGV4IGU4MTM1ZjQxYTFjLi44NjNkMjA2ZjJiZCAxMDA2NDQKLS0t IGEvc3JjL2luY2x1ZGUvcG9zdG1hc3Rlci9hdXRvdmFjdXVtLmgKKysrIGIvc3JjL2luY2x1ZGUv cG9zdG1hc3Rlci9hdXRvdmFjdXVtLmgKQEAgLTY0LDYgKzY0LDEwIEBAIHBnX25vcmV0dXJuIGV4 dGVybiB2b2lkIEF1dG9WYWNXb3JrZXJNYWluKGNvbnN0IHZvaWQgKnN0YXJ0dXBfZGF0YSwgc2l6 ZV90IHN0YXJ0CiBleHRlcm4gYm9vbCBBdXRvVmFjdXVtUmVxdWVzdFdvcmsoQXV0b1ZhY3V1bVdv cmtJdGVtVHlwZSB0eXBlLAogCQkJCQkJCQkgIE9pZCByZWxhdGlvbklkLCBCbG9ja051bWJlciBi bGtubyk7CiAKKy8qIHBhcmFsbGVsIGF1dG92YWN1dW0gc3R1ZmYgKi8KK2V4dGVybiBpbnQgQXV0 b1ZhY3V1bVJlc2VydmVQYXJhbGxlbFdvcmtlcnMoaW50IG53b3JrZXJzKTsKK2V4dGVybiB2b2lk IEF1dG9WYWN1dW1SZWxlYXNlUGFyYWxsZWxXb3JrZXJzKGludCBud29ya2Vycyk7CisKIC8qIHNo YXJlZCBtZW1vcnkgc3R1ZmYgKi8KIGV4dGVybiBTaXplIEF1dG9WYWN1dW1TaG1lbVNpemUodm9p ZCk7CiBleHRlcm4gdm9pZCBBdXRvVmFjdXVtU2htZW1Jbml0KHZvaWQpOwpkaWZmIC0tZ2l0IGEv c3JjL2luY2x1ZGUvdXRpbHMvZ3VjX2hvb2tzLmggYi9zcmMvaW5jbHVkZS91dGlscy9ndWNfaG9v a3MuaAppbmRleCA4MmFjODY0NmE4ZC4uYjQ1MDIzYTkwYjIgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNs dWRlL3V0aWxzL2d1Y19ob29rcy5oCisrKyBiL3NyYy9pbmNsdWRlL3V0aWxzL2d1Y19ob29rcy5o CkBAIC0zMSw2ICszMSw4IEBAIGV4dGVybiB2b2lkIGFzc2lnbl9hcHBsaWNhdGlvbl9uYW1lKGNv bnN0IGNoYXIgKm5ld3ZhbCwgdm9pZCAqZXh0cmEpOwogZXh0ZXJuIGNvbnN0IGNoYXIgKnNob3df YXJjaGl2ZV9jb21tYW5kKHZvaWQpOwogZXh0ZXJuIGJvb2wgY2hlY2tfYXV0b3ZhY3V1bV93b3Jr X21lbShpbnQgKm5ld3ZhbCwgdm9pZCAqKmV4dHJhLAogCQkJCQkJCQkJICBHdWNTb3VyY2Ugc291 cmNlKTsKK2V4dGVybiBib29sIGNoZWNrX2F1dG92YWN1dW1fbWF4X3BhcmFsbGVsX3dvcmtlcnMo aW50ICpuZXd2YWwsIHZvaWQgKipleHRyYSwKKwkJCQkJCQkJCQkJCSAgR3VjU291cmNlIHNvdXJj ZSk7CiBleHRlcm4gYm9vbCBjaGVja192YWN1dW1fYnVmZmVyX3VzYWdlX2xpbWl0KGludCAqbmV3 dmFsLCB2b2lkICoqZXh0cmEsCiAJCQkJCQkJCQkJCUd1Y1NvdXJjZSBzb3VyY2UpOwogZXh0ZXJu IGJvb2wgY2hlY2tfYmFja3RyYWNlX2Z1bmN0aW9ucyhjaGFyICoqbmV3dmFsLCB2b2lkICoqZXh0 cmEsCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS91dGlscy9yZWwuaCBiL3NyYy9pbmNsdWRlL3V0 aWxzL3JlbC5oCmluZGV4IGI1NTIzNTk5MTVmLi4yOWMzMmY3NTc4MCAxMDA2NDQKLS0tIGEvc3Jj L2luY2x1ZGUvdXRpbHMvcmVsLmgKKysrIGIvc3JjL2luY2x1ZGUvdXRpbHMvcmVsLmgKQEAgLTMx MSw2ICszMTEsOCBAQCB0eXBlZGVmIHN0cnVjdCBGb3JlaWduS2V5Q2FjaGVJbmZvCiB0eXBlZGVm IHN0cnVjdCBBdXRvVmFjT3B0cwogewogCWJvb2wJCWVuYWJsZWQ7CisJaW50CQkJcGFyYWxsZWxf YXV0b3ZhY3V1bV93b3JrZXJzOyAvKiBtYXggbnVtYmVyIG9mIHBhcmFsbGVsCisJCQkJCQkJCQkJ CQlhdXRvdmFjdXVtIHdvcmtlcnMgKi8KIAlpbnQJCQl2YWN1dW1fdGhyZXNob2xkOwogCWludAkJ CXZhY3V1bV9tYXhfdGhyZXNob2xkOwogCWludAkJCXZhY3V1bV9pbnNfdGhyZXNob2xkOwotLSAK Mi40My4wCgo= --0000000000009e2cc40639e16923--