Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.89) (envelope-from ) id 1i3emR-0000an-Cx for pgsql-hackers@arkaria.postgresql.org; Fri, 30 Aug 2019 11:09:23 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.89) (envelope-from ) id 1i3emO-00049D-Ox for pgsql-hackers@arkaria.postgresql.org; Fri, 30 Aug 2019 11:09:20 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.89) (envelope-from ) id 1i3emO-000470-CA for pgsql-hackers@lists.postgresql.org; Fri, 30 Aug 2019 11:09:20 +0000 Received: from mail-yb1-xb41.google.com ([2607:f8b0:4864:20::b41]) by magus.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.89) (envelope-from ) id 1i3emI-0006hf-5x for pgsql-hackers@postgresql.org; Fri, 30 Aug 2019 11:09:20 +0000 Received: by mail-yb1-xb41.google.com with SMTP id y194so2297221ybe.13 for ; Fri, 30 Aug 2019 04:09:13 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=gKd8HNmlJ+7UKzndJHfA2Fxap3upHKFsHJJYGrXUhxk=; b=YPJ9R5HGfbxhSzjqbFbAOQKy4JHdYsnwy31vTstQN47E1c2l+NnZejcXQyUlmWEvaJ 2o1bjSSx1tK/RCLG1qrNX3XHtOa+D8zCVawx6ziozfoC8a1gO58EZ3JfEjyr6VssK1Nf +c5GZmwskgSV2pGqyAJ51B5WxuZK1j4og3Ql3K0m5OApt9uTBLvnXj/HUBISISL29UHL qJr7zwEzWYP67HYCGjQEun2efZNIayhQ7XGTrm3pRkJHxWA6j16WxH8Snxdqkvs/MGK9 n2VtLKu9dN3ZXchng3D+CVQAuhXrtdhfHHWmSbRSIGKpSAjcLvUpigbWdVmhBumQA4r8 V9mA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=gKd8HNmlJ+7UKzndJHfA2Fxap3upHKFsHJJYGrXUhxk=; b=TV9uMfPQuPeLQ8YNmUQurNmx7HQp17Pdn53Mzn/nzlpAc4ZtWpXervk1I1A7fnZ8OC SoXvldDbELAh4zVd+E5vq4dLvxoa9zXeH5SAZZORWIdF+ChAsYjqxXZjJciFwEc5Rnj9 v9UCYQ/j0qJQ/a2Jz3tj7bC5UPeN5KDjHm6pVz+BFLi+bMYA10IjkMmdOnKyhs+iqUiA 8zqGZvbM8hIRKqhmzq5spsUyLKB6oVQz8rRPMYB8mFHS+R07gpbrnuQjopsXv3UCdsyr O5zVxMCTAOkMU3UN6eAHwHrFmM5kF/WWB1TQnkoFiNP2Ij6nBGFGrTJ2bcp2o+4uwhmz lTeg== X-Gm-Message-State: APjAAAVgYeyAsLMnwmO8c1Q6/MoPfFhrP8+AB/sdyFy01a1T0OyK+OOw /qz6E8EPkFCmqSdD90y5iA7/iU6Tp0BUJuM5qXk= X-Google-Smtp-Source: APXvYqxM6ctqe9Iic6fqjWCbZSSoFZ1RsQPnh8zyzD2bJVU3xobsO0xfbL5r1feDZzkgSo7I80e7m52cQklQoRaGlcw= X-Received: by 2002:a25:b9cd:: with SMTP id y13mr10604567ybj.352.1567161995706; Fri, 30 Aug 2019 03:46:35 -0700 (PDT) MIME-Version: 1.0 References: <20190801184333.GA21369@alvherre.pgsql> <0adb2a6f-d422-86e8-22e9-eaf99ce6808b@nttcom.co.jp_1> <20190814025253.GD14446@paquier.xyz> In-Reply-To: From: Masahiko Sawada Date: Fri, 30 Aug 2019 19:45:57 +0900 Message-ID: Subject: Re: [HACKERS] CLUSTER command progress monitor To: Tatsuro Yamada Cc: Michael Paquier , Alvaro Herrera , Robert Haas , Rafia Sabih , Dmitry Dolgov <9erthalion6@gmail.com>, Peter Geoghegan , PostgreSQL-development , Jeff Janes , Thomas Munro , Michael Paquier Content-Type: multipart/mixed; boundary="0000000000000f82970591535682" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Precedence: bulk --0000000000000f82970591535682 Content-Type: text/plain; charset="UTF-8" On Thu, Aug 15, 2019 at 12:48 PM Tatsuro Yamada wrote: > > Hi Michael, Alvaro and Robert! > > On 2019/08/14 11:52, Michael Paquier wrote: > > On Wed, Aug 14, 2019 at 11:38:01AM +0900, Tatsuro Yamada wrote: > >> On 2019/08/13 14:40, Tatsuro Yamada wrote: > >>> On 2019/08/02 3:43, Alvaro Herrera wrote: > >>>> Hmm, I'm trying this out now and I don't see the index_rebuild_count > >>>> ever go up. I think it's because the indexes are built using parallel > >>>> index build ... or maybe it was the table AM changes that moved things > >>>> around, not sure. There's a period at the end when the CLUSTER command > >>>> keeps working, but it's gone from pg_stat_progress_cluster. > >>> > >>> Thanks for your report. > >>> I'll investigate it. :) > >> > >> I did "git bisect" and found the commit: > >> > >> 03f9e5cba0ee1633af4abe734504df50af46fbd8 > >> Report progress of REINDEX operations > > > > I am adding an open item for this one. > > -- > > Michael > > > Okay, I checked it on the wiki. > > https://wiki.postgresql.org/wiki/PostgreSQL_12_Open_Items > - index_rebuild_count in CLUSTER reporting never increments > > To be clear, 03f9e5cb broke CLUSTER progress reporting, but > I investigated little more and share my ideas to fix the problem. > > * Call stack > ======================================== > cluster_rel > pgstat_progress_start_command(CLUSTER) *A1 > rebuild_relation > finish_heap_swap > reindex_relation > reindex_index > pgstat_progress_start_command(CREATE_INDEX) *B1 > pgstat_progress_end_command() *B2 > pgstat_progress_update_param(INDEX_REBUILD_COUNT, i) <- failed :( > pgstat_progress_end_command() *A2 > > Note > These are sets: > A1 and A2, > B1 and B2 > ======================================== > > > * Ideas to fix > There are Three options, I guess. > ======================================== > 1. Call pgstat_progress_start_command(CLUSTER) again > before pgstat_progress_update_param(INDEX_REBUILD_COUNT, i). > > 2. Add "save and restore" functions for the following two > variables of MyBeentry in pgstat.c. > - st_progress_command > - st_progress_command_target > > 3. Use Hash or List to store multiple values for the two > variables in pgstat.c. > ======================================== > > > I tried 1. and it shown index_rebuild_count, but it also shown > "initializing" phase again and other columns were empty. So, it is > not suitable to fix the problem. :( > I'm going to try 2. and 3., but, unfortunately, I can't get enough > time to do that after PGConf.Asia 2019. > If we selected 3., it affects following these progress reporting > features: VACUUM, CLUSTER, CREATE_INDEX and ANALYZE. But it's okay, > I suppose. Any comments welcome! :) I looked at this open item. I prefer #3 but I think it would be enough to have a small stack using a fixed length array to track nested progress information and the current executing command (maybe 4 or 8 would be enough for maximum nested level for now?). That way, we don't need any change the interfaces. AFAICS there is no case where we call only either pgstat_progress_start_command or pgstat_progress_end_command without each other (although pgstat_progress_update_param is called without start). So I think that having a small stack for tracking multiple reports would work. Attached the draft patch that fixes this issue. Please review it. Regards, -- Masahiko Sawada NIPPON TELEGRAPH AND TELEPHONE CORPORATION NTT Open Source Software Center --0000000000000f82970591535682 Content-Type: text/x-patch; charset="US-ASCII"; name="track_nested_command_progress.patch" Content-Disposition: attachment; filename="track_nested_command_progress.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_jzxzrdw50 ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvcGdzdGF0LmMgYi9zcmMvYmFja2Vu ZC9wb3N0bWFzdGVyL3Bnc3RhdC5jCmluZGV4IGQzNjJlN2Y3ZDcuLjk5ZTQ4NDRlNmMgMTAwNjQ0 Ci0tLSBhL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvcGdzdGF0LmMKKysrIGIvc3JjL2JhY2tlbmQv cG9zdG1hc3Rlci9wZ3N0YXQuYwpAQCAtMzAxNiw4ICszMDE2LDEwIEBAIHBnc3RhdF9iZXN0YXJ0 KHZvaWQpCiAjZW5kaWYKIAogCWxiZWVudHJ5LnN0X3N0YXRlID0gU1RBVEVfVU5ERUZJTkVEOwot CWxiZWVudHJ5LnN0X3Byb2dyZXNzX2NvbW1hbmQgPSBQUk9HUkVTU19DT01NQU5EX0lOVkFMSUQ7 Ci0JbGJlZW50cnkuc3RfcHJvZ3Jlc3NfY29tbWFuZF90YXJnZXQgPSBJbnZhbGlkT2lkOworCU1l bVNldCgmKGxiZWVudHJ5LnN0X3Byb2dyZXNzX2NtZHMpLCAwLAorCQkgICBzaXplb2YoUGdCYWNr ZW5kUHJvZ3Jlc3NJbmZvKSAqIFBHU1RBVF9NQVhfUFJPR1JFU1NfSU5GTyk7CisJLyogU2V0IGlu dmFsaWQgY29tbWFuZCBpbmRleCAqLworCWxiZWVudHJ5LnN0X2N1cnJlbnRfY21kID0gLTE7CiAK IAkvKgogCSAqIHdlIGRvbid0IHplcm8gc3RfcHJvZ3Jlc3NfcGFyYW0gaGVyZSB0byBzYXZlIGN5 Y2xlczsgbm9ib2R5IHNob3VsZApAQCAtMzIwMywxMCArMzIwNSwyMiBAQCBwZ3N0YXRfcHJvZ3Jl c3Nfc3RhcnRfY29tbWFuZChQcm9ncmVzc0NvbW1hbmRUeXBlIGNtZHR5cGUsIE9pZCByZWxpZCkK IAlpZiAoIWJlZW50cnkgfHwgIXBnc3RhdF90cmFja19hY3Rpdml0aWVzKQogCQlyZXR1cm47CiAK KwlBc3NlcnQoYmVlbnRyeS0+c3RfY3VycmVudF9jbWQgPj0gLTEpOworCisJLyogVGhlIGdpdmVu IGNvbW1hbmQgaXMgYWxyZWFkeSBzdGFydGVkICovCisJaWYgKGJlZW50cnktPnN0X3Byb2dyZXNz X2NtZHNbYmVlbnRyeS0+c3RfY3VycmVudF9jbWRdLmNvbW1hbmQgPT0gY21kdHlwZSkKKwkJcmV0 dXJuOworCisJLyogVGhlIHByb2dyZXNzIGluZm9ybWF0aW9uIHF1ZXVlIGlzIGZ1bGwgKi8KKwlp ZiAoYmVlbnRyeS0+c3RfY3VycmVudF9jbWQgPj0gUEdTVEFUX01BWF9QUk9HUkVTU19JTkZPIC0g MSkKKwkJZWxvZyhFUlJPUiwgInByb2dyZXNzIGluZm9ybWF0aW9uIHBlciBiYWNrZW5kcyBpcyBm dWxsIik7CisKIAlQR1NUQVRfQkVHSU5fV1JJVEVfQUNUSVZJVFkoYmVlbnRyeSk7Ci0JYmVlbnRy eS0+c3RfcHJvZ3Jlc3NfY29tbWFuZCA9IGNtZHR5cGU7Ci0JYmVlbnRyeS0+c3RfcHJvZ3Jlc3Nf Y29tbWFuZF90YXJnZXQgPSByZWxpZDsKLQlNZW1TZXQoJmJlZW50cnktPnN0X3Byb2dyZXNzX3Bh cmFtLCAwLCBzaXplb2YoYmVlbnRyeS0+c3RfcHJvZ3Jlc3NfcGFyYW0pKTsKKwliZWVudHJ5LT5z dF9jdXJyZW50X2NtZCsrOworCU1lbVNldCgmKGJlZW50cnktPnN0X3Byb2dyZXNzX2NtZHNbYmVl bnRyeS0+c3RfY3VycmVudF9jbWRdKSwKKwkJICAgMCwgc2l6ZW9mKFBnQmFja2VuZFByb2dyZXNz SW5mbykpOworCWJlZW50cnktPnN0X3Byb2dyZXNzX2NtZHNbYmVlbnRyeS0+c3RfY3VycmVudF9j bWRdLmNvbW1hbmQgPSBjbWR0eXBlOworCWJlZW50cnktPnN0X3Byb2dyZXNzX2NtZHNbYmVlbnRy eS0+c3RfY3VycmVudF9jbWRdLnRhcmdldCA9IHJlbGlkOwogCVBHU1RBVF9FTkRfV1JJVEVfQUNU SVZJVFkoYmVlbnRyeSk7CiB9CiAKQEAgLTMyMjMsMTEgKzMyMzcsMTEgQEAgcGdzdGF0X3Byb2dy ZXNzX3VwZGF0ZV9wYXJhbShpbnQgaW5kZXgsIGludDY0IHZhbCkKIAogCUFzc2VydChpbmRleCA+ PSAwICYmIGluZGV4IDwgUEdTVEFUX05VTV9QUk9HUkVTU19QQVJBTSk7CiAKLQlpZiAoIWJlZW50 cnkgfHwgIXBnc3RhdF90cmFja19hY3Rpdml0aWVzKQorCWlmICghYmVlbnRyeSB8fCAhcGdzdGF0 X3RyYWNrX2FjdGl2aXRpZXMgfHwgYmVlbnRyeS0+c3RfY3VycmVudF9jbWQgPCAwKQogCQlyZXR1 cm47CiAKIAlQR1NUQVRfQkVHSU5fV1JJVEVfQUNUSVZJVFkoYmVlbnRyeSk7Ci0JYmVlbnRyeS0+ c3RfcHJvZ3Jlc3NfcGFyYW1baW5kZXhdID0gdmFsOworCWJlZW50cnktPnN0X3Byb2dyZXNzX2Nt ZHNbYmVlbnRyeS0+c3RfY3VycmVudF9jbWRdLnBhcmFtc1tpbmRleF0gPSB2YWw7CiAJUEdTVEFU X0VORF9XUklURV9BQ1RJVklUWShiZWVudHJ5KTsKIH0KIApAQCAtMzI0NSw3ICszMjU5LDggQEAg cGdzdGF0X3Byb2dyZXNzX3VwZGF0ZV9tdWx0aV9wYXJhbShpbnQgbnBhcmFtLCBjb25zdCBpbnQg KmluZGV4LAogCXZvbGF0aWxlIFBnQmFja2VuZFN0YXR1cyAqYmVlbnRyeSA9IE15QkVFbnRyeTsK IAlpbnQJCQlpOwogCi0JaWYgKCFiZWVudHJ5IHx8ICFwZ3N0YXRfdHJhY2tfYWN0aXZpdGllcyB8 fCBucGFyYW0gPT0gMCkKKwlpZiAoIWJlZW50cnkgfHwgIXBnc3RhdF90cmFja19hY3Rpdml0aWVz IHx8IG5wYXJhbSA9PSAwIHx8CisJCWJlZW50cnktPnN0X2N1cnJlbnRfY21kIDwgMCkKIAkJcmV0 dXJuOwogCiAJUEdTVEFUX0JFR0lOX1dSSVRFX0FDVElWSVRZKGJlZW50cnkpOwpAQCAtMzI1NCw3 ICszMjY5LDggQEAgcGdzdGF0X3Byb2dyZXNzX3VwZGF0ZV9tdWx0aV9wYXJhbShpbnQgbnBhcmFt LCBjb25zdCBpbnQgKmluZGV4LAogCXsKIAkJQXNzZXJ0KGluZGV4W2ldID49IDAgJiYgaW5kZXhb aV0gPCBQR1NUQVRfTlVNX1BST0dSRVNTX1BBUkFNKTsKIAotCQliZWVudHJ5LT5zdF9wcm9ncmVz c19wYXJhbVtpbmRleFtpXV0gPSB2YWxbaV07CisJCWJlZW50cnktPnN0X3Byb2dyZXNzX2NtZHNb YmVlbnRyeS0+c3RfY3VycmVudF9jbWRdLnBhcmFtc1tpbmRleFtpXV0gPQorCQkJdmFsW2ldOwog CX0KIAogCVBHU1RBVF9FTkRfV1JJVEVfQUNUSVZJVFkoYmVlbnRyeSk7CkBAIC0zMjc0LDEzICsz MjkwLDE4IEBAIHBnc3RhdF9wcm9ncmVzc19lbmRfY29tbWFuZCh2b2lkKQogCiAJaWYgKCFiZWVu dHJ5KQogCQlyZXR1cm47Ci0JaWYgKCFwZ3N0YXRfdHJhY2tfYWN0aXZpdGllcwotCQkmJiBiZWVu dHJ5LT5zdF9wcm9ncmVzc19jb21tYW5kID09IFBST0dSRVNTX0NPTU1BTkRfSU5WQUxJRCkKKwor CWlmICghcGdzdGF0X3RyYWNrX2FjdGl2aXRpZXMgfHwgYmVlbnRyeS0+c3RfY3VycmVudF9jbWQg PCAwIHx8CisJCWJlZW50cnktPnN0X3Byb2dyZXNzX2NtZHNbYmVlbnRyeS0+c3RfY3VycmVudF9j bWRdLmNvbW1hbmQgPT0KKwkJUFJPR1JFU1NfQ09NTUFORF9JTlZBTElEKQogCQlyZXR1cm47CiAK IAlQR1NUQVRfQkVHSU5fV1JJVEVfQUNUSVZJVFkoYmVlbnRyeSk7Ci0JYmVlbnRyeS0+c3RfcHJv Z3Jlc3NfY29tbWFuZCA9IFBST0dSRVNTX0NPTU1BTkRfSU5WQUxJRDsKLQliZWVudHJ5LT5zdF9w cm9ncmVzc19jb21tYW5kX3RhcmdldCA9IEludmFsaWRPaWQ7CisJYmVlbnRyeS0+c3RfcHJvZ3Jl c3NfY21kc1tiZWVudHJ5LT5zdF9jdXJyZW50X2NtZF0uY29tbWFuZCA9CisJCVBST0dSRVNTX0NP TU1BTkRfSU5WQUxJRDsKKwliZWVudHJ5LT5zdF9wcm9ncmVzc19jbWRzW2JlZW50cnktPnN0X2N1 cnJlbnRfY21kXS50YXJnZXQgPQorCQlJbnZhbGlkT2lkOworCWJlZW50cnktPnN0X2N1cnJlbnRf Y21kLS07CiAJUEdTVEFUX0VORF9XUklURV9BQ1RJVklUWShiZWVudHJ5KTsKIH0KIApkaWZmIC0t Z2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3Bnc3RhdGZ1bmNzLmMgYi9zcmMvYmFja2VuZC91 dGlscy9hZHQvcGdzdGF0ZnVuY3MuYwppbmRleCAwNTI0MGJmZDE0Li43NmFlMmUwMTE1IDEwMDY0 NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9hZHQvcGdzdGF0ZnVuY3MuYworKysgYi9zcmMvYmFj a2VuZC91dGlscy9hZHQvcGdzdGF0ZnVuY3MuYwpAQCAtNDk1LDYgKzQ5NSw3IEBAIHBnX3N0YXRf Z2V0X3Byb2dyZXNzX2luZm8oUEdfRlVOQ1RJT05fQVJHUykKIAkJRGF0dW0JCXZhbHVlc1tQR19T VEFUX0dFVF9QUk9HUkVTU19DT0xTXTsKIAkJYm9vbAkJbnVsbHNbUEdfU1RBVF9HRVRfUFJPR1JF U1NfQ09MU107CiAJCWludAkJCWk7CisJCWludAkJCWNtZGlkeDsKIAogCQlNZW1TZXQodmFsdWVz LCAwLCBzaXplb2YodmFsdWVzKSk7CiAJCU1lbVNldChudWxscywgMCwgc2l6ZW9mKG51bGxzKSk7 CkBAIC01MTAsNyArNTExLDE4IEBAIHBnX3N0YXRfZ2V0X3Byb2dyZXNzX2luZm8oUEdfRlVOQ1RJ T05fQVJHUykKIAkJICogUmVwb3J0IHZhbHVlcyBmb3Igb25seSB0aG9zZSBiYWNrZW5kcyB3aGlj aCBhcmUgcnVubmluZyB0aGUgZ2l2ZW4KIAkJICogY29tbWFuZC4KIAkJICovCi0JCWlmICghYmVl bnRyeSB8fCBiZWVudHJ5LT5zdF9wcm9ncmVzc19jb21tYW5kICE9IGNtZHR5cGUpCisJCWlmICgh YmVlbnRyeSkKKwkJCWNvbnRpbnVlOworCisJCS8qIExvb2sgdXAgdGhlIHByb2dyZXNzIGluZm9y bWF0aW9uIG9mIHRoZSBnaXZlbiBjb21tYW5kICovCisJCWZvciAoY21kaWR4ID0gMDsgY21kaWR4 IDw9IGJlZW50cnktPnN0X2N1cnJlbnRfY21kOyBjbWRpZHgrKykKKwkJeworCQkJaWYgKGJlZW50 cnktPnN0X3Byb2dyZXNzX2NtZHNbY21kaWR4XS5jb21tYW5kID09IGNtZHR5cGUpCisJCQkJYnJl YWs7CisJCX0KKworCQkvKiBTa2lwIGlmIHRoZSBjb21tYW5kIGlzIG5vdCBydW5uaW5nICovCisJ CWlmIChjbWRpZHggPiBiZWVudHJ5LT5zdF9jdXJyZW50X2NtZCkKIAkJCWNvbnRpbnVlOwogCiAJ CS8qIFZhbHVlIGF2YWlsYWJsZSB0byBhbGwgY2FsbGVycyAqLwpAQCAtNTIwLDkgKzUzMiw5IEBA IHBnX3N0YXRfZ2V0X3Byb2dyZXNzX2luZm8oUEdfRlVOQ1RJT05fQVJHUykKIAkJLyogc2hvdyBy ZXN0IG9mIHRoZSB2YWx1ZXMgaW5jbHVkaW5nIHJlbGlkIG9ubHkgdG8gcm9sZSBtZW1iZXJzICov CiAJCWlmIChoYXNfcHJpdnNfb2Zfcm9sZShHZXRVc2VySWQoKSwgYmVlbnRyeS0+c3RfdXNlcmlk KSkKIAkJewotCQkJdmFsdWVzWzJdID0gT2JqZWN0SWRHZXREYXR1bShiZWVudHJ5LT5zdF9wcm9n cmVzc19jb21tYW5kX3RhcmdldCk7CisJCQl2YWx1ZXNbMl0gPSBPYmplY3RJZEdldERhdHVtKGJl ZW50cnktPnN0X3Byb2dyZXNzX2NtZHNbY21kaWR4XS50YXJnZXQpOwogCQkJZm9yIChpID0gMDsg aSA8IFBHU1RBVF9OVU1fUFJPR1JFU1NfUEFSQU07IGkrKykKLQkJCQl2YWx1ZXNbaSArIDNdID0g SW50NjRHZXREYXR1bShiZWVudHJ5LT5zdF9wcm9ncmVzc19wYXJhbVtpXSk7CisJCQkJdmFsdWVz W2kgKyAzXSA9IEludDY0R2V0RGF0dW0oYmVlbnRyeS0+c3RfcHJvZ3Jlc3NfY21kc1tjbWRpZHhd LnBhcmFtc1tpXSk7CiAJCX0KIAkJZWxzZQogCQl7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9w Z3N0YXQuaCBiL3NyYy9pbmNsdWRlL3Bnc3RhdC5oCmluZGV4IGZlMDc2ZDgyM2QuLmI4N2YyNTM3 NzcgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3Bnc3RhdC5oCisrKyBiL3NyYy9pbmNsdWRlL3Bn c3RhdC5oCkBAIC05NTMsMTMgKzk1MywxNCBAQCB0eXBlZGVmIGVudW0KICAqLwogdHlwZWRlZiBl bnVtIFByb2dyZXNzQ29tbWFuZFR5cGUKIHsKLQlQUk9HUkVTU19DT01NQU5EX0lOVkFMSUQsCisJ UFJPR1JFU1NfQ09NTUFORF9JTlZBTElEID0gMCwKIAlQUk9HUkVTU19DT01NQU5EX1ZBQ1VVTSwK IAlQUk9HUkVTU19DT01NQU5EX0NMVVNURVIsCiAJUFJPR1JFU1NfQ09NTUFORF9DUkVBVEVfSU5E RVgKIH0gUHJvZ3Jlc3NDb21tYW5kVHlwZTsKIAogI2RlZmluZSBQR1NUQVRfTlVNX1BST0dSRVNT X1BBUkFNCTIwCisjZGVmaW5lIFBHU1RBVF9NQVhfUFJPR1JFU1NfSU5GTwk0CiAKIC8qIC0tLS0t LS0tLS0KICAqIFNoYXJlZC1tZW1vcnkgZGF0YSBzdHJ1Y3R1cmVzCkBAIC0xMDEwLDYgKzEwMTEs MTggQEAgdHlwZWRlZiBzdHJ1Y3QgUGdCYWNrZW5kR1NTU3RhdHVzCiAKIH0gUGdCYWNrZW5kR1NT U3RhdHVzOwogCisvKgorICogU3RydWN0IGZvciBjb21tYW5kIHByb2dyZXNzIGluZm9ybWF0aW9u IG9mIG9uZSBjb21tYW5kLiBUaGUgJ3RhcmdldCcKKyAqIHNob3VsZCBiZSB0aGUgT0lEIG9mIHRo ZSByZWxhdGlvbiB3aGljaCB0aGUgY29tbWFuZCB0YXJnZXRzICh3ZSBhc3N1bWUKKyAqIHRoZXJl J3MganVzdCBvbmUsIGFzIHRoaXMgaXMgbWVhbnQgZm9yIHV0aWxpdHkgY29tbWFuZHMpLCBidXQg dGhlCisgKiBtZWFuaW5nIG9mIGVhY2ggZWxlbWVudCBpbiB0aGUgcGFyYW1zIGFycmF5IGlzIGNv bW1hbmQtc3BlY2lmaWMuCisgKi8KK3R5cGVkZWYgc3RydWN0IFBnQmFja2VuZFByb2dyZXNzSW5m bworeworCVByb2dyZXNzQ29tbWFuZFR5cGUgY29tbWFuZDsKKwlPaWQJCQl0YXJnZXQ7CisJaW50 NjQJCXBhcmFtc1tQR1NUQVRfTlVNX1BST0dSRVNTX1BBUkFNXTsKK30gUGdCYWNrZW5kUHJvZ3Jl c3NJbmZvOwogCiAvKiAtLS0tLS0tLS0tCiAgKiBQZ0JhY2tlbmRTdGF0dXMKQEAgLTEwODUsMTcg KzEwOTgsMTYgQEAgdHlwZWRlZiBzdHJ1Y3QgUGdCYWNrZW5kU3RhdHVzCiAJY2hhcgkgICAqc3Rf YWN0aXZpdHlfcmF3OwogCiAJLyoKLQkgKiBDb21tYW5kIHByb2dyZXNzIHJlcG9ydGluZy4gIEFu eSBjb21tYW5kIHdoaWNoIHdpc2hlcyBjYW4gYWR2ZXJ0aXNlCi0JICogdGhhdCBpdCBpcyBydW5u aW5nIGJ5IHNldHRpbmcgc3RfcHJvZ3Jlc3NfY29tbWFuZCwKLQkgKiBzdF9wcm9ncmVzc19jb21t YW5kX3RhcmdldCwgYW5kIHN0X3Byb2dyZXNzX3BhcmFtW10uCi0JICogc3RfcHJvZ3Jlc3NfY29t bWFuZF90YXJnZXQgc2hvdWxkIGJlIHRoZSBPSUQgb2YgdGhlIHJlbGF0aW9uIHdoaWNoIHRoZQot CSAqIGNvbW1hbmQgdGFyZ2V0cyAod2UgYXNzdW1lIHRoZXJlJ3MganVzdCBvbmUsIGFzIHRoaXMg aXMgbWVhbnQgZm9yCi0JICogdXRpbGl0eSBjb21tYW5kcyksIGJ1dCB0aGUgbWVhbmluZyBvZiBl YWNoIGVsZW1lbnQgaW4gdGhlCi0JICogc3RfcHJvZ3Jlc3NfcGFyYW0gYXJyYXkgaXMgY29tbWFu ZC1zcGVjaWZpYy4KKwkgKiBDb21tYW5kIHByb2dyZXNzIHJlcG9ydGluZy4gU2luY2UgaXQncyBw b3NzaWJsZSB0byBuZXN0ZWQgY2FsbAorCSAqIG11bHRpcGxlIGNvbW1hbmRzIHRoYXQgc3VwcG9y dCBwcm9ncmVzcyByZXBvcnQsIGUuZy4gQ0xVU1RFUgorCSAqIGV4ZWN1dGVzIFJFSU5ERVggaW5z aWRlLCB3ZSB0cmFjayBwcm9ncmVzcyBvZiBtdWx0aXBsZSBjb21tYW5kcy4KKwkgKiBzdF9jdXJy ZW50X2NtZCBpcyB0aGUgaW5kZXggb2Ygc3RfcHJvZ3Jlc3NfY21kcyBvZiBjdXJyZW50IGV4ZWN1 dGluZworCSAqIGNvbW1hbmQsIC0xIGZvciBpbnZhbGlkLiBBbnkgY29tbWFuZCB3aGljaCB3aXNo ZXMgY2FuIGFkdmVydGlzZQorCSAqIHRoYXQgaXMgaXMgcnVubmluZyBieSBpbmNyZWFzaW5nIHN0 X2N1cnJlbnRfY21kIGFuZCBzZXR0aW5nCisJICogdGhlIGNvcnJlc3BvbmRpbmcgZWxlbWVudHMg b2Ygc3RfcHJvZ3Jlc3NfY21kLgogCSAqLwotCVByb2dyZXNzQ29tbWFuZFR5cGUgc3RfcHJvZ3Jl c3NfY29tbWFuZDsKLQlPaWQJCQlzdF9wcm9ncmVzc19jb21tYW5kX3RhcmdldDsKLQlpbnQ2NAkJ c3RfcHJvZ3Jlc3NfcGFyYW1bUEdTVEFUX05VTV9QUk9HUkVTU19QQVJBTV07CisJaW50CQkJc3Rf Y3VycmVudF9jbWQ7CisJUGdCYWNrZW5kUHJvZ3Jlc3NJbmZvIHN0X3Byb2dyZXNzX2NtZHNbUEdT VEFUX01BWF9QUk9HUkVTU19JTkZPXTsKIH0gUGdCYWNrZW5kU3RhdHVzOwogCiAvKgo= --0000000000000f82970591535682--