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 1iOHmp-0002Q1-Jp for pgsql-hackers@arkaria.postgresql.org; Sat, 26 Oct 2019 08:51:03 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.89) (envelope-from ) id 1iOHmo-00014J-4x for pgsql-hackers@arkaria.postgresql.org; Sat, 26 Oct 2019 08:51:02 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.89) (envelope-from ) id 1iOHmn-00014A-IO for pgsql-hackers@lists.postgresql.org; Sat, 26 Oct 2019 08:51:01 +0000 Received: from mail-pl1-x641.google.com ([2607:f8b0:4864:20::641]) by makus.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92) (envelope-from ) id 1iOHmg-0004sT-Pd for pgsql-hackers@postgresql.org; Sat, 26 Oct 2019 08:51:00 +0000 Received: by mail-pl1-x641.google.com with SMTP id q16so2426630pll.11 for ; Sat, 26 Oct 2019 01:50:54 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=to:from:subject:message-id:date:user-agent:mime-version :content-language; bh=R7pwbR7O5MnL4OqOV/1x6nHpre60V0R1WIRqgY5emj0=; b=XQuKENgbJhROBM07dWnSRuLwNtrSwTSDf5yStYloE2xy51XgmaNNvj9NHKti9O5mQM 6V+yHVizRN9z/SAEqx2UJe/aVHsyft6AXK0RdZecfvVmwWDuQFE2Qq29DFmaoyiGFaYG 1+EpLXKmjlhF+Yuu+GpoeCrG/oHjDCqUQmk7piSmrnXWodYLcXPq91PQOGR3yst3gO6u WYt1duOeDW+aX+7Y0QBEWRfv2gHvVBnz2rX6sgsmX+EQMsNWG40ZTyKwGUcTqhTY3+je gT+JTtq3h72IVHcVjmPnmBcFsV/Jdw2MW12J0vbCi1rW/jrZGXJngH3fg41wyj4oZ9Uu jSKw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:to:from:subject:message-id:date:user-agent :mime-version:content-language; bh=R7pwbR7O5MnL4OqOV/1x6nHpre60V0R1WIRqgY5emj0=; b=b2FOtdKca6GFtYIGK1DTpHvt4oNME5BDMgQWwudV1gH33JumxSjcMvC0tMOjsmxLP2 oKa5Jg0z/WRzlHbpaYsBfHorQQz9IsS4afmsVnnNGoxAaU39mrIIcTWxYp/zJLvLigjh E0w72oyLkMgkM9zAM7Qs6KCp7Luszd9hpwgVSDpnTmsLUF4yop9ZPVTJxbPirAkOu32k VSgdgmDqYYa7p9z4Awgz1pZ3g7qD/w7dqMln+A2mEpc1V1lKjRQXzmMTzzgPvvklk8k3 g2r6YPYMyZCdRxWdDId6jh9pxD9WWcFmVHne1w0JOw3Wmxr6nhNRLMK0PIJL8XXCv86v ZblA== X-Gm-Message-State: APjAAAVLEgtft+T5HICK972sh9ZTLOK50N34JGbkH4oWI9gfSmMC/WEw APyBPgXEvvB9l1rty2ZfX71vCERt X-Google-Smtp-Source: APXvYqzCN9xSwCyhDDZxL4K05a6ucLo+nni+QZFWEUEEVSXvGWSON2q3cX7sy/DUj/3OEh23i1mmYw== X-Received: by 2002:a17:902:6802:: with SMTP id h2mr8368368plk.135.1572079853128; Sat, 26 Oct 2019 01:50:53 -0700 (PDT) Received: from [192.168.0.108] ([111.167.182.99]) by smtp.googlemail.com with ESMTPSA id d4sm4912073pjs.9.2019.10.26.01.50.50 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sat, 26 Oct 2019 01:50:52 -0700 (PDT) To: Pgsql Hackers From: Quan Zongliang Subject: Restore replication settings when modifying a field type Message-ID: Date: Sat, 26 Oct 2019 16:50:48 +0800 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:60.0) Gecko/20100101 Thunderbird/60.9.0 MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="------------5BB2F7D0D2154FA9B55E22CA" Content-Language: en-US List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Precedence: bulk This is a multi-part message in MIME format. --------------5BB2F7D0D2154FA9B55E22CA Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit When the user modifies the REPLICA IDENTIFY field type, the logical replication settings are lost. For example: postgres=# \d+ t1 Table "public.t1" Column | Type | Collation | Nullable | Default | Storage | Stats target | Description --------+---------+-----------+----------+---------+---------+--------------+------------- col1 | integer | | | | plain | | col2 | integer | | not null | | plain | | Indexes: "t1_col2_key" UNIQUE CONSTRAINT, btree (col2) REPLICA IDENTITY postgres=# alter table t1 alter col2 type smallint; ALTER TABLE postgres=# \d+ t1 Table "public.t1" Column | Type | Collation | Nullable | Default | Storage | Stats target | Description --------+----------+-----------+----------+---------+---------+--------------+------------- col1 | integer | | | | plain | | col2 | smallint | | not null | | plain | | Indexes: "t1_col2_key" UNIQUE CONSTRAINT, btree (col2) In fact, the replication property of the table has not been modified, and it is still 'i'(REPLICA_IDENTITY_INDEX). But the previously specified index property 'indisreplident' is set to false because of the rebuild. So I developed a patch. If the user modifies the field type. The associated index is REPLICA IDENTITY. Rebuild and restore replication settings. Regards, Quan Zongliang --------------5BB2F7D0D2154FA9B55E22CA Content-Type: text/plain; charset=UTF-8; x-mac-type="0"; x-mac-creator="0"; name="replidfieldtype.diff" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="replidfieldtype.diff" ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3RhYmxlY21kcy5jIGIvc3JjL2Jh Y2tlbmQvY29tbWFuZHMvdGFibGVjbWRzLmMKaW5kZXggYjUzZjZlZDNhYy4uYzIxMzcyZmU1 MSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvdGFibGVjbWRzLmMKKysrIGIv c3JjL2JhY2tlbmQvY29tbWFuZHMvdGFibGVjbWRzLmMKQEAgLTE3NSw2ICsxNzUsOCBAQCB0 eXBlZGVmIHN0cnVjdCBBbHRlcmVkVGFibGVJbmZvCiAJTGlzdAkgICAqY2hhbmdlZENvbnN0 cmFpbnREZWZzOwkvKiBzdHJpbmcgZGVmaW5pdGlvbnMgb2Ygc2FtZSAqLwogCUxpc3QJICAg KmNoYW5nZWRJbmRleE9pZHM7CS8qIE9JRHMgb2YgaW5kZXhlcyB0byByZWJ1aWxkICovCiAJ TGlzdAkgICAqY2hhbmdlZEluZGV4RGVmczsJLyogc3RyaW5nIGRlZmluaXRpb25zIG9mIHNh bWUgKi8KKwlPaWQJCSAgIGNoYW5nZWRSZXBsSWRlbnRPaWQ7CS8qIE9JRCBvZiBpbmRleCB0 byByZXNldCBSRVBMSUNBIElERU5USUZZICovCisJY2hhcgkgICAqY2hhbmdlZFJlcGxJZGVu dERlZjsJLyogc3RyaW5nIGRlZmluaXRpb25zIG9mIHNhbWUgKi8KIH0gQWx0ZXJlZFRhYmxl SW5mbzsKIAogLyogU3RydWN0IGRlc2NyaWJpbmcgb25lIG5ldyBjb25zdHJhaW50IHRvIGNo ZWNrIGluIFBoYXNlIDMgc2NhbiAqLwpAQCAtNDI4LDYgKzQzMCw3IEBAIHN0YXRpYyBPYmpl Y3RBZGRyZXNzIEFURXhlY0FsdGVyQ29sdW1uVHlwZShBbHRlcmVkVGFibGVJbmZvICp0YWIs IFJlbGF0aW9uIHJlbCwKIAkJCQkJICBBbHRlclRhYmxlQ21kICpjbWQsIExPQ0tNT0RFIGxv Y2ttb2RlKTsKIHN0YXRpYyB2b2lkIFJlbWVtYmVyQ29uc3RyYWludEZvclJlYnVpbGRpbmco T2lkIGNvbm9pZCwgQWx0ZXJlZFRhYmxlSW5mbyAqdGFiKTsKIHN0YXRpYyB2b2lkIFJlbWVt YmVySW5kZXhGb3JSZWJ1aWxkaW5nKE9pZCBpbmRvaWQsIEFsdGVyZWRUYWJsZUluZm8gKnRh Yik7CitzdGF0aWMgdm9pZCBSZW1lbWJlclJlcGxpY2FJZGVudEZvclJlYnVpbGRpbmcoT2lk IGluZG9pZCwgQWx0ZXJlZFRhYmxlSW5mbyAqdGFiKTsKIHN0YXRpYyBPYmplY3RBZGRyZXNz IEFURXhlY0FsdGVyQ29sdW1uR2VuZXJpY09wdGlvbnMoUmVsYXRpb24gcmVsLCBjb25zdCBj aGFyICpjb2xOYW1lLAogCQkJCQkJCQlMaXN0ICpvcHRpb25zLCBMT0NLTU9ERSBsb2NrbW9k ZSk7CiBzdGF0aWMgdm9pZCBBVFBvc3RBbHRlclR5cGVDbGVhbnVwKExpc3QgKip3cXVldWUs IEFsdGVyZWRUYWJsZUluZm8gKnRhYiwKQEAgLTk5OTEsNiArOTk5NCw5IEBAIEFURXhlY0Fs dGVyQ29sdW1uVHlwZShBbHRlcmVkVGFibGVJbmZvICp0YWIsIFJlbGF0aW9uIHJlbCwKIAkJ CQkJewogCQkJCQkJQXNzZXJ0KGZvdW5kT2JqZWN0Lm9iamVjdFN1YklkID09IDApOwogCQkJ CQkJUmVtZW1iZXJJbmRleEZvclJlYnVpbGRpbmcoZm91bmRPYmplY3Qub2JqZWN0SWQsIHRh Yik7CisKKwkJCQkJCWlmIChSZWxhdGlvbkdldEZvcm0ocmVsKS0+cmVscmVwbGlkZW50PT1S RVBMSUNBX0lERU5USVRZX0lOREVYKQorCQkJCQkJCVJlbWVtYmVyUmVwbGljYUlkZW50Rm9y UmVidWlsZGluZyhmb3VuZE9iamVjdC5vYmplY3RJZCwgdGFiKTsKIAkJCQkJfQogCQkJCQll bHNlIGlmIChyZWxLaW5kID09IFJFTEtJTkRfU0VRVUVOQ0UpCiAJCQkJCXsKQEAgLTEwMDEw LDggKzEwMDE2LDE0IEBAIEFURXhlY0FsdGVyQ29sdW1uVHlwZShBbHRlcmVkVGFibGVJbmZv ICp0YWIsIFJlbGF0aW9uIHJlbCwKIAkJCQl9CiAKIAkJCWNhc2UgT0NMQVNTX0NPTlNUUkFJ TlQ6Ci0JCQkJQXNzZXJ0KGZvdW5kT2JqZWN0Lm9iamVjdFN1YklkID09IDApOwotCQkJCVJl bWVtYmVyQ29uc3RyYWludEZvclJlYnVpbGRpbmcoZm91bmRPYmplY3Qub2JqZWN0SWQsIHRh Yik7CisJCQkJeworCQkJCQlPaWQgaW5kSWQ7CisJCQkJCUFzc2VydChmb3VuZE9iamVjdC5v YmplY3RTdWJJZCA9PSAwKTsKKwkJCQkJUmVtZW1iZXJDb25zdHJhaW50Rm9yUmVidWlsZGlu Zyhmb3VuZE9iamVjdC5vYmplY3RJZCwgdGFiKTsKKwkJCQkJaW5kSWQgPSBnZXRfY29uc3Ry YWludF9pbmRleChmb3VuZE9iamVjdC5vYmplY3RJZCk7CisJCQkJCWlmIChPaWRJc1ZhbGlk KGluZElkKSkKKwkJCQkJCVJlbWVtYmVyUmVwbGljYUlkZW50Rm9yUmVidWlsZGluZyhpbmRJ ZCwgdGFiKTsKKwkJCQl9CiAJCQkJYnJlYWs7CiAKIAkJCWNhc2UgT0NMQVNTX1JFV1JJVEU6 CkBAIC0xMDMyNCw2ICsxMDMzNiwzNiBAQCBSZW1lbWJlckNvbnN0cmFpbnRGb3JSZWJ1aWxk aW5nKE9pZCBjb25vaWQsIEFsdGVyZWRUYWJsZUluZm8gKnRhYikKIAl9CiB9CiAKKy8qCisg KiBTdWJyb3V0aW5lIGZvciBBVEV4ZWNBbHRlckNvbHVtblR5cGU6IHJlbWVtYmVyIHRoYXQg YSByZXBsaWNhIGlkZW50aWZ5CisgKiBuZWVkcyB0byBiZSByZXNldCAod2hpY2ggd2UgbWln aHQgYWxyZWFkeSBrbm93KS4KKyAqLworc3RhdGljIHZvaWQKK1JlbWVtYmVyUmVwbGljYUlk ZW50Rm9yUmVidWlsZGluZyhPaWQgaW5kb2lkLCBBbHRlcmVkVGFibGVJbmZvICp0YWIpCit7 CisJY2hhcgkgICAqZGVmc3RyaW5nOworCisJLyoKKwkgKiBUaGlzIGRlLWR1cGxpY2F0aW9u IGNoZWNrIGlzIGNyaXRpY2FsIGZvciB0d28gaW5kZXBlbmRlbnQgcmVhc29uczogd2UKKwkg KiBtdXN0bid0IHRyeSB0byByZWNyZWF0ZSB0aGUgc2FtZSBjb25zdHJhaW50IHR3aWNlLCBh bmQgaWYgYSBjb25zdHJhaW50CisJICogZGVwZW5kcyBvbiBtb3JlIHRoYW4gb25lIGNvbHVt biB3aG9zZSB0eXBlIGlzIHRvIGJlIGFsdGVyZWQsIHdlIG11c3QKKwkgKiBjYXB0dXJlIGl0 cyBkZWZpbml0aW9uIHN0cmluZyBiZWZvcmUgYXBwbHlpbmcgYW55IG9mIHRoZSBjb2x1bW4g dHlwZQorCSAqIGNoYW5nZXMuICBydWxldXRpbHMuYyB3aWxsIGdldCBjb25mdXNlZCBpZiB3 ZSBhc2sgYWdhaW4gbGF0ZXIuCisJICovCisJaWYgKE9pZElzVmFsaWQodGFiLT5jaGFuZ2Vk UmVwbElkZW50T2lkKSkKKwkJcmV0dXJuOworCisJLyogT0ssIGNhcHR1cmUgdGhlIGNvbnN0 cmFpbnQncyBleGlzdGluZyBkZWZpbml0aW9uIHN0cmluZyAqLworCWRlZnN0cmluZyA9IHBn X2dldF9yZXBsaWRlbnRkZWZfY29tbWFuZChpbmRvaWQpOworCisJLyogbm90IGEgcmVwbGlj YSBpZGVudGlmeSAqLworCWlmIChkZWZzdHJpbmc9PU5VTEwpCisJCXJldHVybjsKKworCXRh Yi0+Y2hhbmdlZFJlcGxJZGVudE9pZCA9IGluZG9pZDsKKwl0YWItPmNoYW5nZWRSZXBsSWRl bnREZWYgPSBkZWZzdHJpbmc7Cit9CisKIC8qCiAgKiBTdWJyb3V0aW5lIGZvciBBVEV4ZWNB bHRlckNvbHVtblR5cGU6IHJlbWVtYmVyIHRoYXQgYW4gaW5kZXggbmVlZHMKICAqIHRvIGJl IHJlYnVpbHQgKHdoaWNoIHdlIG1pZ2h0IGFscmVhZHkga25vdykuCkBAIC0xMDU3Niw2ICsx MDYxOCwxMyBAQCBBVFBvc3RBbHRlclR5cGVDbGVhbnVwKExpc3QgKip3cXVldWUsIEFsdGVy ZWRUYWJsZUluZm8gKnRhYiwgTE9DS01PREUgbG9ja21vZGUpCiAJCU9iamVjdEFkZHJlc3NT ZXQob2JqLCBSZWxhdGlvblJlbGF0aW9uSWQsIG9sZElkKTsKIAkJYWRkX2V4YWN0X29iamVj dF9hZGRyZXNzKCZvYmosIG9iamVjdHMpOwogCX0KKwlpZiAoT2lkSXNWYWxpZCh0YWItPmNo YW5nZWRSZXBsSWRlbnRPaWQpKQorCXsKKwkJT2lkIHJlbGlkID0gSW5kZXhHZXRSZWxhdGlv bih0YWItPmNoYW5nZWRSZXBsSWRlbnRPaWQsIGZhbHNlKTsKKwkJQVRQb3N0QWx0ZXJUeXBl UGFyc2UoSW52YWxpZE9pZCwgcmVsaWQsIEludmFsaWRPaWQsCisJCQkJCQkJIHRhYi0+Y2hh bmdlZFJlcGxJZGVudERlZiwKKwkJCQkJCQkgd3F1ZXVlLCBsb2NrbW9kZSwgdGFiLT5yZXdy aXRlKTsKKwl9CiAKIAkvKgogCSAqIEl0IHNob3VsZCBiZSBva2F5IHRvIHVzZSBEUk9QX1JF U1RSSUNUIGhlcmUsIHNpbmNlIG5vdGhpbmcgZWxzZSBzaG91bGQKQEAgLTEwNzE3LDYgKzEw NzY2LDExIEBAIEFUUG9zdEFsdGVyVHlwZVBhcnNlKE9pZCBvbGRJZCwgT2lkIG9sZFJlbElk LCBPaWQgcmVmUmVsSWQsIGNoYXIgKmNtZCwKIAkJCQkJCQkJCQkJIE5JTCwKIAkJCQkJCQkJ CQkJIGNvbi0+Y29ubmFtZSk7CiAJCQkJfQorCQkJCWVsc2UgaWYgKGNtZC0+c3VidHlwZSA9 PSBBVF9SZXBsaWNhSWRlbnRpdHkpCisJCQkJeworCQkJCQl0YWItPnN1YmNtZHNbQVRfUEFT U19NSVNDXSA9CisJCQkJCQlsYXBwZW5kKHRhYi0+c3ViY21kc1tBVF9QQVNTX01JU0NdLCBj bWQpOworCQkJCX0KIAkJCQllbHNlCiAJCQkJCWVsb2coRVJST1IsICJ1bmV4cGVjdGVkIHN0 YXRlbWVudCBzdWJ0eXBlOiAlZCIsCiAJCQkJCQkgKGludCkgY21kLT5zdWJ0eXBlKTsKZGlm ZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9ydWxldXRpbHMuYyBiL3NyYy9iYWNr ZW5kL3V0aWxzL2FkdC9ydWxldXRpbHMuYwppbmRleCAzNjRlNDY1Y2JlLi4xM2EwMjIxOTcz IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9hZHQvcnVsZXV0aWxzLmMKKysrIGIv c3JjL2JhY2tlbmQvdXRpbHMvYWR0L3J1bGV1dGlscy5jCkBAIC0xODU1LDYgKzE4NTUsMzgg QEAgcGdfZ2V0X2NvbnN0cmFpbnRkZWZfZXh0KFBHX0ZVTkNUSU9OX0FSR1MpCiAJUEdfUkVU VVJOX1RFWFRfUChzdHJpbmdfdG9fdGV4dChyZXMpKTsKIH0KIAorY2hhciAqcGdfZ2V0X3Jl cGxpZGVudGRlZl9jb21tYW5kKE9pZCBpbmRJZCkKK3sKKwlPaWQJCQlyZWxJZDsKKwlIZWFw VHVwbGUJaHRfaWR4OworCUZvcm1fcGdfaW5kZXggaWR4cmVjOworCisJU3RyaW5nSW5mb0Rh dGEgYnVmOworCisJaHRfaWR4ID0gU2VhcmNoU3lzQ2FjaGUxKElOREVYUkVMSUQsIE9iamVj dElkR2V0RGF0dW0oaW5kSWQpKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQoaHRfaWR4KSkK KwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIGluZGV4ICV1IiwgaW5k SWQpOworCisJaWR4cmVjID0gKEZvcm1fcGdfaW5kZXgpIEdFVFNUUlVDVChodF9pZHgpOwor CS8qIG5vdCBhIHJlcGxpY2EgaWRlbnRpZnkgKi8KKwlpZiAoIWlkeHJlYy0+aW5kaXNyZXBs aWRlbnQpCisJeworCQlSZWxlYXNlU3lzQ2FjaGUoaHRfaWR4KTsKKwkJcmV0dXJuIE5VTEw7 CisJfQorCXJlbElkID0gaWR4cmVjLT5pbmRyZWxpZDsKKwlSZWxlYXNlU3lzQ2FjaGUoaHRf aWR4KTsKKworCWluaXRTdHJpbmdJbmZvKCZidWYpOworCWFwcGVuZFN0cmluZ0luZm9TdHJp bmcoJmJ1ZiwgIkFMVEVSIFRBQkxFICIpOworCisJYXBwZW5kU3RyaW5nSW5mb1N0cmluZygm YnVmLCBnZW5lcmF0ZV9xdWFsaWZpZWRfcmVsYXRpb25fbmFtZShyZWxJZCkpOworCWFwcGVu ZFN0cmluZ0luZm9TdHJpbmcoJmJ1ZiwgIiBSRVBMSUNBIElERU5USVRZIFVTSU5HIElOREVY ICIpOworCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoJmJ1ZiwgcXVvdGVfaWRlbnRpZmllcihn ZXRfcmVsX25hbWUoaW5kSWQpKSk7CisKKwlyZXR1cm4gYnVmLmRhdGE7Cit9CisKIC8qCiAg KiBJbnRlcm5hbCB2ZXJzaW9uIHRoYXQgcmV0dXJucyBhIGZ1bGwgQUxURVIgVEFCTEUgLi4u IEFERCBDT05TVFJBSU5UIGNvbW1hbmQKICAqLwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUv dXRpbHMvcnVsZXV0aWxzLmggYi9zcmMvaW5jbHVkZS91dGlscy9ydWxldXRpbHMuaAppbmRl eCA5ZjliMDI5YWI4Li5jNGE0OGUyMzM2IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS91dGls cy9ydWxldXRpbHMuaAorKysgYi9zcmMvaW5jbHVkZS91dGlscy9ydWxldXRpbHMuaApAQCAt MjMsNiArMjMsOCBAQCBleHRlcm4gY2hhciAqcGdfZ2V0X2luZGV4ZGVmX2NvbHVtbnMoT2lk IGluZGV4cmVsaWQsIGJvb2wgcHJldHR5KTsKIAogZXh0ZXJuIGNoYXIgKnBnX2dldF9wYXJ0 a2V5ZGVmX2NvbHVtbnMoT2lkIHJlbGlkLCBib29sIHByZXR0eSk7CiAKK2V4dGVybiBjaGFy ICpwZ19nZXRfcmVwbGlkZW50ZGVmX2NvbW1hbmQoT2lkIGluZElkKTsKKwogZXh0ZXJuIGNo YXIgKnBnX2dldF9jb25zdHJhaW50ZGVmX2NvbW1hbmQoT2lkIGNvbnN0cmFpbnRJZCk7CiBl eHRlcm4gY2hhciAqZGVwYXJzZV9leHByZXNzaW9uKE5vZGUgKmV4cHIsIExpc3QgKmRwY29u dGV4dCwKIAkJCQkgICBib29sIGZvcmNlcHJlZml4LCBib29sIHNob3dpbXBsaWNpdCk7Cg== --------------5BB2F7D0D2154FA9B55E22CA--