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 1sIYa5-00GRMu-Vy for pgsql-hackers@arkaria.postgresql.org; Sat, 15 Jun 2024 18:56:54 +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 1sIYa3-00GKXS-3v for pgsql-hackers@arkaria.postgresql.org; Sat, 15 Jun 2024 18:56:52 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1sIYa2-00GKXI-As for pgsql-hackers@lists.postgresql.org; Sat, 15 Jun 2024 18:56:51 +0000 Received: from mail-lj1-x22d.google.com ([2a00:1450:4864:20::22d]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.94.2) (envelope-from ) id 1sIYZu-001TnN-Mn for pgsql-hackers@lists.postgresql.org; Sat, 15 Jun 2024 18:56:49 +0000 Received: by mail-lj1-x22d.google.com with SMTP id 38308e7fff4ca-2e95a75a90eso33556691fa.2 for ; Sat, 15 Jun 2024 11:56:42 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1718477800; x=1719082600; darn=lists.postgresql.org; h=in-reply-to:content-language:references:cc:to:subject:from :user-agent:mime-version:date:message-id:from:to:cc:subject:date :message-id:reply-to; bh=eNiuvmsqaEQo0bXya9kl1FD67U7UwleHQea0PwDUJxw=; b=YB9LGsDJ7I0G9drmAcZWbjKVxB+ykSr/ZCsEGwzPcufuKUfsucSgQfKoKI6AXIk1U3 rRnN/7taoKi9UO+Ki8BoEo/9blCEmPf/90ZyW2fYdhUvEv6eMZp8BbyFrT3pYGUE5HVk NbyF2sUz5Qui6XZWSgzXyWYzLj1Stsgflac3RTuA1Js43UhrzY7cQHwzbxBnq4pnWYFx EE8GFr7ZVVN1GHBkxjgC6cn/AUDmdeh04/ZiO2TsXF0gUN47Jkaih314l0YTGZK2etfI UFqn1ZMFxqxgQioo8qGleAJ5D5V0N2vKZQyRLUaH3oJx4Wcykvz1JCCAGZ3DglelS7Ex oEVQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1718477800; x=1719082600; h=in-reply-to:content-language:references:cc:to:subject:from :user-agent:mime-version:date:message-id:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=eNiuvmsqaEQo0bXya9kl1FD67U7UwleHQea0PwDUJxw=; b=I59nCKFOWwmawu+pz+JZDAiorjYZBB24kY94HxWcViaQuIOWU6v0K/tiyC6Ap4mp9u dGMa0HRQIwKhVp3RCD7Gdn22rHlMTA7yWC63e99om2P6w4VXHbn115B9Oji7aqnqdePY HlMKBLEqsT48n3PBT3MsGRSpXyHo6FAMIVTc8i9ZO/6X8MZyAlBFZ5mhx8+77yKBOHuk 5csPfFfuzdzHGdswbf5Qrm4eXXj9i9GX3Gk+KZ1p4bWkyLizvu83mKyiMAlp/EYrFp+/ vZdjQMxQ4uwVL03s3VD0c3kpPeyfIE/WWeu3QyCwsigSCDczNM+XHzWdstraNC4wEEvm FVXw== X-Forwarded-Encrypted: i=1; AJvYcCUSCDfhSmx3t6lZDUeLHJgyx4jWBJjeXM7iCP89lG7BZBNcy+VX8k6yvvIdF0N0TVQCPeHaRYfzyooXKsDuhqPtpYVj3yB3IPRNlrmJGr4Q7T4Y X-Gm-Message-State: AOJu0YzBy8WFRp5vCjg00+RZMTt/zue+TJf/6fYcJA7QlSHh6YVKjz1h VgqJM84zaBXYx4CbPuyJrmMGtd/YIIEZjtb3adZF9n0OWkK9xsBo X-Google-Smtp-Source: AGHT+IH9TGx6k8VqjEdRrpj3IVxcxXu00U93QK4YoXmlmMupi3rwM4yJetQWQQUzcPFzHWUcpTOiVQ== X-Received: by 2002:a19:2d45:0:b0:52c:8eb9:5800 with SMTP id 2adb3069b0e04-52ca6e6565bmr3640981e87.16.1718477799767; Sat, 15 Jun 2024 11:56:39 -0700 (PDT) Received: from ?IPV6:2a01:4b00:c00c:a500:563c:18b5:dad7:1664? ([2a01:4b00:c00c:a500:563c:18b5:dad7:1664]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3607509348esm7735094f8f.17.2024.06.15.11.56.38 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Sat, 15 Jun 2024 11:56:38 -0700 (PDT) Content-Type: multipart/mixed; boundary="------------aArlsvv7cBqNFubEXqjDeYDV" Message-ID: <55cfae76-2ffa-43ed-a7e7-901bffbebee4@gmail.com> Date: Sat, 15 Jun 2024 19:56:38 +0100 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird From: Ilya Gladyshev Subject: Re: CREATE INDEX CONCURRENTLY on partitioned index To: Alexander Pyhalov Cc: Justin Pryzby , pgsql-hackers@lists.postgresql.org, Masahiko Sawada , Michael Paquier , =?UTF-8?B?5p2O5p2wKOaFjui/vSk=?= References: <20210226182019.GU20769@telsasoft.com> <04657227cc37b6353cf0c72bedac70cc@postgrespro.ru> <20220628183309.GD28130@telsasoft.com> <20221121030011.GU11463@telsasoft.com> <5bafee07d0e1b3ce5359d1656c90b4836d7cb6a1.camel@gmail.com> <20221204190935.GD14156@telsasoft.com> <37d3f0a984a15f6465b83027eed8c588@postgrespro.ru> <8fe0027c-a4f9-43a0-afc1-20362c159d07@gmail.com> <76a11eea-c5ae-4034-971d-c8a2df0bb14d@gmail.com> Content-Language: en-US In-Reply-To: List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk This is a multi-part message in MIME format. --------------aArlsvv7cBqNFubEXqjDeYDV Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit On 28.05.2024 07:05, Alexander Pyhalov wrote: > Ilya Gladyshev писал(а) 2024-05-28 02:52: > >>> Also I'd like to note that in new patch version there's a strange >>> wording in documentation: >>> >>> "This can be very convenient as not only will all existing >>> partitions be >>>  indexed, but any future partitions will be as well. >>>  CREATE INDEX ... CONCURRENTLY can incur long >>> lock times >>>  on huge partitioned tables, to avoid that you can >>>  use CREATE INDEX ON ONLY the partitioned table, >>> which >>>  creates the new index marked as invalid, preventing automatic >>> application >>>  to existing partitions." >>> >>> All the point of CIC is to avoid long lock times. So it seems this >>> paragraph should be rewritten in the following way: >>> >>> "To avoid long lock times, you can use CREATE INDEX CONCURRENTLY or >>> CREATE INDEX ON ONLY the partitioned table..." >> >> >> True, the current wording doesn't look right. Right now CREATE INDEX >> ON ONLY is described as a workaround for the missing CIC. I think it >> rather makes sense to say that it gives more fine-grained control of >> partition locking than both CIC and ordinary CREATE INDEX. See the >> updated patch. > > Hi. > > Not sure if it's worth removing mentioning of CIC in > >       creates the new index marked as invalid, preventing automatic > application >       to existing partitions.  Instead, indexes can then be created > individually > -     on each partition using CONCURRENTLY and > +     on each partition and >       attached to the partitioned index on the > parent >       using ALTER INDEX ... ATTACH PARTITION.  Once > indexes for >       all the partitions are attached to the parent index, the parent > index will > > but at least now it looks better. The current patch version locks all the partitions in the first transaction up until each of them is built, which makes for long lock times for partitions that are built last. Having looked at the implementation of REINDEX CONCURRENTLY for partitioned tables, I think we can improve this by using the same approach of just skipping the relations that we find out are dropped when trying to lock them. Incidentally, this implementation in the new patch version is also simpler. In addition, I noticed that progress tracking is once again broken for partitioned tables, while looking at REINDEX implementation, attaching the second patch to fix it. --------------aArlsvv7cBqNFubEXqjDeYDV Content-Type: text/x-patch; charset=UTF-8; name="v4-0002-Fix-progress-report-for-partitioned-REINDEX.patch" Content-Disposition: attachment; filename*0="v4-0002-Fix-progress-report-for-partitioned-REINDEX.patch" Content-Transfer-Encoding: base64 RnJvbSA4ODRiZTAzYWFlYWJlZTVjNmVlYjVhM2Y2MzlhYzlhZmU3MTJjMjRiIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBJbHlhIEdsYWR5c2hldiA8aWx5YS52LmdsYWR5c2hl dkBnbWFpbC5jb20+CkRhdGU6IFR1ZSwgMTEgSnVuIDIwMjQgMTc6NDg6MDggKzAxMDAKU3Vi amVjdDogW1BBVENIIHY0IDIvMl0gRml4IHByb2dyZXNzIHJlcG9ydCBmb3IgcGFydGl0aW9u ZWQgUkVJTkRFWAoKLS0tCiBzcmMvYmFja2VuZC9jYXRhbG9nL2luZGV4LmMgICAgICB8IDEx ICsrKystLQogc3JjL2JhY2tlbmQvY29tbWFuZHMvaW5kZXhjbWRzLmMgfCA2MyArKysrKysr KysrKysrKysrKysrKysrKysrKysrKy0tLQogc3JjL2luY2x1ZGUvY2F0YWxvZy9pbmRleC5o ICAgICAgfCAgMSArCiAzIGZpbGVzIGNoYW5nZWQsIDY2IGluc2VydGlvbnMoKyksIDkgZGVs ZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY2F0YWxvZy9pbmRleC5jIGIv c3JjL2JhY2tlbmQvY2F0YWxvZy9pbmRleC5jCmluZGV4IDU1ZmRkZTRiMjQuLmM1YmM3MmIz NTAgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NhdGFsb2cvaW5kZXguYworKysgYi9zcmMv YmFja2VuZC9jYXRhbG9nL2luZGV4LmMKQEAgLTM1NTksNiArMzU1OSw3IEBAIHJlaW5kZXhf aW5kZXgoY29uc3QgUmVpbmRleFN0bXQgKnN0bXQsIE9pZCBpbmRleElkLAogCXZvbGF0aWxl IGJvb2wgc2tpcHBlZF9jb25zdHJhaW50ID0gZmFsc2U7CiAJUEdSVXNhZ2UJcnUwOwogCWJv b2wJCXByb2dyZXNzID0gKChwYXJhbXMtPm9wdGlvbnMgJiBSRUlOREVYT1BUX1JFUE9SVF9Q Uk9HUkVTUykgIT0gMCk7CisJYm9vbAkJcGFydGl0aW9uID0gKChwYXJhbXMtPm9wdGlvbnMg JiBSRUlOREVYT1BUX1BBUlRJVElPTikgIT0gMCk7CiAJYm9vbAkJc2V0X3RhYmxlc3BhY2Ug PSBmYWxzZTsKIAogCXBnX3J1c2FnZV9pbml0KCZydTApOwpAQCAtMzYwNCw4ICszNjA1LDkg QEAgcmVpbmRleF9pbmRleChjb25zdCBSZWluZGV4U3RtdCAqc3RtdCwgT2lkIGluZGV4SWQs CiAJCQlpbmRleElkCiAJCX07CiAKLQkJcGdzdGF0X3Byb2dyZXNzX3N0YXJ0X2NvbW1hbmQo UFJPR1JFU1NfQ09NTUFORF9DUkVBVEVfSU5ERVgsCi0JCQkJCQkJCQkgIGhlYXBJZCk7CisJ CWlmICghcGFydGl0aW9uKQorCQkJcGdzdGF0X3Byb2dyZXNzX3N0YXJ0X2NvbW1hbmQoUFJP R1JFU1NfQ09NTUFORF9DUkVBVEVfSU5ERVgsCisJCQkJCQkJCQkJICBoZWFwSWQpOwogCQlw Z3N0YXRfcHJvZ3Jlc3NfdXBkYXRlX211bHRpX3BhcmFtKDIsIHByb2dyZXNzX2NvbHMsIHBy b2dyZXNzX3ZhbHMpOwogCX0KIApAQCAtMzg0NSw4ICszODQ3LDExIEBAIHJlaW5kZXhfaW5k ZXgoY29uc3QgUmVpbmRleFN0bXQgKnN0bXQsIE9pZCBpbmRleElkLAogCWluZGV4X2Nsb3Nl KGlSZWwsIE5vTG9jayk7CiAJdGFibGVfY2xvc2UoaGVhcFJlbGF0aW9uLCBOb0xvY2spOwog Ci0JaWYgKHByb2dyZXNzKQorCWlmIChwcm9ncmVzcyAmJiAhcGFydGl0aW9uKQorCXsKKwkJ LyogcHJvZ3Jlc3MgZm9yIHBhcnRpdGlvbnMgaXMgdHJhY2tlZCBpbiB0aGUgY2FsbGVyICov CiAJCXBnc3RhdF9wcm9ncmVzc19lbmRfY29tbWFuZCgpOworCX0KIH0KIAogLyoKZGlmZiAt LWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2luZGV4Y21kcy5jIGIvc3JjL2JhY2tlbmQv Y29tbWFuZHMvaW5kZXhjbWRzLmMKaW5kZXggNWRhMmRmMmQzYi4uMTdiMzBhZDZhYSAxMDA2 NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvaW5kZXhjbWRzLmMKKysrIGIvc3JjL2Jh Y2tlbmQvY29tbWFuZHMvaW5kZXhjbWRzLmMKQEAgLTExOCw2ICsxMTgsNyBAQCBzdGF0aWMg Ym9vbCBSZWluZGV4UmVsYXRpb25Db25jdXJyZW50bHkoY29uc3QgUmVpbmRleFN0bXQgKnN0 bXQsCiAJCQkJCQkJCQkJY29uc3QgUmVpbmRleFBhcmFtcyAqcGFyYW1zKTsKIHN0YXRpYyB2 b2lkIHVwZGF0ZV9yZWxpc3BhcnRpdGlvbihPaWQgcmVsYXRpb25JZCwgYm9vbCBuZXd2YWwp Owogc3RhdGljIGlubGluZSB2b2lkIHNldF9pbmRleHNhZmVfcHJvY2ZsYWdzKHZvaWQpOwor c3RhdGljIGlubGluZSB2b2lkIHByb2dyZXNzX2luZGV4X3BhcnRpdGlvbl9kb25lKHZvaWQp OwogCiAvKgogICogY2FsbGJhY2sgYXJndW1lbnQgdHlwZSBmb3IgUmFuZ2VWYXJDYWxsYmFj a0ZvclJlaW5kZXhJbmRleCgpCkBAIC0xNTUwLDcgKzE1NTEsNyBAQCBEZWZpbmVJbmRleChP aWQgdGFibGVJZCwKIAkJCQkgKiBVcGRhdGUgcHJvZ3Jlc3MgZm9yIGFuIGludGVybWVkaWF0 ZSBwYXJ0aXRpb25lZCBpbmRleAogCQkJCSAqIGl0c2VsZgogCQkJCSAqLwotCQkJCXBnc3Rh dF9wcm9ncmVzc19pbmNyX3BhcmFtKFBST0dSRVNTX0NSRUFURUlEWF9QQVJUSVRJT05TX0RP TkUsIDEpOworCQkJCXByb2dyZXNzX2luZGV4X3BhcnRpdGlvbl9kb25lKCk7CiAJCQl9CiAK IAkJCXJldHVybiBhZGRyZXNzOwpAQCAtMTU3Nyw3ICsxNTc4LDcgQEAgRGVmaW5lSW5kZXgo T2lkIHRhYmxlSWQsCiAJCWlmICghT2lkSXNWYWxpZChwYXJlbnRJbmRleElkKSkKIAkJCXBn c3RhdF9wcm9ncmVzc19lbmRfY29tbWFuZCgpOwogCQllbHNlIGlmICghY29uY3VycmVudCkK LQkJCXBnc3RhdF9wcm9ncmVzc19pbmNyX3BhcmFtKFBST0dSRVNTX0NSRUFURUlEWF9QQVJU SVRJT05TX0RPTkUsIDEpOworCQkJcHJvZ3Jlc3NfaW5kZXhfcGFydGl0aW9uX2RvbmUoKTsK IAogCQlyZXR1cm4gYWRkcmVzczsKIAl9CkBAIC0xNjgyLDcgKzE2ODMsNyBAQCBEZWZpbmVJ bmRleChPaWQgdGFibGVJZCwKIAkJCQkJCQkJCQkgIGhlYXBsb2NrdGFnLCBoZWFwcmVsaWQp OwogCiAJCQlQdXNoQWN0aXZlU25hcHNob3QoR2V0VHJhbnNhY3Rpb25TbmFwc2hvdCgpKTsK LQkJCXBnc3RhdF9wcm9ncmVzc19pbmNyX3BhcmFtKFBST0dSRVNTX0NSRUFURUlEWF9QQVJU SVRJT05TX0RPTkUsIDEpOworCQkJcHJvZ3Jlc3NfaW5kZXhfcGFydGl0aW9uX2RvbmUoKTsK IAkJfQogCiAJCS8qIFNldCBhcyB2YWxpZCBhbGwgcGFydGl0aW9uZWQgaW5kZXhlcywgaW5j bHVkaW5nIHRoZSBwYXJlbnQgKi8KQEAgLTMzMjcsNiArMzMyOCwxNCBAQCBSZWluZGV4UGFy dGl0aW9ucyhjb25zdCBSZWluZGV4U3RtdCAqc3RtdCwgT2lkIHJlbGlkLCBjb25zdCBSZWlu ZGV4UGFyYW1zICpwYXJhbQogCUxpc3RDZWxsICAgKmxjOwogCUVycm9yQ29udGV4dENhbGxi YWNrIGVycmNhbGxiYWNrOwogCVJlaW5kZXhFcnJvckluZm8gZXJyaW5mbzsKKwlSZWluZGV4 UGFyYW1zIG5ld3BhcmFtczsKKwlpbnQJCQlwcm9ncmVzc19wYXJhbXNbM10gPSB7CisJCVBS T0dSRVNTX0NSRUFURUlEWF9DT01NQU5ELAorCQlQUk9HUkVTU19DUkVBVEVJRFhfUEhBU0Us CisJCVBST0dSRVNTX0NSRUFURUlEWF9QQVJUSVRJT05TX1RPVEFMCisJfTsKKwlpbnQ2NAkJ cHJvZ3Jlc3NfdmFsdWVzWzNdOworCU9pZAkJCWhlYXBJZCA9IHJlbGlkOwogCiAJQXNzZXJ0 KFJFTEtJTkRfSEFTX1BBUlRJVElPTlMocmVsa2luZCkpOwogCkBAIC0zMzg4LDExICszMzk3 LDI4IEBAIFJlaW5kZXhQYXJ0aXRpb25zKGNvbnN0IFJlaW5kZXhTdG10ICpzdG10LCBPaWQg cmVsaWQsIGNvbnN0IFJlaW5kZXhQYXJhbXMgKnBhcmFtCiAJCU1lbW9yeUNvbnRleHRTd2l0 Y2hUbyhvbGRfY29udGV4dCk7CiAJfQogCisJaWYgKHJlbGtpbmQgPT0gUkVMS0lORF9QQVJU SVRJT05FRF9JTkRFWCkKKwl7CisJCWhlYXBJZCA9IEluZGV4R2V0UmVsYXRpb24ocmVsaWQs IHRydWUpOworCX0KKworCXByb2dyZXNzX3ZhbHVlc1swXSA9IChwYXJhbXMtPm9wdGlvbnMg JiBSRUlOREVYT1BUX0NPTkNVUlJFTlRMWSkgIT0gMCA/CisJCVBST0dSRVNTX0NSRUFURUlE WF9DT01NQU5EX1JFSU5ERVhfQ09OQ1VSUkVOVExZIDoKKwkJUFJPR1JFU1NfQ1JFQVRFSURY X0NPTU1BTkRfUkVJTkRFWDsKKwlwcm9ncmVzc192YWx1ZXNbMV0gPSAwOworCXByb2dyZXNz X3ZhbHVlc1syXSA9IGxpc3RfbGVuZ3RoKHBhcnRpdGlvbnMpOworCXBnc3RhdF9wcm9ncmVz c19zdGFydF9jb21tYW5kKFBST0dSRVNTX0NPTU1BTkRfQ1JFQVRFX0lOREVYLCBoZWFwSWQp OworCXBnc3RhdF9wcm9ncmVzc191cGRhdGVfbXVsdGlfcGFyYW0oMywgcHJvZ3Jlc3NfcGFy YW1zLCBwcm9ncmVzc192YWx1ZXMpOworCiAJLyoKIAkgKiBQcm9jZXNzIGVhY2ggcGFydGl0 aW9uIGxpc3RlZCBpbiBhIHNlcGFyYXRlIHRyYW5zYWN0aW9uLiAgTm90ZSB0aGF0CiAJICog dGhpcyBjb21taXRzIGFuZCB0aGVuIHN0YXJ0cyBhIG5ldyB0cmFuc2FjdGlvbiBpbW1lZGlh dGVseS4KIAkgKi8KLQlSZWluZGV4TXVsdGlwbGVJbnRlcm5hbChzdG10LCBwYXJ0aXRpb25z LCBwYXJhbXMpOworCW5ld3BhcmFtcyA9ICpwYXJhbXM7CisJbmV3cGFyYW1zLm9wdGlvbnMg fD0gUkVJTkRFWE9QVF9QQVJUSVRJT047CisJUmVpbmRleE11bHRpcGxlSW50ZXJuYWwoc3Rt dCwgcGFydGl0aW9ucywgJm5ld3BhcmFtcyk7CisKKwlwZ3N0YXRfcHJvZ3Jlc3NfZW5kX2Nv bW1hbmQoKTsKIAogCS8qCiAJICogQ2xlYW4gdXAgd29ya2luZyBzdG9yYWdlIC0tLSBub3Rl IHdlIG11c3QgZG8gdGhpcyBhZnRlcgpAQCAtMzQxMyw2ICszNDM5LDcgQEAgc3RhdGljIHZv aWQKIFJlaW5kZXhNdWx0aXBsZUludGVybmFsKGNvbnN0IFJlaW5kZXhTdG10ICpzdG10LCBj b25zdCBMaXN0ICpyZWxpZHMsIGNvbnN0IFJlaW5kZXhQYXJhbXMgKnBhcmFtcykKIHsKIAlM aXN0Q2VsbCAgICpsOworCWJvb2wJCXBhcnRpdGlvbnMgPSAoKHBhcmFtcy0+b3B0aW9ucyAm IFJFSU5ERVhPUFRfUEFSVElUSU9OKSAhPSAwKTsKIAogCVBvcEFjdGl2ZVNuYXBzaG90KCk7 CiAJQ29tbWl0VHJhbnNhY3Rpb25Db21tYW5kKCk7CkBAIC0zNTA2LDYgKzM1MzMsOSBAQCBS ZWluZGV4TXVsdGlwbGVJbnRlcm5hbChjb25zdCBSZWluZGV4U3RtdCAqc3RtdCwgY29uc3Qg TGlzdCAqcmVsaWRzLCBjb25zdCBSZWluZAogCQl9CiAKIAkJQ29tbWl0VHJhbnNhY3Rpb25D b21tYW5kKCk7CisKKwkJaWYgKHBhcnRpdGlvbnMpCisJCQlwcm9ncmVzc19pbmRleF9wYXJ0 aXRpb25fZG9uZSgpOwogCX0KIAogCVN0YXJ0VHJhbnNhY3Rpb25Db21tYW5kKCk7CkBAIC0z NTU4LDYgKzM1ODgsNyBAQCBSZWluZGV4UmVsYXRpb25Db25jdXJyZW50bHkoY29uc3QgUmVp bmRleFN0bXQgKnN0bXQsIE9pZCByZWxhdGlvbk9pZCwgY29uc3QgUmVpbgogCWNoYXIJICAg KnJlbGF0aW9uTmFtZSA9IE5VTEw7CiAJY2hhcgkgICAqcmVsYXRpb25OYW1lc3BhY2UgPSBO VUxMOwogCVBHUlVzYWdlCXJ1MDsKKwlib29sCQlwYXJ0aXRpb24gPSAoKHBhcmFtcy0+b3B0 aW9ucyAmIFJFSU5ERVhPUFRfUEFSVElUSU9OKSAhPSAwKTsKIAljb25zdCBpbnQJcHJvZ3Jl c3NfaW5kZXhbXSA9IHsKIAkJUFJPR1JFU1NfQ1JFQVRFSURYX0NPTU1BTkQsCiAJCVBST0dS RVNTX0NSRUFURUlEWF9QSEFTRSwKQEAgLTM5MDEsNyArMzkzMiw4IEBAIFJlaW5kZXhSZWxh dGlvbkNvbmN1cnJlbnRseShjb25zdCBSZWluZGV4U3RtdCAqc3RtdCwgT2lkIHJlbGF0aW9u T2lkLCBjb25zdCBSZWluCiAJCWlmIChpbmRleFJlbC0+cmRfcmVsLT5yZWxwZXJzaXN0ZW5j ZSA9PSBSRUxQRVJTSVNURU5DRV9URU1QKQogCQkJZWxvZyhFUlJPUiwgImNhbm5vdCByZWlu ZGV4IGEgdGVtcG9yYXJ5IHRhYmxlIGNvbmN1cnJlbnRseSIpOwogCi0JCXBnc3RhdF9wcm9n cmVzc19zdGFydF9jb21tYW5kKFBST0dSRVNTX0NPTU1BTkRfQ1JFQVRFX0lOREVYLCBpZHgt PnRhYmxlSWQpOworCQlpZiAoIXBhcnRpdGlvbikKKwkJCXBnc3RhdF9wcm9ncmVzc19zdGFy dF9jb21tYW5kKFBST0dSRVNTX0NPTU1BTkRfQ1JFQVRFX0lOREVYLCBpZHgtPnRhYmxlSWQp OwogCiAJCXByb2dyZXNzX3ZhbHNbMF0gPSBQUk9HUkVTU19DUkVBVEVJRFhfQ09NTUFORF9S RUlOREVYX0NPTkNVUlJFTlRMWTsKIAkJcHJvZ3Jlc3NfdmFsc1sxXSA9IDA7CS8qIGluaXRp YWxpemluZyAqLwpAQCAtNDM3NSw3ICs0NDA3LDggQEAgUmVpbmRleFJlbGF0aW9uQ29uY3Vy cmVudGx5KGNvbnN0IFJlaW5kZXhTdG10ICpzdG10LCBPaWQgcmVsYXRpb25PaWQsIGNvbnN0 IFJlaW4KIAogCU1lbW9yeUNvbnRleHREZWxldGUocHJpdmF0ZV9jb250ZXh0KTsKIAotCXBn c3RhdF9wcm9ncmVzc19lbmRfY29tbWFuZCgpOworCWlmICghcGFydGl0aW9uKQorCQlwZ3N0 YXRfcHJvZ3Jlc3NfZW5kX2NvbW1hbmQoKTsKIAogCXJldHVybiB0cnVlOwogfQpAQCAtNDU2 NSwzICs0NTk4LDIxIEBAIHNldF9pbmRleHNhZmVfcHJvY2ZsYWdzKHZvaWQpCiAJUHJvY0ds b2JhbC0+c3RhdHVzRmxhZ3NbTXlQcm9jLT5wZ3hhY3RvZmZdID0gTXlQcm9jLT5zdGF0dXNG bGFnczsKIAlMV0xvY2tSZWxlYXNlKFByb2NBcnJheUxvY2spOwogfQorCitzdGF0aWMgaW5s aW5lIHZvaWQKK3Byb2dyZXNzX2luZGV4X3BhcnRpdGlvbl9kb25lKHZvaWQpCit7CisJaW50 CQkJbnBhcmFtID0gNjsKKwljb25zdCBpbnQJcHJvZ3Jlc3NfaWR4W10gPSB7CisJCVBST0dS RVNTX0NSRUFURUlEWF9JTkRFWF9PSUQsCisJCVBST0dSRVNTX0NSRUFURUlEWF9BQ0NFU1Nf TUVUSE9EX09JRCwKKwkJUFJPR1JFU1NfQ1JFQVRFSURYX1BIQVNFLAorCQlQUk9HUkVTU19D UkVBVEVJRFhfU1VCUEhBU0UsCisJCVBST0dSRVNTX0NSRUFURUlEWF9UVVBMRVNfVE9UQUws CisJCVBST0dSRVNTX0NSRUFURUlEWF9UVVBMRVNfRE9ORQorCX07CisJY29uc3QgaW50NjQg cHJvZ3Jlc3NfdmFsc1tdID0gezAsIDAsIDAsIDAsIDAsIDB9OworCisJcGdzdGF0X3Byb2dy ZXNzX3VwZGF0ZV9tdWx0aV9wYXJhbShucGFyYW0sIHByb2dyZXNzX2lkeCwgcHJvZ3Jlc3Nf dmFscyk7CisJcGdzdGF0X3Byb2dyZXNzX2luY3JfcGFyYW0oUFJPR1JFU1NfQ1JFQVRFSURY X1BBUlRJVElPTlNfRE9ORSwgMSk7Cit9CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9jYXRh bG9nL2luZGV4LmggYi9zcmMvaW5jbHVkZS9jYXRhbG9nL2luZGV4LmgKaW5kZXggN2Q0MzRm OGU2NS4uY2NiYTY1ZmJiZiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9pbmRl eC5oCisrKyBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvaW5kZXguaApAQCAtNDIsNiArNDIsNyBA QCB0eXBlZGVmIHN0cnVjdCBSZWluZGV4UGFyYW1zCiAjZGVmaW5lIFJFSU5ERVhPUFRfUkVQ T1JUX1BST0dSRVNTIDB4MDIgLyogcmVwb3J0IHBnc3RhdCBwcm9ncmVzcyAqLwogI2RlZmlu ZSBSRUlOREVYT1BUX01JU1NJTkdfT0sgCTB4MDQJLyogc2tpcCBtaXNzaW5nIHJlbGF0aW9u cyAqLwogI2RlZmluZSBSRUlOREVYT1BUX0NPTkNVUlJFTlRMWQkweDA4CS8qIGNvbmN1cnJl bnQgbW9kZSAqLworI2RlZmluZSBSRUlOREVYT1BUX1BBUlRJVElPTiAweDEwIC8qIHJlaW5k ZXhpbmcgaXMgZG9uZSBhcyBwYXJ0IG9mIHBhcnRpdGlvbmVkIHRhYmxlL2luZGV4IHJlaW5k ZXggKi8KIAogLyogc3RhdGUgaW5mbyBmb3IgdmFsaWRhdGVfaW5kZXggYnVsa2RlbGV0ZSBj YWxsYmFjayAqLwogdHlwZWRlZiBzdHJ1Y3QgVmFsaWRhdGVJbmRleFN0YXRlCi0tIAoyLjQz LjAKCg== --------------aArlsvv7cBqNFubEXqjDeYDV Content-Type: text/x-patch; charset=UTF-8; name="v4-0001-Allow-CREATE-INDEX-CONCURRENTLY-on-partitioned-ta.patch" Content-Disposition: attachment; filename*0="v4-0001-Allow-CREATE-INDEX-CONCURRENTLY-on-partitioned-ta.pa"; filename*1="tch" Content-Transfer-Encoding: base64 RnJvbSA0NTU3NjI5MjAxMjQ2OGYyZDNkZWVhMGU1NjhlZTc0ODkxY2I3M2IxIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBJbHlhIEdsYWR5c2hldiA8aWx5YS52LmdsYWR5c2hl dkBnbWFpbC5jb20+CkRhdGU6IFRodSwgMjMgTWF5IDIwMjQgMTg6MTM6NDEgKzAxMDAKU3Vi amVjdDogW1BBVENIIHY0IDEvMl0gQWxsb3cgQ1JFQVRFIElOREVYIENPTkNVUlJFTlRMWSBv biBwYXJ0aXRpb25lZCB0YWJsZQoKLS0tCiBkb2Mvc3JjL3NnbWwvZGRsLnNnbWwgICAgICAg ICAgICAgICAgICB8ICAxMCArLQogZG9jL3NyYy9zZ21sL3JlZi9jcmVhdGVfaW5kZXguc2dt bCAgICAgfCAgMTQgKy0KIHNyYy9iYWNrZW5kL2NvbW1hbmRzL2luZGV4Y21kcy5jICAgICAg IHwgMjI0ICsrKysrKysrKysrKysrKysrKystLS0tLS0KIHNyYy90ZXN0L3JlZ3Jlc3MvZXhw ZWN0ZWQvaW5kZXhpbmcub3V0IHwgMTI3ICsrKysrKysrKysrKystCiBzcmMvdGVzdC9yZWdy ZXNzL3NxbC9pbmRleGluZy5zcWwgICAgICB8ICAyNiArKy0KIDUgZmlsZXMgY2hhbmdlZCwg MzIzIGluc2VydGlvbnMoKyksIDc4IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2RvYy9z cmMvc2dtbC9kZGwuc2dtbCBiL2RvYy9zcmMvc2dtbC9kZGwuc2dtbAppbmRleCA2YWFiNzll OTAxLi45MDQ5NzhjNmU1IDEwMDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwvZGRsLnNnbWwKKysr IGIvZG9jL3NyYy9zZ21sL2RkbC5zZ21sCkBAIC00MzE0LDE0ICs0MzE0LDEyIEBAIEFMVEVS IFRBQkxFIG1lYXN1cmVtZW50IEFUVEFDSCBQQVJUSVRJT04gbWVhc3VyZW1lbnRfeTIwMDht MDIKICAgICAgQXMgbWVudGlvbmVkIGVhcmxpZXIsIGl0IGlzIHBvc3NpYmxlIHRvIGNyZWF0 ZSBpbmRleGVzIG9uIHBhcnRpdGlvbmVkCiAgICAgIHRhYmxlcyBzbyB0aGF0IHRoZXkgYXJl IGFwcGxpZWQgYXV0b21hdGljYWxseSB0byB0aGUgZW50aXJlIGhpZXJhcmNoeS4KICAgICAg VGhpcyBjYW4gYmUgdmVyeSBjb252ZW5pZW50IGFzIG5vdCBvbmx5IHdpbGwgYWxsIGV4aXN0 aW5nIHBhcnRpdGlvbnMgYmUKLSAgICAgaW5kZXhlZCwgYnV0IGFueSBmdXR1cmUgcGFydGl0 aW9ucyB3aWxsIGJlIGFzIHdlbGwuICBIb3dldmVyLCBvbmUKLSAgICAgbGltaXRhdGlvbiB3 aGVuIGNyZWF0aW5nIG5ldyBpbmRleGVzIG9uIHBhcnRpdGlvbmVkIHRhYmxlcyBpcyB0aGF0 IGl0Ci0gICAgIGlzIG5vdCBwb3NzaWJsZSB0byB1c2UgdGhlIDxsaXRlcmFsPkNPTkNVUlJF TlRMWTwvbGl0ZXJhbD4KLSAgICAgcXVhbGlmaWVyLCB3aGljaCBjb3VsZCBsZWFkIHRvIGxv bmcgbG9jayB0aW1lcy4gIFRvIGF2b2lkIHRoaXMsIHlvdSBjYW4KLSAgICAgdXNlIDxjb21t YW5kPkNSRUFURSBJTkRFWCBPTiBPTkxZPC9jb21tYW5kPiB0aGUgcGFydGl0aW9uZWQgdGFi bGUsIHdoaWNoCisgICAgIGluZGV4ZWQsIGJ1dCBhbnkgZnV0dXJlIHBhcnRpdGlvbnMgd2ls bCBiZSBhcyB3ZWxsLiBGb3IgbW9yZSBjb250cm9sIG92ZXIKKyAgICAgbG9ja2luZyBvZiB0 aGUgcGFydGl0aW9ucyB5b3UgY2FuIHVzZSA8Y29tbWFuZD5DUkVBVEUgSU5ERVggT04gT05M WTwvY29tbWFuZD4KKyAgICAgb24gdGhlIHBhcnRpdGlvbmVkIHRhYmxlLCB3aGljaAogICAg ICBjcmVhdGVzIHRoZSBuZXcgaW5kZXggbWFya2VkIGFzIGludmFsaWQsIHByZXZlbnRpbmcg YXV0b21hdGljIGFwcGxpY2F0aW9uCiAgICAgIHRvIGV4aXN0aW5nIHBhcnRpdGlvbnMuICBJ bnN0ZWFkLCBpbmRleGVzIGNhbiB0aGVuIGJlIGNyZWF0ZWQgaW5kaXZpZHVhbGx5Ci0gICAg IG9uIGVhY2ggcGFydGl0aW9uIHVzaW5nIDxsaXRlcmFsPkNPTkNVUlJFTlRMWTwvbGl0ZXJh bD4gYW5kCisgICAgIG9uIGVhY2ggcGFydGl0aW9uIGFuZAogICAgICA8Zmlyc3R0ZXJtPmF0 dGFjaGVkPC9maXJzdHRlcm0+IHRvIHRoZSBwYXJ0aXRpb25lZCBpbmRleCBvbiB0aGUgcGFy ZW50CiAgICAgIHVzaW5nIDxjb21tYW5kPkFMVEVSIElOREVYIC4uLiBBVFRBQ0ggUEFSVElU SU9OPC9jb21tYW5kPi4gIE9uY2UgaW5kZXhlcyBmb3IKICAgICAgYWxsIHRoZSBwYXJ0aXRp b25zIGFyZSBhdHRhY2hlZCB0byB0aGUgcGFyZW50IGluZGV4LCB0aGUgcGFyZW50IGluZGV4 IHdpbGwKZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9yZWYvY3JlYXRlX2luZGV4LnNnbWwg Yi9kb2Mvc3JjL3NnbWwvcmVmL2NyZWF0ZV9pbmRleC5zZ21sCmluZGV4IDYyMWJjMGUyNTMu LjIzNjZjZmQ5YjUgMTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC9yZWYvY3JlYXRlX2luZGV4 LnNnbWwKKysrIGIvZG9jL3NyYy9zZ21sL3JlZi9jcmVhdGVfaW5kZXguc2dtbApAQCAtNjQ1 LDcgKzY0NSwxMCBAQCBDUkVBVEUgWyBVTklRVUUgXSBJTkRFWCBbIENPTkNVUlJFTlRMWSBd IFsgWyBJRiBOT1QgRVhJU1RTIF0gPHJlcGxhY2VhYmxlIGNsYXNzPQogICAgPHBhcmE+CiAg ICAgSWYgYSBwcm9ibGVtIGFyaXNlcyB3aGlsZSBzY2FubmluZyB0aGUgdGFibGUsIHN1Y2gg YXMgYSBkZWFkbG9jayBvciBhCiAgICAgdW5pcXVlbmVzcyB2aW9sYXRpb24gaW4gYSB1bmlx dWUgaW5kZXgsIHRoZSA8Y29tbWFuZD5DUkVBVEUgSU5ERVg8L2NvbW1hbmQ+Ci0gICAgY29t bWFuZCB3aWxsIGZhaWwgYnV0IGxlYXZlIGJlaGluZCBhbiA8cXVvdGU+aW52YWxpZDwvcXVv dGU+IGluZGV4LiBUaGlzIGluZGV4CisgICAgY29tbWFuZCB3aWxsIGZhaWwgYnV0IGxlYXZl IGJlaGluZCBhbiA8cXVvdGU+aW52YWxpZDwvcXVvdGU+IGluZGV4LgorICAgIElmIHRoaXMg aGFwcGVucyB3aGlsZSBidWlsZCBhbiBpbmRleCBjb25jdXJyZW50bHkgb24gYSBwYXJ0aXRp b25lZAorICAgIHRhYmxlLCB0aGUgY29tbWFuZCBjYW4gYWxzbyBsZWF2ZSBiZWhpbmQgPHF1 b3RlPnZhbGlkPC9xdW90ZT4gb3IKKyAgICA8cXVvdGU+aW52YWxpZDwvcXVvdGU+IGluZGV4 ZXMgb24gdGFibGUgcGFydGl0aW9ucy4gIFRoZSBpbnZhbGlkIGluZGV4CiAgICAgd2lsbCBi ZSBpZ25vcmVkIGZvciBxdWVyeWluZyBwdXJwb3NlcyBiZWNhdXNlIGl0IG1pZ2h0IGJlIGlu Y29tcGxldGU7CiAgICAgaG93ZXZlciBpdCB3aWxsIHN0aWxsIGNvbnN1bWUgdXBkYXRlIG92 ZXJoZWFkLiBUaGUgPGFwcGxpY2F0aW9uPnBzcWw8L2FwcGxpY2F0aW9uPgogICAgIDxjb21t YW5kPlxkPC9jb21tYW5kPiBjb21tYW5kIHdpbGwgcmVwb3J0IHN1Y2ggYW4gaW5kZXggYXMg PGxpdGVyYWw+SU5WQUxJRDwvbGl0ZXJhbD46CkBAIC02OTIsMTUgKzY5NSw2IEBAIEluZGV4 ZXM6CiAgICAgY2Fubm90LgogICAgPC9wYXJhPgogCi0gICA8cGFyYT4KLSAgICBDb25jdXJy ZW50IGJ1aWxkcyBmb3IgaW5kZXhlcyBvbiBwYXJ0aXRpb25lZCB0YWJsZXMgYXJlIGN1cnJl bnRseSBub3QKLSAgICBzdXBwb3J0ZWQuICBIb3dldmVyLCB5b3UgbWF5IGNvbmN1cnJlbnRs eSBidWlsZCB0aGUgaW5kZXggb24gZWFjaAotICAgIHBhcnRpdGlvbiBpbmRpdmlkdWFsbHkg YW5kIHRoZW4gZmluYWxseSBjcmVhdGUgdGhlIHBhcnRpdGlvbmVkIGluZGV4Ci0gICAgbm9u LWNvbmN1cnJlbnRseSBpbiBvcmRlciB0byByZWR1Y2UgdGhlIHRpbWUgd2hlcmUgd3JpdGVz IHRvIHRoZQotICAgIHBhcnRpdGlvbmVkIHRhYmxlIHdpbGwgYmUgbG9ja2VkIG91dC4gIElu IHRoaXMgY2FzZSwgYnVpbGRpbmcgdGhlCi0gICAgcGFydGl0aW9uZWQgaW5kZXggaXMgYSBt ZXRhZGF0YSBvbmx5IG9wZXJhdGlvbi4KLSAgIDwvcGFyYT4KLQogICA8L3JlZnNlY3QyPgog IDwvcmVmc2VjdDE+CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2luZGV4 Y21kcy5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvaW5kZXhjbWRzLmMKaW5kZXggMzA5Mzg5 ZTIwZC4uNWRhMmRmMmQzYiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvaW5k ZXhjbWRzLmMKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvaW5kZXhjbWRzLmMKQEAgLTk1 LDYgKzk1LDExIEBAIHN0YXRpYyBjaGFyICpDaG9vc2VJbmRleE5hbWUoY29uc3QgY2hhciAq dGFibmFtZSwgT2lkIG5hbWVzcGFjZUlkLAogCQkJCQkJCSBib29sIHByaW1hcnksIGJvb2wg aXNjb25zdHJhaW50KTsKIHN0YXRpYyBjaGFyICpDaG9vc2VJbmRleE5hbWVBZGRpdGlvbihj b25zdCBMaXN0ICpjb2xuYW1lcyk7CiBzdGF0aWMgTGlzdCAqQ2hvb3NlSW5kZXhDb2x1bW5O YW1lcyhjb25zdCBMaXN0ICppbmRleEVsZW1zKTsKK3N0YXRpYyB2b2lkIERlZmluZUluZGV4 Q29uY3VycmVudEludGVybmFsKE9pZCByZWxhdGlvbklkLAorCQkJCQkJCQkJCSAgT2lkIGlu ZGV4UmVsYXRpb25JZCwKKwkJCQkJCQkJCQkgIEluZGV4SW5mbyAqaW5kZXhJbmZvLAorCQkJ CQkJCQkJCSAgTE9DS1RBRyBoZWFwbG9ja3RhZywKKwkJCQkJCQkJCQkgIExvY2tSZWxJZCBo ZWFwcmVsaWQpOwogc3RhdGljIHZvaWQgUmVpbmRleEluZGV4KGNvbnN0IFJlaW5kZXhTdG10 ICpzdG10LCBjb25zdCBSZWluZGV4UGFyYW1zICpwYXJhbXMsCiAJCQkJCQkgYm9vbCBpc1Rv cExldmVsKTsKIHN0YXRpYyB2b2lkIFJhbmdlVmFyQ2FsbGJhY2tGb3JSZWluZGV4SW5kZXgo Y29uc3QgUmFuZ2VWYXIgKnJlbGF0aW9uLApAQCAtNTYxLDcgKzU2Niw2IEBAIERlZmluZUlu ZGV4KE9pZCB0YWJsZUlkLAogCWJvb2wJCWFtaXNzdW1tYXJpemluZzsKIAlhbW9wdGlvbnNf ZnVuY3Rpb24gYW1vcHRpb25zOwogCWJvb2wJCXBhcnRpdGlvbmVkOwotCWJvb2wJCXNhZmVf aW5kZXg7CiAJRGF0dW0JCXJlbG9wdGlvbnM7CiAJaW50MTYJICAgKmNvbG9wdGlvbnM7CiAJ SW5kZXhJbmZvICAqaW5kZXhJbmZvOwpAQCAtNTY5LDEyICs1NzMsMTAgQEAgRGVmaW5lSW5k ZXgoT2lkIHRhYmxlSWQsCiAJYml0czE2CQljb25zdHJfZmxhZ3M7CiAJaW50CQkJbnVtYmVy T2ZBdHRyaWJ1dGVzOwogCWludAkJCW51bWJlck9mS2V5QXR0cmlidXRlczsKLQlUcmFuc2Fj dGlvbklkIGxpbWl0WG1pbjsKIAlPYmplY3RBZGRyZXNzIGFkZHJlc3M7CiAJTG9ja1JlbElk CWhlYXByZWxpZDsKIAlMT0NLVEFHCQloZWFwbG9ja3RhZzsKIAlMT0NLTU9ERQlsb2NrbW9k ZTsKLQlTbmFwc2hvdAlzbmFwc2hvdDsKIAlPaWQJCQlyb290X3NhdmVfdXNlcmlkOwogCWlu dAkJCXJvb3Rfc2F2ZV9zZWNfY29udGV4dDsKIAlpbnQJCQlyb290X3NhdmVfbmVzdGxldmVs OwpAQCAtNzA2LDIwICs3MDgsNiBAQCBEZWZpbmVJbmRleChPaWQgdGFibGVJZCwKIAkgKiBw YXJ0aXRpb24uCiAJICovCiAJcGFydGl0aW9uZWQgPSByZWwtPnJkX3JlbC0+cmVsa2luZCA9 PSBSRUxLSU5EX1BBUlRJVElPTkVEX1RBQkxFOwotCWlmIChwYXJ0aXRpb25lZCkKLQl7Ci0J CS8qCi0JCSAqIE5vdGU6IHdlIGNoZWNrICdzdG10LT5jb25jdXJyZW50JyByYXRoZXIgdGhh biAnY29uY3VycmVudCcsIHNvIHRoYXQKLQkJICogdGhlIGVycm9yIGlzIHRocm93biBhbHNv IGZvciB0ZW1wb3JhcnkgdGFibGVzLiAgU2VlbXMgYmV0dGVyIHRvIGJlCi0JCSAqIGNvbnNp c3RlbnQsIGV2ZW4gdGhvdWdoIHdlIGNvdWxkIGRvIGl0IG9uIHRlbXBvcmFyeSB0YWJsZSBi ZWNhdXNlCi0JCSAqIHdlJ3JlIG5vdCBhY3R1YWxseSBkb2luZyBpdCBjb25jdXJyZW50bHku Ci0JCSAqLwotCQlpZiAoc3RtdC0+Y29uY3VycmVudCkKLQkJCWVyZXBvcnQoRVJST1IsCi0J CQkJCShlcnJjb2RlKEVSUkNPREVfRkVBVFVSRV9OT1RfU1VQUE9SVEVEKSwKLQkJCQkJIGVy cm1zZygiY2Fubm90IGNyZWF0ZSBpbmRleCBvbiBwYXJ0aXRpb25lZCB0YWJsZSBcIiVzXCIg Y29uY3VycmVudGx5IiwKLQkJCQkJCQlSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShyZWwpKSkp OwotCX0KIAogCS8qCiAJICogRG9uJ3QgdHJ5IHRvIENSRUFURSBJTkRFWCBvbiB0ZW1wIHRh YmxlcyBvZiBvdGhlciBiYWNrZW5kcy4KQEAgLTExMTYsMTAgKzExMDQsNiBAQCBEZWZpbmVJ bmRleChPaWQgdGFibGVJZCwKIAkJfQogCX0KIAotCS8qIElzIGluZGV4IHNhZmUgZm9yIG90 aGVycyB0byBpZ25vcmU/ICBTZWUgc2V0X2luZGV4c2FmZV9wcm9jZmxhZ3MoKSAqLwotCXNh ZmVfaW5kZXggPSBpbmRleEluZm8tPmlpX0V4cHJlc3Npb25zID09IE5JTCAmJgotCQlpbmRl eEluZm8tPmlpX1ByZWRpY2F0ZSA9PSBOSUw7Ci0KIAkvKgogCSAqIFJlcG9ydCBpbmRleCBj cmVhdGlvbiBpZiBhcHByb3ByaWF0ZSAoZGVsYXkgdGhpcyB0aWxsIGFmdGVyIG1vc3Qgb2Yg dGhlCiAJICogZXJyb3IgY2hlY2tzKQpAQCAtMTE4NCw2ICsxMTY4LDExIEBAIERlZmluZUlu ZGV4KE9pZCB0YWJsZUlkLAogCQlpZiAocGQtPm5wYXJ0cyAhPSAwKQogCQkJZmxhZ3MgfD0g SU5ERVhfQ1JFQVRFX0lOVkFMSUQ7CiAJfQorCWVsc2UgaWYgKGNvbmN1cnJlbnQgJiYgT2lk SXNWYWxpZChwYXJlbnRJbmRleElkKSkKKwl7CisJCS8qIElmIGNvbmN1cnJlbnQsIGluaXRp YWxseSBidWlsZCBpbmRleCBwYXJ0aXRpb25zIGFzICJpbnZhbGlkIiAqLworCQlmbGFncyB8 PSBJTkRFWF9DUkVBVEVfSU5WQUxJRDsKKwl9CiAKIAlpZiAoc3RtdC0+ZGVmZXJyYWJsZSkK IAkJY29uc3RyX2ZsYWdzIHw9IElOREVYX0NPTlNUUl9DUkVBVEVfREVGRVJSQUJMRTsKQEAg LTE1MzMsMjEgKzE1MjIsNyBAQCBEZWZpbmVJbmRleChPaWQgdGFibGVJZCwKIAkJCSAqLwog CQkJaWYgKGludmFsaWRhdGVfcGFyZW50KQogCQkJewotCQkJCVJlbGF0aW9uCXBnX2luZGV4 ID0gdGFibGVfb3BlbihJbmRleFJlbGF0aW9uSWQsIFJvd0V4Y2x1c2l2ZUxvY2spOwotCQkJ CUhlYXBUdXBsZQl0dXAsCi0JCQkJCQkJbmV3dHVwOwotCi0JCQkJdHVwID0gU2VhcmNoU3lz Q2FjaGUxKElOREVYUkVMSUQsCi0JCQkJCQkJCQkgIE9iamVjdElkR2V0RGF0dW0oaW5kZXhS ZWxhdGlvbklkKSk7Ci0JCQkJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKHR1cCkpCi0JCQkJCWVs b2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciBpbmRleCAldSIsCi0JCQkJCQkg aW5kZXhSZWxhdGlvbklkKTsKLQkJCQluZXd0dXAgPSBoZWFwX2NvcHl0dXBsZSh0dXApOwot CQkJCSgoRm9ybV9wZ19pbmRleCkgR0VUU1RSVUNUKG5ld3R1cCkpLT5pbmRpc3ZhbGlkID0g ZmFsc2U7Ci0JCQkJQ2F0YWxvZ1R1cGxlVXBkYXRlKHBnX2luZGV4LCAmdHVwLT50X3NlbGYs IG5ld3R1cCk7Ci0JCQkJUmVsZWFzZVN5c0NhY2hlKHR1cCk7Ci0JCQkJdGFibGVfY2xvc2Uo cGdfaW5kZXgsIFJvd0V4Y2x1c2l2ZUxvY2spOwotCQkJCWhlYXBfZnJlZXR1cGxlKG5ld3R1 cCk7CisJCQkJaW5kZXhfc2V0X3N0YXRlX2ZsYWdzKGluZGV4UmVsYXRpb25JZCwgSU5ERVhf RFJPUF9DTEVBUl9WQUxJRCk7CiAKIAkJCQkvKgogCQkJCSAqIENDSSBoZXJlIHRvIG1ha2Ug dGhpcyB1cGRhdGUgdmlzaWJsZSwgaW4gY2FzZSB0aGlzIHJlY3Vyc2VzCkBAIC0xNTU5LDM3 ICsxNTM0LDQ5IEBAIERlZmluZUluZGV4KE9pZCB0YWJsZUlkLAogCiAJCS8qCiAJCSAqIElu ZGV4ZXMgb24gcGFydGl0aW9uZWQgdGFibGVzIGFyZSBub3QgdGhlbXNlbHZlcyBidWlsdCwg c28gd2UncmUKLQkJICogZG9uZSBoZXJlLgorCQkgKiBkb25lIGhlcmUgaW4gdGhlIG5vbi1j b25jdXJyZW50IGNhc2UuCiAJCSAqLwotCQlBdEVPWGFjdF9HVUMoZmFsc2UsIHJvb3Rfc2F2 ZV9uZXN0bGV2ZWwpOwotCQlTZXRVc2VySWRBbmRTZWNDb250ZXh0KHJvb3Rfc2F2ZV91c2Vy aWQsIHJvb3Rfc2F2ZV9zZWNfY29udGV4dCk7Ci0JCXRhYmxlX2Nsb3NlKHJlbCwgTm9Mb2Nr KTsKLQkJaWYgKCFPaWRJc1ZhbGlkKHBhcmVudEluZGV4SWQpKQotCQkJcGdzdGF0X3Byb2dy ZXNzX2VuZF9jb21tYW5kKCk7Ci0JCWVsc2UKKwkJaWYgKCFjb25jdXJyZW50KQogCQl7Ci0J CQkvKiBVcGRhdGUgcHJvZ3Jlc3MgZm9yIGFuIGludGVybWVkaWF0ZSBwYXJ0aXRpb25lZCBp bmRleCBpdHNlbGYgKi8KLQkJCXBnc3RhdF9wcm9ncmVzc19pbmNyX3BhcmFtKFBST0dSRVNT X0NSRUFURUlEWF9QQVJUSVRJT05TX0RPTkUsIDEpOwotCQl9CisJCQlBdEVPWGFjdF9HVUMo ZmFsc2UsIHJvb3Rfc2F2ZV9uZXN0bGV2ZWwpOworCQkJU2V0VXNlcklkQW5kU2VjQ29udGV4 dChyb290X3NhdmVfdXNlcmlkLCByb290X3NhdmVfc2VjX2NvbnRleHQpOworCQkJdGFibGVf Y2xvc2UocmVsLCBOb0xvY2spOwogCi0JCXJldHVybiBhZGRyZXNzOworCQkJaWYgKCFPaWRJ c1ZhbGlkKHBhcmVudEluZGV4SWQpKQorCQkJCXBnc3RhdF9wcm9ncmVzc19lbmRfY29tbWFu ZCgpOworCQkJZWxzZQorCQkJeworCQkJCS8qCisJCQkJICogVXBkYXRlIHByb2dyZXNzIGZv ciBhbiBpbnRlcm1lZGlhdGUgcGFydGl0aW9uZWQgaW5kZXgKKwkJCQkgKiBpdHNlbGYKKwkJ CQkgKi8KKwkJCQlwZ3N0YXRfcHJvZ3Jlc3NfaW5jcl9wYXJhbShQUk9HUkVTU19DUkVBVEVJ RFhfUEFSVElUSU9OU19ET05FLCAxKTsKKwkJCX0KKworCQkJcmV0dXJuIGFkZHJlc3M7CisJ CX0KIAl9CiAKIAlBdEVPWGFjdF9HVUMoZmFsc2UsIHJvb3Rfc2F2ZV9uZXN0bGV2ZWwpOwog CVNldFVzZXJJZEFuZFNlY0NvbnRleHQocm9vdF9zYXZlX3VzZXJpZCwgcm9vdF9zYXZlX3Nl Y19jb250ZXh0KTsKIAotCWlmICghY29uY3VycmVudCkKKwkvKgorCSAqIEFsbCBkb25lIGlu IHRoZSBub24tY29uY3VycmVudCBjYXNlLCBhbmQgd2hlbiBidWlsZGluZyBjYXRhbG9nIGVu dHJpZXMKKwkgKiBvZiBwYXJ0aXRpb25zIGZvciBDSUMuCisJICovCisJaWYgKCFjb25jdXJy ZW50IHx8IE9pZElzVmFsaWQocGFyZW50SW5kZXhJZCkpCiAJewotCQkvKiBDbG9zZSB0aGUg aGVhcCBhbmQgd2UncmUgZG9uZSwgaW4gdGhlIG5vbi1jb25jdXJyZW50IGNhc2UgKi8KIAkJ dGFibGVfY2xvc2UocmVsLCBOb0xvY2spOwogCiAJCS8qCiAJCSAqIElmIHRoaXMgaXMgdGhl IHRvcC1sZXZlbCBpbmRleCwgdGhlIGNvbW1hbmQgaXMgZG9uZSBvdmVyYWxsOwotCQkgKiBv dGhlcndpc2UsIGluY3JlbWVudCBwcm9ncmVzcyB0byByZXBvcnQgb25lIGNoaWxkIGluZGV4 IGlzIGRvbmUuCisJCSAqIG90aGVyd2lzZSAod2hlbiBiZWluZyBjYWxsZWQgcmVjdXJzaXZl bHkpLCBpbmNyZW1lbnQgcHJvZ3Jlc3MgdG8KKwkJICogcmVwb3J0IHRoYXQgb25lIGNoaWxk IGluZGV4IGlzIGRvbmUuICBFeGNlcHQgaW4gdGhlIGNvbmN1cnJlbnQKKwkJICogKGNhdGFs b2ctb25seSkgY2FzZSwgd2hpY2ggaXMgaGFuZGxlZCBsYXRlci4KIAkJICovCiAJCWlmICgh T2lkSXNWYWxpZChwYXJlbnRJbmRleElkKSkKIAkJCXBnc3RhdF9wcm9ncmVzc19lbmRfY29t bWFuZCgpOwotCQllbHNlCisJCWVsc2UgaWYgKCFjb25jdXJyZW50KQogCQkJcGdzdGF0X3By b2dyZXNzX2luY3JfcGFyYW0oUFJPR1JFU1NfQ1JFQVRFSURYX1BBUlRJVElPTlNfRE9ORSwg MSk7CiAKIAkJcmV0dXJuIGFkZHJlc3M7CkBAIC0xNjAwLDYgKzE1ODcsMTM3IEBAIERlZmlu ZUluZGV4KE9pZCB0YWJsZUlkLAogCVNFVF9MT0NLVEFHX1JFTEFUSU9OKGhlYXBsb2NrdGFn LCBoZWFwcmVsaWQuZGJJZCwgaGVhcHJlbGlkLnJlbElkKTsKIAl0YWJsZV9jbG9zZShyZWws IE5vTG9jayk7CiAKKwlpZiAoIXBhcnRpdGlvbmVkKQorCXsKKwkJLyogQ1JFQVRFIElOREVY IENPTkNVUlJFTlRMWSBvbiBhIG5vbnBhcnRpdGlvbmVkIHRhYmxlICovCisJCURlZmluZUlu ZGV4Q29uY3VycmVudEludGVybmFsKHRhYmxlSWQsIGluZGV4UmVsYXRpb25JZCwKKwkJCQkJ CQkJCSAgaW5kZXhJbmZvLCBoZWFwbG9ja3RhZywgaGVhcHJlbGlkKTsKKwkJcGdzdGF0X3By b2dyZXNzX2VuZF9jb21tYW5kKCk7CisJCXJldHVybiBhZGRyZXNzOworCX0KKwllbHNlCisJ eworCQkvKgorCQkgKiBGb3IgQ0lDIG9uIGEgcGFydGl0aW9uZWQgdGFibGUsIGZpbmlzaCBi eSBidWlsZGluZyBpbmRleGVzIG9uCisJCSAqIHBhcnRpdGlvbnMKKwkJICovCisKKwkJTGlz dENlbGwgICAqbGM7CisJCUxpc3QJICAgKmNoaWxkczsKKwkJTGlzdAkgICAqdG9zZXR2YWxp ZCA9IE5JTDsKKwkJTWVtb3J5Q29udGV4dCBjaWNfY29udGV4dCwKKwkJCQkJb2xkX2NvbnRl eHQ7CisKKwkJLyogQ3JlYXRlIHNwZWNpYWwgbWVtb3J5IGNvbnRleHQgZm9yIGNyb3NzLXRy YW5zYWN0aW9uIHN0b3JhZ2UgKi8KKwkJY2ljX2NvbnRleHQgPSBBbGxvY1NldENvbnRleHRD cmVhdGUoUG9ydGFsQ29udGV4dCwKKwkJCQkJCQkJCQkJIkNyZWF0ZSBpbmRleCBjb25jdXJy ZW50bHkiLAorCQkJCQkJCQkJCQlBTExPQ1NFVF9ERUZBVUxUX1NJWkVTKTsKKworCQlvbGRf Y29udGV4dCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hUbyhjaWNfY29udGV4dCk7CisJCWNoaWxk cyA9IGZpbmRfYWxsX2luaGVyaXRvcnMoaW5kZXhSZWxhdGlvbklkLCBTaGFyZVVwZGF0ZUV4 Y2x1c2l2ZUxvY2ssIE5VTEwpOworCQlNZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xkX2NvbnRl eHQpOworCisJCWZvcmVhY2gobGMsIGNoaWxkcykKKwkJeworCQkJT2lkCQkJaW5kcmVsaWQg PSBsZmlyc3Rfb2lkKGxjKTsKKwkJCU9pZAkJCXRhYnJlbGlkOworCQkJY2hhcgkJcmVsa2lu ZDsKKworCQkJLyoKKwkJCSAqIFByZS1leGlzdGluZyBwYXJ0aXRpb25zIHdoaWNoIHdlcmUg QVRUQUNIRUQgd2VyZSBhbHJlYWR5CisJCQkgKiBjb3VudGVkIGluIHRoZSBwcm9ncmVzcyBy ZXBvcnQuCisJCQkgKi8KKwkJCWlmIChnZXRfaW5kZXhfaXN2YWxpZChpbmRyZWxpZCkpCisJ CQkJY29udGludWU7CisKKwkJCS8qCisJCQkgKiBQYXJ0aXRpb25lZCBpbmRleGVzIGFyZSBj b3VudGVkIGluIHRoZSBwcm9ncmVzcyByZXBvcnQsIGJ1dAorCQkJICogZG9uJ3QgbmVlZCB0 byBiZSBmdXJ0aGVyIHByb2Nlc3NlZC4KKwkJCSAqLworCQkJcmVsa2luZCA9IGdldF9yZWxf cmVsa2luZChpbmRyZWxpZCk7CisJCQlpZiAoIVJFTEtJTkRfSEFTX1NUT1JBR0UocmVsa2lu ZCkpCisJCQl7CisJCQkJLyogVGhlIHRvcGxldmVsIGluZGV4IGRvZXNuJ3QgY291bnQgdG93 YXJkcyAicGFydGl0aW9ucyBkb25lIiAqLworCQkJCWlmIChpbmRyZWxpZCAhPSBpbmRleFJl bGF0aW9uSWQpCisJCQkJCXBnc3RhdF9wcm9ncmVzc19pbmNyX3BhcmFtKFBST0dSRVNTX0NS RUFURUlEWF9QQVJUSVRJT05TX0RPTkUsIDEpOworCisJCQkJLyoKKwkJCQkgKiBCdWlsZCB1 cCBhIGxpc3Qgb2YgYWxsIHRoZSBpbnRlcm1lZGlhdGUgcGFydGl0aW9uZWQgdGFibGVzCisJ CQkJICogd2hpY2ggd2lsbCBsYXRlciBuZWVkIHRvIGJlIHNldCB2YWxpZC4KKwkJCQkgKi8K KwkJCQlvbGRfY29udGV4dCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hUbyhjaWNfY29udGV4dCk7 CisJCQkJdG9zZXR2YWxpZCA9IGxhcHBlbmRfb2lkKHRvc2V0dmFsaWQsIGluZHJlbGlkKTsK KwkJCQlNZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xkX2NvbnRleHQpOworCQkJCWNvbnRpbnVl OworCQkJfQorCisJCQkvKgorCQkJICogUGFydGl0aW9uIGNvdWxkIGhhdmUgYmVlbiBkcm9w cGVkLCBzaW5jZSB3ZSBsb29rZWQgaXQgdXAuIEluCisJCQkgKiB0aGlzIGNhc2UgY29uc2lk ZXIgaXQgZG9uZSBhbmQgZ28gdG8gdGhlIG5leHQgb25lLgorCQkJICovCisJCQl0YWJyZWxp ZCA9IEluZGV4R2V0UmVsYXRpb24oaW5kcmVsaWQsIHRydWUpOworCQkJaWYgKCF0YWJyZWxp ZCkKKwkJCXsKKwkJCQlwZ3N0YXRfcHJvZ3Jlc3NfaW5jcl9wYXJhbShQUk9HUkVTU19DUkVB VEVJRFhfUEFSVElUSU9OU19ET05FLCAxKTsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCXJl bCA9IHRyeV90YWJsZV9vcGVuKHRhYnJlbGlkLCBTaGFyZVVwZGF0ZUV4Y2x1c2l2ZUxvY2sp OworCQkJaWYgKCFyZWwpCisJCQl7CisJCQkJcGdzdGF0X3Byb2dyZXNzX2luY3JfcGFyYW0o UFJPR1JFU1NfQ1JFQVRFSURYX1BBUlRJVElPTlNfRE9ORSwgMSk7CisJCQkJY29udGludWU7 CisJCQl9CisKKwkJCWhlYXByZWxpZCA9IHJlbC0+cmRfbG9ja0luZm8ubG9ja1JlbElkOwor CisJCQkvKgorCQkJICogQ2xvc2UgdGhlIHRhYmxlIGJ1dCByZXRhaW4gdGhlIGxvY2ssIHRo YXQgc2hvdWxkIGJlIGV4dGVuZGVkIHRvCisJCQkgKiBzZXNzaW9uIGxldmVsIGluIERlZmlu ZUluZGV4Q29uY3VycmVudEludGVybmFsLgorCQkJICovCisJCQl0YWJsZV9jbG9zZShyZWws IE5vTG9jayk7CisJCQlTRVRfTE9DS1RBR19SRUxBVElPTihoZWFwbG9ja3RhZywgaGVhcHJl bGlkLmRiSWQsIGhlYXByZWxpZC5yZWxJZCk7CisKKwkJCS8qIFByb2Nlc3MgZWFjaCBwYXJ0 aXRpb24gaW4gYSBzZXBhcmF0ZSB0cmFuc2FjdGlvbiAqLworCQkJRGVmaW5lSW5kZXhDb25j dXJyZW50SW50ZXJuYWwodGFicmVsaWQsIGluZHJlbGlkLCBpbmRleEluZm8sCisJCQkJCQkJ CQkJICBoZWFwbG9ja3RhZywgaGVhcHJlbGlkKTsKKworCQkJUHVzaEFjdGl2ZVNuYXBzaG90 KEdldFRyYW5zYWN0aW9uU25hcHNob3QoKSk7CisJCQlwZ3N0YXRfcHJvZ3Jlc3NfaW5jcl9w YXJhbShQUk9HUkVTU19DUkVBVEVJRFhfUEFSVElUSU9OU19ET05FLCAxKTsKKwkJfQorCisJ CS8qIFNldCBhcyB2YWxpZCBhbGwgcGFydGl0aW9uZWQgaW5kZXhlcywgaW5jbHVkaW5nIHRo ZSBwYXJlbnQgKi8KKwkJZm9yZWFjaChsYywgdG9zZXR2YWxpZCkKKwkJeworCQkJT2lkCQkJ aW5kcmVsaWQgPSBsZmlyc3Rfb2lkKGxjKTsKKwkJCVJlbGF0aW9uCWluZHJlbCA9IHRyeV9p bmRleF9vcGVuKGluZHJlbGlkLCBTaGFyZVVwZGF0ZUV4Y2x1c2l2ZUxvY2spOworCisJCQlp ZiAoIWluZHJlbCkKKwkJCQljb250aW51ZTsKKwkJCWluZGV4X3NldF9zdGF0ZV9mbGFncyhp bmRyZWxpZCwgSU5ERVhfQ1JFQVRFX1NFVF9SRUFEWSk7CisJCQlDb21tYW5kQ291bnRlcklu Y3JlbWVudCgpOworCQkJaW5kZXhfc2V0X3N0YXRlX2ZsYWdzKGluZHJlbGlkLCBJTkRFWF9D UkVBVEVfU0VUX1ZBTElEKTsKKwkJCWluZGV4X2Nsb3NlKGluZHJlbCwgU2hhcmVVcGRhdGVF eGNsdXNpdmVMb2NrKTsKKwkJfQorCisJCU1lbW9yeUNvbnRleHREZWxldGUoY2ljX2NvbnRl eHQpOworCQlwZ3N0YXRfcHJvZ3Jlc3NfZW5kX2NvbW1hbmQoKTsKKwkJUG9wQWN0aXZlU25h cHNob3QoKTsKKwkJcmV0dXJuIGFkZHJlc3M7CisJfQorfQorCisKK3N0YXRpYyB2b2lkCitE ZWZpbmVJbmRleENvbmN1cnJlbnRJbnRlcm5hbChPaWQgdGFibGVJZCwgT2lkIGluZGV4UmVs YXRpb25JZCwgSW5kZXhJbmZvICppbmRleEluZm8sCisJCQkJCQkJICBMT0NLVEFHIGhlYXBs b2NrdGFnLCBMb2NrUmVsSWQgaGVhcHJlbGlkKQoreworCVRyYW5zYWN0aW9uSWQgbGltaXRY bWluOworCVNuYXBzaG90CXNuYXBzaG90OworCisJLyogSXMgaW5kZXggc2FmZSBmb3Igb3Ro ZXJzIHRvIGlnbm9yZT8gIFNlZSBzZXRfaW5kZXhzYWZlX3Byb2NmbGFncygpICovCisJYm9v bAkJc2FmZV9pbmRleCA9IGluZGV4SW5mby0+aWlfRXhwcmVzc2lvbnMgPT0gTklMICYmCisJ CWluZGV4SW5mby0+aWlfUHJlZGljYXRlID09IE5JTDsKKwogCS8qCiAJICogRm9yIGEgY29u Y3VycmVudCBidWlsZCwgaXQncyBpbXBvcnRhbnQgdG8gbWFrZSB0aGUgY2F0YWxvZyBlbnRy aWVzCiAJICogdmlzaWJsZSB0byBvdGhlciB0cmFuc2FjdGlvbnMgYmVmb3JlIHdlIHN0YXJ0 IHRvIGJ1aWxkIHRoZSBpbmRleC4gVGhhdApAQCAtMTc5NSwxMCArMTkxMyw2IEBAIERlZmlu ZUluZGV4KE9pZCB0YWJsZUlkLAogCSAqIExhc3QgdGhpbmcgdG8gZG8gaXMgcmVsZWFzZSB0 aGUgc2Vzc2lvbi1sZXZlbCBsb2NrIG9uIHRoZSBwYXJlbnQgdGFibGUuCiAJICovCiAJVW5s b2NrUmVsYXRpb25JZEZvclNlc3Npb24oJmhlYXByZWxpZCwgU2hhcmVVcGRhdGVFeGNsdXNp dmVMb2NrKTsKLQotCXBnc3RhdF9wcm9ncmVzc19lbmRfY29tbWFuZCgpOwotCi0JcmV0dXJu IGFkZHJlc3M7CiB9CiAKIApkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3Rl ZC9pbmRleGluZy5vdXQgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2luZGV4aW5nLm91 dAppbmRleCBmMjU3MjNkYTkyLi40NGE2Y2YzOWRmIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9y ZWdyZXNzL2V4cGVjdGVkL2luZGV4aW5nLm91dAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4 cGVjdGVkL2luZGV4aW5nLm91dApAQCAtNTAsMTEgKzUwLDEzMCBAQCBzZWxlY3QgcmVsbmFt ZSwgcmVsa2luZCwgcmVsaGFzc3ViY2xhc3MsIGluaHBhcmVudDo6cmVnY2xhc3MKICg4IHJv d3MpCiAKIGRyb3AgdGFibGUgaWR4cGFydDsKLS0tIFNvbWUgdW5zdXBwb3J0ZWQgZmVhdHVy ZXMKKy0tIENJQyBvbiBwYXJ0aXRpb25lZCB0YWJsZQogY3JlYXRlIHRhYmxlIGlkeHBhcnQg KGEgaW50LCBiIGludCwgYyB0ZXh0KSBwYXJ0aXRpb24gYnkgcmFuZ2UgKGEpOwotY3JlYXRl IHRhYmxlIGlkeHBhcnQxIHBhcnRpdGlvbiBvZiBpZHhwYXJ0IGZvciB2YWx1ZXMgZnJvbSAo MCkgdG8gKDEwKTsKLWNyZWF0ZSBpbmRleCBjb25jdXJyZW50bHkgb24gaWR4cGFydCAoYSk7 Ci1FUlJPUjogIGNhbm5vdCBjcmVhdGUgaW5kZXggb24gcGFydGl0aW9uZWQgdGFibGUgImlk eHBhcnQiIGNvbmN1cnJlbnRseQorY3JlYXRlIHRhYmxlIGlkeHBhcnQxIHBhcnRpdGlvbiBv ZiBpZHhwYXJ0IGZvciB2YWx1ZXMgZnJvbSAoMCkgdG8gKDEwKSBwYXJ0aXRpb24gYnkgcmFu Z2UoYSk7CitjcmVhdGUgdGFibGUgaWR4cGFydDExIHBhcnRpdGlvbiBvZiBpZHhwYXJ0MSBm b3IgdmFsdWVzIGZyb20gKDApIHRvICgxMCkgcGFydGl0aW9uIGJ5IHJhbmdlKGEpOworY3Jl YXRlIHRhYmxlIGlkeHBhcnQxMTEgcGFydGl0aW9uIG9mIGlkeHBhcnQxMSBkZWZhdWx0IHBh cnRpdGlvbiBieSByYW5nZShhKTsKK2NyZWF0ZSB0YWJsZSBpZHhwYXJ0MTExMSBwYXJ0aXRp b24gb2YgaWR4cGFydDExMSBkZWZhdWx0IHBhcnRpdGlvbiBieSByYW5nZShhKTsKK2NyZWF0 ZSB0YWJsZSBpZHhwYXJ0MiBwYXJ0aXRpb24gb2YgaWR4cGFydCBmb3IgdmFsdWVzIGZyb20g KDEwKSB0byAoMjApOworY3JlYXRlIHRhYmxlIGlkeHBhcnQzIHBhcnRpdGlvbiBvZiBpZHhw YXJ0IGZvciB2YWx1ZXMgZnJvbSAoMzApIHRvICg0MCkgcGFydGl0aW9uIGJ5IHJhbmdlKGEp OworY3JlYXRlIHRhYmxlIGlkeHBhcnQzMSBwYXJ0aXRpb24gb2YgaWR4cGFydDMgZGVmYXVs dDsKK2luc2VydCBpbnRvIGlkeHBhcnQyIHZhbHVlcygxMCksKDEwKTsgLS0gbm90IHVuaXF1 ZQorY3JlYXRlIGluZGV4IGNvbmN1cnJlbnRseSBvbiBpZHhwYXJ0MTEgKGEpOyAtLSBwYXJ0 aXRpb25lZCBhbmQgcGFydGl0aW9uLCB3aXRoIG5vIGxlYXZlcworY3JlYXRlIGluZGV4IGNv bmN1cnJlbnRseSBvbiBpZHhwYXJ0MSAoYSk7IC0tIHBhcnRpdGlvbmVkIGFuZCBwYXJ0aXRp b24KK2NyZWF0ZSBpbmRleCBjb25jdXJyZW50bHkgb24gaWR4cGFydDIgKGEpOyAtLSBsZWFm CitjcmVhdGUgaW5kZXggY29uY3VycmVudGx5IG9uIGlkeHBhcnQgKGEpOyAtLSBwYXJ0aXRp b25lZAorY3JlYXRlIHVuaXF1ZSBpbmRleCBjb25jdXJyZW50bHkgb24gaWR4cGFydCAoYSk7 IC0tIHBhcnRpdGlvbmVkLCB1bmlxdWUgZmFpbHVyZQorRVJST1I6ICBjb3VsZCBub3QgY3Jl YXRlIHVuaXF1ZSBpbmRleCAiaWR4cGFydDJfYV9pZHgxIgorREVUQUlMOiAgS2V5IChhKT0o MTApIGlzIGR1cGxpY2F0ZWQuCitcZCBpZHhwYXJ0CisgICAgICAgIFBhcnRpdGlvbmVkIHRh YmxlICJwdWJsaWMuaWR4cGFydCIKKyBDb2x1bW4gfCAgVHlwZSAgIHwgQ29sbGF0aW9uIHwg TnVsbGFibGUgfCBEZWZhdWx0IAorLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0t LS0tLS0tLS0rLS0tLS0tLS0tCisgYSAgICAgIHwgaW50ZWdlciB8ICAgICAgICAgICB8ICAg ICAgICAgIHwgCisgYiAgICAgIHwgaW50ZWdlciB8ICAgICAgICAgICB8ICAgICAgICAgIHwg CisgYyAgICAgIHwgdGV4dCAgICB8ICAgICAgICAgICB8ICAgICAgICAgIHwgCitQYXJ0aXRp b24ga2V5OiBSQU5HRSAoYSkKK0luZGV4ZXM6CisgICAgImlkeHBhcnRfYV9pZHgiIGJ0cmVl IChhKQorICAgICJpZHhwYXJ0X2FfaWR4MSIgVU5JUVVFLCBidHJlZSAoYSkgSU5WQUxJRAor TnVtYmVyIG9mIHBhcnRpdGlvbnM6IDMgKFVzZSBcZCsgdG8gbGlzdCB0aGVtLikKKworXGQg aWR4cGFydDEKKyAgICAgICAgUGFydGl0aW9uZWQgdGFibGUgInB1YmxpYy5pZHhwYXJ0MSIK KyBDb2x1bW4gfCAgVHlwZSAgIHwgQ29sbGF0aW9uIHwgTnVsbGFibGUgfCBEZWZhdWx0IAor LS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tLS0tCisg YSAgICAgIHwgaW50ZWdlciB8ICAgICAgICAgICB8ICAgICAgICAgIHwgCisgYiAgICAgIHwg aW50ZWdlciB8ICAgICAgICAgICB8ICAgICAgICAgIHwgCisgYyAgICAgIHwgdGV4dCAgICB8 ICAgICAgICAgICB8ICAgICAgICAgIHwgCitQYXJ0aXRpb24gb2Y6IGlkeHBhcnQgRk9SIFZB TFVFUyBGUk9NICgwKSBUTyAoMTApCitQYXJ0aXRpb24ga2V5OiBSQU5HRSAoYSkKK0luZGV4 ZXM6CisgICAgImlkeHBhcnQxX2FfaWR4IiBidHJlZSAoYSkKKyAgICAiaWR4cGFydDFfYV9p ZHgxIiBVTklRVUUsIGJ0cmVlIChhKSBJTlZBTElECitOdW1iZXIgb2YgcGFydGl0aW9uczog MSAoVXNlIFxkKyB0byBsaXN0IHRoZW0uKQorCitcZCBpZHhwYXJ0MTEKKyAgICAgICBQYXJ0 aXRpb25lZCB0YWJsZSAicHVibGljLmlkeHBhcnQxMSIKKyBDb2x1bW4gfCAgVHlwZSAgIHwg Q29sbGF0aW9uIHwgTnVsbGFibGUgfCBEZWZhdWx0IAorLS0tLS0tLS0rLS0tLS0tLS0tKy0t LS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tLS0tCisgYSAgICAgIHwgaW50ZWdlciB8ICAg ICAgICAgICB8ICAgICAgICAgIHwgCisgYiAgICAgIHwgaW50ZWdlciB8ICAgICAgICAgICB8 ICAgICAgICAgIHwgCisgYyAgICAgIHwgdGV4dCAgICB8ICAgICAgICAgICB8ICAgICAgICAg IHwgCitQYXJ0aXRpb24gb2Y6IGlkeHBhcnQxIEZPUiBWQUxVRVMgRlJPTSAoMCkgVE8gKDEw KQorUGFydGl0aW9uIGtleTogUkFOR0UgKGEpCitJbmRleGVzOgorICAgICJpZHhwYXJ0MTFf YV9pZHgiIGJ0cmVlIChhKQorICAgICJpZHhwYXJ0MTFfYV9pZHgxIiBVTklRVUUsIGJ0cmVl IChhKSBJTlZBTElECitOdW1iZXIgb2YgcGFydGl0aW9uczogMSAoVXNlIFxkKyB0byBsaXN0 IHRoZW0uKQorCitcZCBpZHhwYXJ0MTExCisgICAgICAgUGFydGl0aW9uZWQgdGFibGUgInB1 YmxpYy5pZHhwYXJ0MTExIgorIENvbHVtbiB8ICBUeXBlICAgfCBDb2xsYXRpb24gfCBOdWxs YWJsZSB8IERlZmF1bHQgCistLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0t LS0tLSstLS0tLS0tLS0KKyBhICAgICAgfCBpbnRlZ2VyIHwgICAgICAgICAgIHwgICAgICAg ICAgfCAKKyBiICAgICAgfCBpbnRlZ2VyIHwgICAgICAgICAgIHwgICAgICAgICAgfCAKKyBj ICAgICAgfCB0ZXh0ICAgIHwgICAgICAgICAgIHwgICAgICAgICAgfCAKK1BhcnRpdGlvbiBv ZjogaWR4cGFydDExIERFRkFVTFQKK1BhcnRpdGlvbiBrZXk6IFJBTkdFIChhKQorSW5kZXhl czoKKyAgICAiaWR4cGFydDExMV9hX2lkeCIgYnRyZWUgKGEpCisgICAgImlkeHBhcnQxMTFf YV9pZHgxIiBVTklRVUUsIGJ0cmVlIChhKSBJTlZBTElECitOdW1iZXIgb2YgcGFydGl0aW9u czogMSAoVXNlIFxkKyB0byBsaXN0IHRoZW0uKQorCitcZCBpZHhwYXJ0MTExMQorICAgICAg UGFydGl0aW9uZWQgdGFibGUgInB1YmxpYy5pZHhwYXJ0MTExMSIKKyBDb2x1bW4gfCAgVHlw ZSAgIHwgQ29sbGF0aW9uIHwgTnVsbGFibGUgfCBEZWZhdWx0IAorLS0tLS0tLS0rLS0tLS0t LS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tLS0tCisgYSAgICAgIHwgaW50ZWdl ciB8ICAgICAgICAgICB8ICAgICAgICAgIHwgCisgYiAgICAgIHwgaW50ZWdlciB8ICAgICAg ICAgICB8ICAgICAgICAgIHwgCisgYyAgICAgIHwgdGV4dCAgICB8ICAgICAgICAgICB8ICAg ICAgICAgIHwgCitQYXJ0aXRpb24gb2Y6IGlkeHBhcnQxMTEgREVGQVVMVAorUGFydGl0aW9u IGtleTogUkFOR0UgKGEpCitJbmRleGVzOgorICAgICJpZHhwYXJ0MTExMV9hX2lkeCIgYnRy ZWUgKGEpCisgICAgImlkeHBhcnQxMTExX2FfaWR4MSIgVU5JUVVFLCBidHJlZSAoYSkgSU5W QUxJRAorTnVtYmVyIG9mIHBhcnRpdGlvbnM6IDAKKworXGQgaWR4cGFydDIKKyAgICAgICAg ICAgICAgVGFibGUgInB1YmxpYy5pZHhwYXJ0MiIKKyBDb2x1bW4gfCAgVHlwZSAgIHwgQ29s bGF0aW9uIHwgTnVsbGFibGUgfCBEZWZhdWx0IAorLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0t LS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tLS0tCisgYSAgICAgIHwgaW50ZWdlciB8ICAgICAg ICAgICB8ICAgICAgICAgIHwgCisgYiAgICAgIHwgaW50ZWdlciB8ICAgICAgICAgICB8ICAg ICAgICAgIHwgCisgYyAgICAgIHwgdGV4dCAgICB8ICAgICAgICAgICB8ICAgICAgICAgIHwg CitQYXJ0aXRpb24gb2Y6IGlkeHBhcnQgRk9SIFZBTFVFUyBGUk9NICgxMCkgVE8gKDIwKQor SW5kZXhlczoKKyAgICAiaWR4cGFydDJfYV9pZHgiIGJ0cmVlIChhKQorICAgICJpZHhwYXJ0 Ml9hX2lkeDEiIFVOSVFVRSwgYnRyZWUgKGEpIElOVkFMSUQKKworXGQgaWR4cGFydDMKKyAg ICAgICAgUGFydGl0aW9uZWQgdGFibGUgInB1YmxpYy5pZHhwYXJ0MyIKKyBDb2x1bW4gfCAg VHlwZSAgIHwgQ29sbGF0aW9uIHwgTnVsbGFibGUgfCBEZWZhdWx0IAorLS0tLS0tLS0rLS0t LS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tLS0tCisgYSAgICAgIHwgaW50 ZWdlciB8ICAgICAgICAgICB8ICAgICAgICAgIHwgCisgYiAgICAgIHwgaW50ZWdlciB8ICAg ICAgICAgICB8ICAgICAgICAgIHwgCisgYyAgICAgIHwgdGV4dCAgICB8ICAgICAgICAgICB8 ICAgICAgICAgIHwgCitQYXJ0aXRpb24gb2Y6IGlkeHBhcnQgRk9SIFZBTFVFUyBGUk9NICgz MCkgVE8gKDQwKQorUGFydGl0aW9uIGtleTogUkFOR0UgKGEpCitJbmRleGVzOgorICAgICJp ZHhwYXJ0M19hX2lkeCIgYnRyZWUgKGEpCisgICAgImlkeHBhcnQzX2FfaWR4MSIgVU5JUVVF LCBidHJlZSAoYSkgSU5WQUxJRAorTnVtYmVyIG9mIHBhcnRpdGlvbnM6IDEgKFVzZSBcZCsg dG8gbGlzdCB0aGVtLikKKworXGQgaWR4cGFydDMxCisgICAgICAgICAgICAgVGFibGUgInB1 YmxpYy5pZHhwYXJ0MzEiCisgQ29sdW1uIHwgIFR5cGUgICB8IENvbGxhdGlvbiB8IE51bGxh YmxlIHwgRGVmYXVsdCAKKy0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0t LS0tKy0tLS0tLS0tLQorIGEgICAgICB8IGludGVnZXIgfCAgICAgICAgICAgfCAgICAgICAg ICB8IAorIGIgICAgICB8IGludGVnZXIgfCAgICAgICAgICAgfCAgICAgICAgICB8IAorIGMg ICAgICB8IHRleHQgICAgfCAgICAgICAgICAgfCAgICAgICAgICB8IAorUGFydGl0aW9uIG9m OiBpZHhwYXJ0MyBERUZBVUxUCitJbmRleGVzOgorICAgICJpZHhwYXJ0MzFfYV9pZHgiIGJ0 cmVlIChhKQorICAgICJpZHhwYXJ0MzFfYV9pZHgxIiBVTklRVUUsIGJ0cmVlIChhKSBJTlZB TElECisKIGRyb3AgdGFibGUgaWR4cGFydDsKIC0tIFZlcmlmeSBidWdmaXggd2l0aCBxdWVy eSBvbiBpbmRleGVkIHBhcnRpdGlvbmVkIHRhYmxlIHdpdGggbm8gcGFydGl0aW9ucwogLS0g aHR0cHM6Ly9wb3N0Z3IuZXMvbS8yMDE4MDEyNDE2MjAwNi5wbWFwZml6bmhnbmd3dGpmQGFs dmhlcnJlLnBnc3FsCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL3NxbC9pbmRleGlu Zy5zcWwgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9pbmRleGluZy5zcWwKaW5kZXggNWYxZjRi ODBjOS4uMzhhNzMwZDg3NyAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwvaW5k ZXhpbmcuc3FsCisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2luZGV4aW5nLnNxbApAQCAt MjksMTAgKzI5LDMwIEBAIHNlbGVjdCByZWxuYW1lLCByZWxraW5kLCByZWxoYXNzdWJjbGFz cywgaW5ocGFyZW50OjpyZWdjbGFzcwogCXdoZXJlIHJlbG5hbWUgbGlrZSAnaWR4cGFydCUn IG9yZGVyIGJ5IHJlbG5hbWU7CiBkcm9wIHRhYmxlIGlkeHBhcnQ7CiAKLS0tIFNvbWUgdW5z dXBwb3J0ZWQgZmVhdHVyZXMKKy0tIENJQyBvbiBwYXJ0aXRpb25lZCB0YWJsZQogY3JlYXRl IHRhYmxlIGlkeHBhcnQgKGEgaW50LCBiIGludCwgYyB0ZXh0KSBwYXJ0aXRpb24gYnkgcmFu Z2UgKGEpOwotY3JlYXRlIHRhYmxlIGlkeHBhcnQxIHBhcnRpdGlvbiBvZiBpZHhwYXJ0IGZv ciB2YWx1ZXMgZnJvbSAoMCkgdG8gKDEwKTsKLWNyZWF0ZSBpbmRleCBjb25jdXJyZW50bHkg b24gaWR4cGFydCAoYSk7CitjcmVhdGUgdGFibGUgaWR4cGFydDEgcGFydGl0aW9uIG9mIGlk eHBhcnQgZm9yIHZhbHVlcyBmcm9tICgwKSB0byAoMTApIHBhcnRpdGlvbiBieSByYW5nZShh KTsKK2NyZWF0ZSB0YWJsZSBpZHhwYXJ0MTEgcGFydGl0aW9uIG9mIGlkeHBhcnQxIGZvciB2 YWx1ZXMgZnJvbSAoMCkgdG8gKDEwKSBwYXJ0aXRpb24gYnkgcmFuZ2UoYSk7CitjcmVhdGUg dGFibGUgaWR4cGFydDExMSBwYXJ0aXRpb24gb2YgaWR4cGFydDExIGRlZmF1bHQgcGFydGl0 aW9uIGJ5IHJhbmdlKGEpOworY3JlYXRlIHRhYmxlIGlkeHBhcnQxMTExIHBhcnRpdGlvbiBv ZiBpZHhwYXJ0MTExIGRlZmF1bHQgcGFydGl0aW9uIGJ5IHJhbmdlKGEpOworY3JlYXRlIHRh YmxlIGlkeHBhcnQyIHBhcnRpdGlvbiBvZiBpZHhwYXJ0IGZvciB2YWx1ZXMgZnJvbSAoMTAp IHRvICgyMCk7CitjcmVhdGUgdGFibGUgaWR4cGFydDMgcGFydGl0aW9uIG9mIGlkeHBhcnQg Zm9yIHZhbHVlcyBmcm9tICgzMCkgdG8gKDQwKSBwYXJ0aXRpb24gYnkgcmFuZ2UoYSk7Citj cmVhdGUgdGFibGUgaWR4cGFydDMxIHBhcnRpdGlvbiBvZiBpZHhwYXJ0MyBkZWZhdWx0Owor CitpbnNlcnQgaW50byBpZHhwYXJ0MiB2YWx1ZXMoMTApLCgxMCk7IC0tIG5vdCB1bmlxdWUK K2NyZWF0ZSBpbmRleCBjb25jdXJyZW50bHkgb24gaWR4cGFydDExIChhKTsgLS0gcGFydGl0 aW9uZWQgYW5kIHBhcnRpdGlvbiwgd2l0aCBubyBsZWF2ZXMKK2NyZWF0ZSBpbmRleCBjb25j dXJyZW50bHkgb24gaWR4cGFydDEgKGEpOyAtLSBwYXJ0aXRpb25lZCBhbmQgcGFydGl0aW9u CitjcmVhdGUgaW5kZXggY29uY3VycmVudGx5IG9uIGlkeHBhcnQyIChhKTsgLS0gbGVhZgor Y3JlYXRlIGluZGV4IGNvbmN1cnJlbnRseSBvbiBpZHhwYXJ0IChhKTsgLS0gcGFydGl0aW9u ZWQKK2NyZWF0ZSB1bmlxdWUgaW5kZXggY29uY3VycmVudGx5IG9uIGlkeHBhcnQgKGEpOyAt LSBwYXJ0aXRpb25lZCwgdW5pcXVlIGZhaWx1cmUKK1xkIGlkeHBhcnQKK1xkIGlkeHBhcnQx CitcZCBpZHhwYXJ0MTEKK1xkIGlkeHBhcnQxMTEKK1xkIGlkeHBhcnQxMTExCitcZCBpZHhw YXJ0MgorXGQgaWR4cGFydDMKK1xkIGlkeHBhcnQzMQogZHJvcCB0YWJsZSBpZHhwYXJ0Owog CiAtLSBWZXJpZnkgYnVnZml4IHdpdGggcXVlcnkgb24gaW5kZXhlZCBwYXJ0aXRpb25lZCB0 YWJsZSB3aXRoIG5vIHBhcnRpdGlvbnMKLS0gCjIuNDMuMAoK --------------aArlsvv7cBqNFubEXqjDeYDV--