Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtp (Exim 4.80) (envelope-from ) id 1XAP2P-0006QO-56 for pgsql-performance@arkaria.postgresql.org; Thu, 24 Jul 2014 19:50:49 +0000 Received: from localhost ([127.0.0.1] helo=postgresql.org) by malur.postgresql.org with smtp (Exim 4.80) (envelope-from ) id 1XAP2O-0006U4-G6 for pgsql-performance@arkaria.postgresql.org; Thu, 24 Jul 2014 19:50:48 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.2:DHE_RSA_AES_256_CBC_SHA256:256) (Exim 4.80) (envelope-from ) id 1XAP2M-0006Tv-TL for pgsql-performance@postgresql.org; Thu, 24 Jul 2014 19:50:47 +0000 Received: from smtp-outbound-1.vmware.com ([208.91.2.12]) by magus.postgresql.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.80) (envelope-from ) id 1XAP2G-0001T8-7Y for pgsql-performance@postgresql.org; Thu, 24 Jul 2014 19:50:45 +0000 Received: from sc9-mailhost1.vmware.com (sc9-mailhost1.vmware.com [10.113.161.71]) by smtp-outbound-1.vmware.com (Postfix) with ESMTP id 5CBAB2820A; Thu, 24 Jul 2014 12:50:34 -0700 (PDT) Received: from EX13-CAS-002.vmware.com (EX13-CAS-002.vmware.com [10.113.191.52]) by sc9-mailhost1.vmware.com (Postfix) with ESMTP id 53F58191CA; Thu, 24 Jul 2014 12:50:34 -0700 (PDT) Received: from EX13-MBX-013.vmware.com (10.113.191.33) by EX13-MBX-012.vmware.com (10.113.191.32) with Microsoft SMTP Server (TLS) id 15.0.775.38; Thu, 24 Jul 2014 12:50:20 -0700 Received: from EX13-MBX-013.vmware.com ([fe80::b82b:d0bb:9cd7:392e]) by EX13-MBX-013.vmware.com ([fe80::b82b:d0bb:9cd7:392e%15]) with mapi id 15.00.0775.031; Thu, 24 Jul 2014 12:50:19 -0700 From: Reza Taheri To: Craig Ringer , "pgsql-performance@postgresql.org" Subject: Re: High rate of transaction failure with the Serializable Isolation Level Thread-Topic: [PERFORM] High rate of transaction failure with the Serializable Isolation Level Thread-Index: Ac+m3REUfhN8/sxlQTylzpfYlwqkMQAWWGKAAA8AZQA= Date: Thu, 24 Jul 2014 19:50:19 +0000 Message-ID: <93e2642196e646adbcf5780d3cf54685@EX13-MBX-013.vmware.com> References: <53D0923B.7050501@2ndquadrant.com> In-Reply-To: <53D0923B.7050501@2ndquadrant.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: yes X-MS-TNEF-Correlator: x-originating-ip: [10.113.160.246] Content-Type: multipart/mixed; boundary="_002_93e2642196e646adbcf5780d3cf54685EX13MBX013vmwarecom_" MIME-Version: 1.0 X-Pg-Spam-Score: -6.9 (------) List-Archive: List-Help: List-ID: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: X-Mailing-List: pgsql-performance Precedence: bulk Sender: pgsql-performance-owner@postgresql.org --_002_93e2642196e646adbcf5780d3cf54685EX13MBX013vmwarecom_ Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable Hi Craig, > It's not just that statement that is relevant. > Is that statement run standalone, or as part of a larger transaction? Yes, the "size" of the transaction seems to matter here. It is a complex tr= ansaction (attached). Each "frame" is one stored procedure, and the 6 frame= s are called one after the other with no pause. After frame6 returns, we ca= ll SQLTransact(..., ..., SQL_COMMIT). Below is the failure rate of the var= ious frames: 112 tid 18883: SQL Failed: DoTradeResultFrame3 102 tid 18883: SQL Failed: DoTradeResultFrame4 18188 tid 18883: SQL Failed: DoTradeResultFrame5 8566 tid 18883: SQL Failed: DoTradeResultFrame6 4492 tid 18883: ERROR: TradeResultDB: commit failed So, no failures in frames 1 and 2, and then the failure rate grows as we ap= proach the end of the transaction. > If the INSERTing transaction previously queried for a key that was create= d by a concurrent transaction this can occur as there is no serialization > execution order of the transactions that could produce the same result. As far as the inserts, your point is well-taken. But in this case, I have e= liminated the transactions that query or otherwise manipulate the SETTELEME= NT table. The only access to it is the single insert in this transaction > A lower FILLFACTOR can spread data out at the cost of wasted space. Interesting idea! Let me look into this. Even if this is not practical (ou= r tables are 10s and 100s of GBs), if I can force a single row per page and= the problem goes away, then we learn something > PostgreSQL's isolationtester tool, in src/test/isolation, can be handy fo= r automating this kind of conflict, > and provides some useful examples of cases that are detected. Didn't know about this tool. Let me look into it! Thanks again for the reply, Reza > -----Original Message----- > From: Craig Ringer [mailto:craig@2ndquadrant.com] > Sent: Wednesday, July 23, 2014 9:58 PM > To: Reza Taheri; pgsql-performance@postgresql.org > Subject: Re: [PERFORM] High rate of transaction failure with the Serializ= able > Isolation Level >=20 > On 07/24/2014 09:18 AM, Reza Taheri wrote: > > What is unusual is that the majority of the failures occur in a > > statement that should not have any isolation conflicts. About 17K of > > failures are from the statement below: >=20 > It's not just that statement that is relevant. >=20 > At SERIALIZABLE isolation the entire transaction's actions must be > considered, as must the conflicting transaction. >=20 > > This doesn't make sense since at any given time, only one transaction > > might possibly be accessing the row that is being updated. There > > should be no conflicts if we have row-level locking/isolation. >=20 > Is that statement run standalone, or as part of a larger transaction? >=20 > > The second most common conflict happens 7.6K times in the statement > below: > ... > > I don't understand why an insert would hit a serialization conflict >=20 > If the INSERTing transaction previously queried for a key that was create= d by > a concurrent transaction this can occur as there is no serialization exec= ution > order of the transactions that could produce the same result. >=20 > This doesn't produce exactly the same error, but demonstrates one such > case: >=20 >=20 > regress=3D> CREATE TABLE demo (id integer primary key, value integer); > CREATE TABLE regress=3D> INSERT INTO demo(id, value) VALUES (1, 42); > INSERT 0 1 >=20 > then >=20 > regress=3D> BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE; BEGIN > regress=3D> SELECT id FROM demo WHERE id =3D 2; id > ---- > (0 rows) >=20 >=20 > session1=3D> BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE; BEGIN > session2=3D> BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE; BEGIN >=20 > session1=3D> SELECT id FROM demo WHERE id =3D 2; id > ---- > (0 rows) >=20 > session2=3D> SELECT id FROM demo WHERE id =3D 3; id > ---- > (0 rows) >=20 >=20 > session1=3D> INSERT INTO demo VALUES (3, 43); INSERT 0 1 >=20 > session2=3D> INSERT INTO demo VALUES (2, 43); INSERT 0 1 >=20 > session2=3D> COMMIT; > COMMIT >=20 > session1=3D> COMMIT; > ERROR: could not serialize access due to read/write dependencies among > transactions > DETAIL: Reason code: Canceled on identification as a pivot, during commit > attempt. > HINT: The transaction might succeed if retried. >=20 > > Does PGSQL raise locks to page level when we run with > > SQL_TXN_SERIALIZABLE? >=20 > From the documentation > (https://urldefense.proofpoint.com/v1/url?u=3Dhttp://www.postgresql.org/d > ocs/current/static/transaction- > iso.html%29:&k=3DoIvRg1%2BdGAgOoM1BIlLLqw%3D%3D%0A&r=3Db9TKmA0CPj > roD2HLPTHU27nI9PJr8wgKO2rU9QZyZZU%3D%0A&m=3DTLPOH83mhBZDaYDaC > sh%2F8g2qVmFXtdg7HcUqXymxn40%3D%0A&s=3D32832df25ebb8166a18523bd > 9d6ec00f5ad545ea3bc1f8e95808ba65b4766130 >=20 > > Predicate locks in PostgreSQL, like in most other database systems, are > based on data actually accessed by a transaction. These will show up in t= he > pg_locks system view with a mode of SIReadLock. The particular locks > acquired during execution of a query will depend on the plan used by the > query, and multiple finer-grained locks (e.g., tuple locks) may be combin= ed > into fewer coarser-grained locks (e.g., page locks) during the course of = the > transaction to prevent exhaustion of the memory used to track the locks. >=20 > ... so yes, it may raise locks to page level. That doesn't mean that's > necessarily what's happening here. >=20 > > Are there any knobs I can play with to alleviate this? >=20 > A lower FILLFACTOR can spread data out at the cost of wasted space. >=20 > > FWIW, the same transactions on MS SQL Server see almost no conflicts. >=20 > Many DBMSs don't detect all serialization anomalies. PostgreSQL doesn't > detect all possible anomalies but it detects many that other systems may = not. >=20 > To see what's going on and why MS SQL Server (version?) doesn't complain, > it'd be best to boil each case down to a minimal reproducible test case t= hat > can be analyzed in isolation. >=20 > PostgreSQL's isolationtester tool, in src/test/isolation, can be handy for > automating this kind of conflict, and provides some useful examples of ca= ses > that are detected. >=20 > -- > Craig Ringer > https://urldefense.proofpoint.com/v1/url?u=3Dhttp://www.2ndquadrant.com > /&k=3DoIvRg1%2BdGAgOoM1BIlLLqw%3D%3D%0A&r=3Db9TKmA0CPjroD2HLPTH > U27nI9PJr8wgKO2rU9QZyZZU%3D%0A&m=3DTLPOH83mhBZDaYDaCsh%2F8g2q > VmFXtdg7HcUqXymxn40%3D%0A&s=3D3b1587fc43a994ddcf59e658e2521e9a9c > 847393fb4ab8dc48df009b547cca55 > PostgreSQL Development, 24x7 Support, Training & Services --_002_93e2642196e646adbcf5780d3cf54685EX13MBX013vmwarecom_ Content-Type: application/octet-stream; name="trade-result.sql" Content-Description: trade-result.sql Content-Disposition: attachment; filename="trade-result.sql"; size=17488; creation-date="Thu, 24 Jul 2014 19:09:20 GMT"; modification-date="Thu, 24 Jul 2014 19:09:09 GMT" Content-Transfer-Encoding: base64 LS0KLS0gIFBvc3RncmVTUUwgU1FMIGNvbW1hbmRzIHRvIGltcGxlbWVudCB0 aGUgVFBDLVYgdHJhbnNhY3Rpb24gdHJhZGUtcmVzdWx0IAotLQotLSAgQ3Jl YXRlZCBieTogIEFuZHJldyBCb25kCi0tCi0tICBDb3B5cmlnaHQgMjAxMSBS ZWQgSGF0LCBJbmMuCi0tCgpjcmVhdGUgb3IgcmVwbGFjZSBmdW5jdGlvbiBU cmFkZVJlc3VsdEZyYW1lMSAoCWluIHRyYWRlX2lkIFRSQURFX1QsCgkJCQkJ CW91dCBhY2N0X2lkIElERU5UX1QsCgkJCQkJCW91dCBjaGFyZ2UgVkFMVUVf VCwKCQkJCQkJb3V0IGxvY19oc19xdHkgU19RVFlfVCwKCQkJCQkJb3V0IGlz X2xpZm8gc21hbGxpbnQsCgkJCQkJCW91dCBudW1fZm91bmQgaW50LAoJCQkJ CQlvdXQgc3ltYm9sIHZhcmNoYXIoMTUpLAoJCQkJCQlvdXQgdHJhZGVfaXNf Y2FzaCBzbWFsbGludCwKCQkJCQkJb3V0IHRyYWRlX3F0eSBTX1FUWV9ULAoJ CQkJCQlvdXQgdHlwZV9pZCBjaGFyKDMpLAoJCQkJCQlvdXQgdHlwZV9pc19t YXJrZXQgc21hbGxpbnQsCgkJCQkJCW91dCB0eXBlX2lzX3NlbGwgc21hbGxp bnQsCgkJCQkJCW91dCB0eXBlX25hbWUgY2hhcigxMikKKQpBUwokJApCRUdJ TgoJLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgktLSBMb2cgdHJh bnNhY3Rpb24gaW5wdXRzLiBIdW1hbi1yZWFkZXIgZnJpZW5kbHkuCgktLXJh aXNlIGxvZyAnVFIuRjEgIHRyYWRlX2lkKCUpJywgdHJhZGVfaWQ7CgktLQoJ LS0gTG9nIHRyYW5zYWN0aW9uIGlucHV0cy4gVGFiLWRlbGltaXRlZCAtIGF1 dG9tYXRlZCBkYXRhIHByb2Nlc3NpbmcgZnJpZW5kbHkuCgktLXJhaXNlIGxv ZyAnCVRSLkYxCSUnLCB0cmFkZV9pZDsKCS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQoKCS0tIEdldCBpbmZvIG9uIHRoZSB0cmFkZSBhbmQgdGhl IGN1c3RvbWVyJ3MgYWNjb3VudAoJCglzZWxlY3QJVF9DQV9JRCwKCQlUX1RU X0lELAoJCVRfU19TWU1CLAoJCVRfUVRZLAoJCVRfQ0hSRywKCQlUX0xJRk8s CgkJVF9JU19DQVNICglpbnRvCWFjY3RfaWQsCgkJdHlwZV9pZCwKCQlzeW1i b2wsCgkJdHJhZGVfcXR5LAoJCWNoYXJnZSwKCQlpc19saWZvLAoJCXRyYWRl X2lzX2Nhc2gKCWZyb20JVFJBREUKCXdoZXJlCVRfSUQgPSB0cmFkZV9pZDsK CglHRVQgRElBR05PU1RJQ1MgbnVtX2ZvdW5kID0gUk9XX0NPVU5UOwoKCXNl bGVjdAlUVF9OQU1FLAoJCVRUX0lTX1NFTEwsCgkJVFRfSVNfTVJLVAoJaW50 bwl0eXBlX25hbWUsCgkJdHlwZV9pc19zZWxsLAoJCXR5cGVfaXNfbWFya2V0 Cglmcm9tCVRSQURFX1RZUEUKCXdoZXJlCVRUX0lEID0gdHlwZV9pZDsKCglz ZWxlY3QJSFNfUVRZCglpbnRvCWxvY19oc19xdHkKCWZyb20JSE9MRElOR19T VU1NQVJZCgl3aGVyZQlIU19DQV9JRCA9IGFjY3RfaWQgYW5kCgkJSFNfU19T WU1CID0gc3ltYm9sCiAgICAgICAgRk9SIFVQREFURTsKCglpZiBsb2NfaHNf cXR5IGlzIE5VTEwgdGhlbgoJCS0tIG5vIHByaW9yIGhvbGRpbmdzIGV4aXN0 CgkJbG9jX2hzX3F0eSA9IDA7CgllbmQgaWY7CgplbmQ7CiQkIGxhbmd1YWdl IHBscGdzcWw7CgoKY3JlYXRlIG9yIHJlcGxhY2UgZnVuY3Rpb24gVHJhZGVS ZXN1bHRGcmFtZTIgKAlpbiBhY2N0X2lkIElERU5UX1QsCgkJCQkJCWluIGhz X3F0eV9sb2MgU19RVFlfVCwKCQkJCQkJaW4gaXNfbGlmbyBzbWFsbGludCwK CQkJCQkJaW4gc3ltYm9sIHZhcmNoYXIoMTUpLAoJCQkJCQlpbiB0cmFkZV9p ZCBUUkFERV9ULAoJCQkJCQlpbiB0cmFkZV9wcmljZSBTX1BSSUNFX1QsCgkJ CQkJCWluIHRyYWRlX3F0eSBTX1FUWV9ULAoJCQkJCQlpbiB0eXBlX2lzX3Nl bGwgc21hbGxpbnQsCgkJCQkJCW91dCBicm9rZXJfaWQgSURFTlRfVCwKCQkJ CQkJb3V0IGJ1eV92YWx1ZSBCQUxBTkNFX1QsCgkJCQkJCW91dCBjdXN0X2lk IElERU5UX1QsCgkJCQkJCW91dCBzZWxsX3ZhbHVlIEJBTEFOQ0VfVCwKCQkJ CQkJb3V0IHRheF9zdGF0dXMgc21hbGxpbnQsCgkJCQkJCW91dCB0cmFkZV9k dHMgdGltZXN0YW1wCikKQVMKJCQKREVDTEFSRQpob2xkX2lkCQlUUkFERV9U Owpob2xkX3ByaWNlCVNfUFJJQ0VfVDsKaG9sZF9xdHkJU19RVFlfVDsKbmVl ZGVkX3F0eQlTX1FUWV9UOwpob2xkX2xpc3QJcmVmY3Vyc29yOwpCRUdJTgoJ LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgktLSBMb2cgdHJhbnNh Y3Rpb24gaW5wdXRzLiBIdW1hbi1yZWFkZXIgZnJpZW5kbHkuCgktLXJhaXNl IGxvZyAnVFIuRjIgIGFjY3RfaWQoJSkgIGhzX3F0eV9sb2MoJSkgIGlzX2xp Zm8oJSkgIHN5bWJvbCglKSAgdHJhZGVfaWQoJSkgIHRyYWRlX3ByaWNlKCUp ICB0cmFkZV9xdHkoJSkgIHR5cGVfaXNfc2VsbCglKScsCgktLQlhY2N0X2lk LCBoc19xdHlfbG9jLCBpc19saWZvLCBzeW1ib2wsIHRyYWRlX2lkLCB0cmFk ZV9wcmljZSwgdHJhZGVfcXR5LCB0eXBlX2lzX3NlbGw7CgktLQoJLS0gTG9n IHRyYW5zYWN0aW9uIGlucHV0cy4gVGFiLWRlbGltaXRlZCAtIGF1dG9tYXRl ZCBkYXRhIHByb2Nlc3NpbmcgZnJpZW5kbHkuCgktLXJhaXNlIGxvZyAnCVRS LkYyCSUJJQklCSUJJQklCSUJJScsCgktLQlhY2N0X2lkLCBoc19xdHlfbG9j LCBpc19saWZvLCBzeW1ib2wsIHRyYWRlX2lkLCB0cmFkZV9wcmljZSwgdHJh ZGVfcXR5LCB0eXBlX2lzX3NlbGw7CgktLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KCiAgICAtLSBVcGRhdGUgdGhlIGN1c3RvbWVyJ3MgaG9sZGlu Z3MgZm9yIGJ1eSBvciBzZWxsCgoJc2VsZWN0IG5vdygpCiAgICAgICAgaW50 byB0cmFkZV9kdHM7CgoJLS0gSW5pdGlhbGl6ZSB2YXJpYWJsZXMKCWJ1eV92 YWx1ZSA9IDAuMDsKCXNlbGxfdmFsdWUgPSAwLjA7CgluZWVkZWRfcXR5ID0g dHJhZGVfcXR5OwoKCXNlbGVjdAlDQV9CX0lELAoJCUNBX0NfSUQsCgkJQ0Ff VEFYX1NUCglpbnRvCWJyb2tlcl9pZCwKCQljdXN0X2lkLAoJCXRheF9zdGF0 dXMKCWZyb20JQ1VTVE9NRVJfQUNDT1VOVAoJd2hlcmUJQ0FfSUQgPSBhY2N0 X2lkCiAgICAgICAgRk9SIFVQREFURTsKCgktLSBEZXRlcm1pbmUgaWYgc2Vs bCBvciBidXkgb3JkZXIKCWlmICh0eXBlX2lzX3NlbGwgPSAxKSB0aGVuCiAg ICAgICAgQkVHSU4KCQlpZiAoaHNfcXR5X2xvYyA9IDApIHRoZW4KCQlCRUdJ TgoJCQktLSBubyBwcmlvciBob2xkaW5ncyBleGlzdCwgYnV0IG9uZSB3aWxs IGJlIGluc2VydGVkCgkJCWluc2VydCBpbnRvIEhPTERJTkdfU1VNTUFSWSAo CUhTX0NBX0lELAoJCQkJCQkJSFNfU19TWU1CLAoJCQkJCQkJSFNfUVRZKQoJ CQl2YWx1ZXMgKAlhY2N0X2lkLAoJCQkJCXN5bWJvbCwKCQkJCQktdHJhZGVf cXR5KTsKCQlFTkQ7CgkJZWxzZQoJCUJFR0lOCgkJCWlmIChoc19xdHlfbG9j ICE9IHRyYWRlX3F0eSkgdGhlbgoJCQlCRUdJTgoJCQkJdXBkYXRlCUhPTERJ TkdfU1VNTUFSWQoJCQkJc2V0CUhTX1FUWSA9IChoc19xdHlfbG9jIC0gdHJh ZGVfcXR5KQoJCQkJd2hlcmUJSFNfQ0FfSUQgPSBhY2N0X2lkIGFuZAoJCQkJ CUhTX1NfU1lNQiA9IHN5bWJvbDsKCQkJRU5EOwoJCQllbmQgaWY7CgkJRU5E OwoJCWVuZCBpZjsKCgkJLS0gU2VsbCBUcmFkZToKCQktLSBGaXJzdCBsb29r IGZvciBleGlzdGluZyBob2xkaW5ncywgSF9RVFkgPiAwCgkJaWYgKGhzX3F0 eV9sb2MgPiAwKSB0aGVuCgkJQkVHSU4KCQkJaWYgKGlzX2xpZm8gPSAxKSB0 aGVuCgkJCUJFR0lOCgkJCQktLSBDb3VsZCByZXR1cm4gMCwgMSBvciBtYW55 IHJvd3MKCQkJCW9wZW4gaG9sZF9saXN0IGZvcgoJCQkJc2VsZWN0CUhfVF9J RCwKCQkJCQlIX1FUWSwKCQkJCQlIX1BSSUNFCgkJCQlmcm9tCUhPTERJTkcK CQkJCXdoZXJlCUhfQ0FfSUQgPSBhY2N0X2lkIGFuZAoJCQkJCUhfU19TWU1C ID0gc3ltYm9sCgkJCQlvcmRlciBieSBIX0RUUyBkZXNjCgkJCQlGT1IgVVBE QVRFOyAgLS0gTmVlZGVkIGZvciB3aGVyZSBjdXJyZW50IG9mCgoJCQlFTkQ7 CgkJCWVsc2UKCQkJQkVHSU4KCQkJCS0tIENvdWxkIHJldHVybiAwLCAxIG9y IG1hbnkgcm93cwoJCQkJb3BlbiBob2xkX2xpc3QgZm9yCgkJCQlzZWxlY3QJ SF9UX0lELAoJCQkJCUhfUVRZLAoJCQkJCUhfUFJJQ0UKCQkJCWZyb20JSE9M RElORwoJCQkJd2hlcmUJSF9DQV9JRCA9IGFjY3RfaWQgYW5kCgkJCQkJSF9T X1NZTUIgPSBzeW1ib2wKCQkJCW9yZGVyIGJ5IEhfRFRTIGFzYwoJCQkJRk9S IFVQREFURTsgIC0tIE5lZWRlZCBmb3Igd2hlcmUgY3VycmVudCBvZgoJCQlF TkQ7CgkJCWVuZCBpZjsKCgkJCS0tIExpcXVpZGF0ZSBleGlzdGluZyBob2xk aW5ncy4gIE5vdGUgdGhhdCBtb3JlIHRoYW4KCQkJLS0gMSBIT0xESU5HIHJl Y29yZCBjYW4gYmUgZGVsZXRlZCBoZXJlIHNpbmNlIGN1c3RvbWVyCgkJCS0t IG1heSBoYXZlIHRoZSBzYW1lIHNlY3VyaXR5IHdpdGggZGlmZmVyaW5nIHBy aWNlcy4KCgkJCWxvb3AKCQkJQkVHSU4KCQkJCWlmIG5lZWRlZF9xdHkgPSAw IHRoZW4KCQkJCQlFWElUOwoJCQkJZW5kIGlmOwoJCQkJIAoJCQkJZmV0Y2gK CQkJCWZyb20JaG9sZF9saXN0CgkJCQlpbnRvCWhvbGRfaWQsCgkJCQkJaG9s ZF9xdHksCgkJCQkJaG9sZF9wcmljZTsKCQkJCQoJCQkJaWYgbm90IGZvdW5k IHRoZW4KCQkJCQlFWElUOwoJCQkJZW5kIGlmOwoKCQkJCWlmIGhvbGRfcXR5 ID4gbmVlZGVkX3F0eSB0aGVuCgkJCQlCRUdJTgoJCQkJCS0tU2VsbGluZyBz b21lIG9mIHRoZSBob2xkaW5ncwoJCQkJCWluc2VydAoJCQkJCWludG8gSE9M RElOR19ISVNUT1JZICgJSEhfSF9UX0lELAoJCQkJCQkJCUhIX1RfSUQsCgkJ CQkJCQkJSEhfQkVGT1JFX1FUWSwKCQkJCQkJCQlISF9BRlRFUl9RVFkpCgkJ CQkJdmFsdWVzIChob2xkX2lkLCAtLSBIX1RfSUQgb2Ygb3JpZ2luYWwgdHJh ZGUKCQkJCQkJdHJhZGVfaWQsIC0tIFRfSUQgY3VycmVudCB0cmFkZQoJCQkJ CQlob2xkX3F0eSwgLS0gSF9RVFkgbm93CgkJCQkJCWhvbGRfcXR5IC0gbmVl ZGVkX3F0eSk7IC0tIEhfUVRZIGFmdGVyIHVwZGF0ZQoKCQkJCQl1cGRhdGUJ SE9MRElORwoJCQkJCXNldAlIX1FUWSA9IGhvbGRfcXR5IC0gbmVlZGVkX3F0 eQoJCQkJCXdoZXJlIGN1cnJlbnQgb2YgaG9sZF9saXN0OwoKCQkJCQlidXlf dmFsdWUgPSBidXlfdmFsdWUgKyAobmVlZGVkX3F0eSAqIGhvbGRfcHJpY2Up OwoJCQkJCXNlbGxfdmFsdWUgPSBzZWxsX3ZhbHVlICsgKG5lZWRlZF9xdHkg KiB0cmFkZV9wcmljZSk7CgkJCQkJbmVlZGVkX3F0eSA9IDA7CgoJCQkJRU5E OwoJCQkJZWxzZQoJCQkJQkVHSU4KCQkJCQktLSBTZWxsaW5nIGFsbCBob2xk aW5ncwoJCQkJCWluc2VydCBpbnRvIEhPTERJTkdfSElTVE9SWSAoCUhIX0hf VF9JRCwKCQkJCQkJCQkJSEhfVF9JRCwKCQkJCQkJCQkJSEhfQkVGT1JFX1FU WSwKCQkJCQkJCQkJSEhfQUZURVJfUVRZKQoJCQkJCXZhbHVlcyAoCWhvbGRf aWQsIC0tIEhfVF9JRCBvcmlnaW5hbCB0cmFkZQoJCQkJCQkJdHJhZGVfaWQs IC0tIFRfSUQgY3VycmVudCB0cmFkZQoJCQkJCQkJaG9sZF9xdHksIC0tIEhf UVRZIG5vdwoJCQkJCQkJMCk7IC0tIEhfUVRZIGFmdGVyIGRlbGV0ZQoKCQkJ CQlkZWxldGUgZnJvbSBIT0xESU5HCgkJCQkJd2hlcmUgY3VycmVudCBvZiBo b2xkX2xpc3Q7CgoJCQkJCWJ1eV92YWx1ZSA9IGJ1eV92YWx1ZSArIChob2xk X3F0eSAqIGhvbGRfcHJpY2UpOwoJCQkJCXNlbGxfdmFsdWUgPSBzZWxsX3Zh bHVlICsgKGhvbGRfcXR5ICogdHJhZGVfcHJpY2UpOwoJCQkJCW5lZWRlZF9x dHkgPSBuZWVkZWRfcXR5IC0gaG9sZF9xdHk7CgkJCQlFTkQ7CgkJCQllbmQg aWY7CgkJCUVORDsKCQkJZW5kIGxvb3A7CgkJCWNsb3NlIGhvbGRfbGlzdDsK CQlFTkQ7CgkJZW5kIGlmOwoKCQktLSBTZWxsIFNob3J0OgoJCS0tIElmIG5l ZWRlZF9xdHkgPiAwIHRoZW4gY3VzdG9tZXIgaGFzIHNvbGQgYWxsIGV4aXN0 aW5nCgkJLS0gaG9sZGluZ3MgYW5kIGN1c3RvbWVyIGlzIHNlbGxpbmcgc2hv cnQuICBBIG5ldyBIT0xESU5HCgkJLS0gcmVjb3JkIHdpbGwgYmUgY3JlYXRl ZCB3aXRoIEhfUVRZIHNldCB0byB0aGUgbmVnYXRpdmUKCQktLSBudW1iZXIg b2YgbmVlZGVkIHNoYXJlcy4KCQlpZiBuZWVkZWRfcXR5ID4gMCB0aGVuCgkJ QkVHSU4KCQkJaW5zZXJ0CgkJCWludG8gSE9MRElOR19ISVNUT1JZICgJSEhf SF9UX0lELAoJCQkJCQlISF9UX0lELAoJCQkJCQlISF9CRUZPUkVfUVRZLAoJ CQkJCQlISF9BRlRFUl9RVFkpCgkJCXZhbHVlcyAoCXRyYWRlX2lkLCAJLS0g VF9JRCBjdXJyZW50IGlzIG9yaWdpbmFsIHRyYWRlCgkJCQkJdHJhZGVfaWQs IAktLSBUX0lEIGN1cnJlbnQgdHJhZGUKCQkJCQkwLAkJLS0gSF9RVFkgYmVm b3JlCgkJCQkJKC0xKSAqIG5lZWRlZF9xdHkgLS0gSF9RVFkgYWZ0ZXIgaW5z ZXJ0CgkJCQkpOwoKCQkJaW5zZXJ0CgkJCWludG8gSE9MRElORyAoCUhfVF9J RCwKCQkJCQlIX0NBX0lELAoJCQkJCUhfU19TWU1CLAoJCQkJCUhfRFRTLAoJ CQkJCUhfUFJJQ0UsCgkJCQkJSF9RVFkpCgkJCXZhbHVlcyAoCXRyYWRlX2lk LAkJLS0gSF9UX0lECgkJCQkJYWNjdF9pZCwJCS0tIEhfQ0FfSUQKCQkJCQlz eW1ib2wsCQkJLS0gSF9TX1NZTUIKCQkJCQl0cmFkZV9kdHMsCQktLSBIX0RU UwoJCQkJCXRyYWRlX3ByaWNlLAkJLS0gSF9QUklDRQoJCQkJCSgtMSkgKiBu ZWVkZWRfcXR5CS0tIEhfUVRZCgkJCQkpOwoJCUVORDsKCQllbHNlCgkJQkVH SU4KCQkJaWYgaHNfcXR5X2xvYyA9IHRyYWRlX3F0eSB0aGVuCgkJCQlkZWxl dGUKCQkJCWZyb20JSE9MRElOR19TVU1NQVJZCgkJCQl3aGVyZQlIU19DQV9J RCA9IGFjY3RfaWQgYW5kCgkJCQkJSFNfU19TWU1CID0gc3ltYm9sOwoJCQll bmQgaWY7CgkJRU5EOwoJCWVuZCBpZjsKCUVORDsKCWVsc2UJLS0gVGhlIHRy YWRlIGlzIGEgQlVZCglCRUdJTgoKCQlpZiAoaHNfcXR5X2xvYyA9IDApIHRo ZW4KCQlCRUdJTgoJCQktLSBubyBwcmlvciBob2xkaW5ncyBleGlzdCwgYnV0 IG9uZSB3aWxsIGJlIGluc2VydGVkCgkJCWluc2VydAoJCQlpbnRvCUhPTERJ TkdfU1VNTUFSWSAoCUhTX0NBX0lELAoJCQkJCQkJSFNfU19TWU1CLAoJCQkJ CQkJSFNfUVRZKQoJCQl2YWx1ZXMgKAlhY2N0X2lkLAoJCQkJCXN5bWJvbCwK CQkJCQl0cmFkZV9xdHkKCQkJCSk7CgkJRU5EOwoJCWVsc2UJLS0gaHNfcXR5 X2xvYyAhPSAwCgkJQkVHSU4KCQkJaWYgKC1oc19xdHlfbG9jICE9IHRyYWRl X3F0eSkgdGhlbgoJCQlCRUdJTgoJCQkJdXBkYXRlCUhPTERJTkdfU1VNTUFS WQoJCQkJc2V0CUhTX1FUWSA9IGhzX3F0eV9sb2MgKyB0cmFkZV9xdHkKCQkJ CXdoZXJlCUhTX0NBX0lEID0gYWNjdF9pZCBhbmQKCQkJCQlIU19TX1NZTUIg PSBzeW1ib2w7CgkJCUVORDsKCQkJZW5kIGlmOwkKCQlFTkQ7CgkJZW5kIGlm OwkJLS0gaWYgKGhzX3F0eV9sb2MgPSAwKQoKCQktLSBTaG9ydCBDb3ZlcjoK CQktLSBGaXJzdCBsb29rIGZvciBleGlzdGluZyBuZWdhdGl2ZSBob2xkaW5n cywgSF9RVFkgPCAwLAoJCS0tIHdoaWNoIGluZGljYXRlcyBhIHByZXZpb3Vz IHNob3J0IHNlbGwuICBUaGUgYnV5IHRyYWRlCgkJLS0gd2lsbCBjb3ZlciB0 aGUgc2hvcnQgc2VsbC4KCgkJaWYgKGhzX3F0eV9sb2MgPCAwKSB0aGVuCgkJ QkVHSU4KCQkJaWYgKGlzX2xpZm8pIHRoZW4KCQkJQkVHSU4KCQkJCS0tIENv dWxkIHJldHVybiAwLCAxIG9yIG1hbnkgcm93cwoJCQkJb3BlbiBob2xkX2xp c3QgZm9yCgkJCQkJc2VsZWN0CUhfVF9JRCwKCQkJCQkJSF9RVFksCgkJCQkJ CUhfUFJJQ0UKCQkJCQlmcm9tCUhPTERJTkcKCQkJCQl3aGVyZQlIX0NBX0lE ID0gYWNjdF9pZCBhbmQKCQkJCQkJSF9TX1NZTUIgPSBzeW1ib2wKCQkJCQlv cmRlciBieSBIX0RUUyBkZXNjCgkJCQkJRk9SIFVQREFURTsJLS0gTmVlZGVk IGZvciB3aGVyZSBjdXJyZW50IG9mCgkJCUVORDsKCQkJZWxzZQoJCQlCRUdJ TgoJCQkJLS0gQ291bGQgcmV0dXJuIDAsIDEgb3IgbWFueSByb3dzCgkJCQlv cGVuIGhvbGRfbGlzdCBmb3IKCQkJCQlzZWxlY3QJSF9UX0lELAoJCQkJCQlI X1FUWSwKCQkJCQkJSF9QUklDRQoJCQkJCWZyb20JSE9MRElORwoJCQkJCXdo ZXJlCUhfQ0FfSUQgPSBhY2N0X2lkIGFuZAoJCQkJCQlIX1NfU1lNQiA9IHN5 bWJvbAoJCQkJCW9yZGVyIGJ5IEhfRFRTIGFzYwoJCQkJCUZPUiBVUERBVEU7 CS0tIE5lZWRlZCBmb3Igd2hlcmUgY3VycmVudCBvZgoJCQlFTkQ7CgkJCWVu ZCBpZjsJCS0tIGlmIChpc19saWZvKQoJCQktLSBCdXkgYmFjayBzZWN1cml0 aWVzIHRvIGNvdmVyIGEgc2hvcnQgcG9zaXRpb24uCgkJCWxvb3AKCQkJQkVH SU4KCQkJCWlmIG5lZWRlZF9xdHkgPSAwIHRoZW4KCQkJCQlFWElUOwoJCQkJ ZW5kIGlmOwoJCQkJIAoJCQkJZmV0Y2gKCQkJCWZyb20JaG9sZF9saXN0CgkJ CQlpbnRvCWhvbGRfaWQsCgkJCQkJaG9sZF9xdHksCgkJCQkJaG9sZF9wcmlj ZTsKCQkJCgkJCQlpZiBub3QgZm91bmQgdGhlbgoJCQkJCUVYSVQ7CgkJCQll bmQgaWY7CgoJCQkJaWYgKGhvbGRfcXR5ICsgbmVlZGVkX3F0eSA8IDApIHRo ZW4KCQkJCUJFR0lOCgkJCQkJLS0gQnV5aW5nIGJhY2sgc29tZSBvZiB0aGUg U2hvcnQgU2VsbAoJCQkJCWluc2VydAoJCQkJCWludG8JSE9MRElOR19ISVNU T1JZICgJSEhfSF9UX0lELAoJCQkJCQkJCQlISF9UX0lELAoJCQkJCQkJCQlI SF9CRUZPUkVfUVRZLAoJCQkJCQkJCQlISF9BRlRFUl9RVFkpCgkJCQkJdmFs dWVzICgJaG9sZF9pZCwgLS0gSF9UX0lEIG9yaWdpbmFsIHRyYWRlCgkJCQkJ CQl0cmFkZV9pZCwgLS0gVF9JRCBjdXJyZW50IHRyYWRlCgkJCQkJCQlob2xk X3F0eSwgLS0gSF9RVFkgbm93CgkJCQkJCQlob2xkX3F0eSArIG5lZWRlZF9x dHkgLS0gSF9RVFkgYWZ0ZXIgdXBkYXRlCgkJCQkJCSk7CgoJCQkJCXVwZGF0 ZQlIT0xESU5HCgkJCQkJc2V0CUhfUVRZID0gaG9sZF9xdHkgKyBuZWVkZWRf cXR5CgkJCQkJd2hlcmUgY3VycmVudCBvZiBob2xkX2xpc3Q7CgoJCQkJCXNl bGxfdmFsdWUgPSBzZWxsX3ZhbHVlICsgKG5lZWRlZF9xdHkgKiBob2xkX3By aWNlKTsKCQkJCQlidXlfdmFsdWUgPSBidXlfdmFsdWUgKyAobmVlZGVkX3F0 eSAqIHRyYWRlX3ByaWNlKTsKCQkJCQluZWVkZWRfcXR5ID0gMDsKCQkJCUVO RDsKCQkJCWVsc2UKCQkJCUJFR0lOCgkJCQkJLS0gQnV5aW5nIGJhY2sgYWxs IG9mIHRoZSBTaG9ydCBTZWxsCgkJCQkJaW5zZXJ0CgkJCQkJaW50byBIT0xE SU5HX0hJU1RPUlkgKAlISF9IX1RfSUQsCgkJCQkJCQkJSEhfVF9JRCwKCQkJ CQkJCQlISF9CRUZPUkVfUVRZLAoJCQkJCQkJCUhIX0FGVEVSX1FUWSkKCQkJ CQl2YWx1ZXMgKAlob2xkX2lkLCAtLSBIX1RfSUQgb3JpZ2luYWwgdHJhZGUK CQkJCQkJCXRyYWRlX2lkLCAtLSBUX0lEIGN1cnJlbnQgdHJhZGUKCQkJCQkJ CWhvbGRfcXR5LCAtLSBIX1FUWSBub3cKCQkJCQkJCTAgLS0gSF9RVFkgYWZ0 ZXIgZGVsZXRlCgkJCQkJCSk7CgoJCQkJCWRlbGV0ZQoJCQkJCWZyb20JSE9M RElORwoJCQkJCXdoZXJlIGN1cnJlbnQgb2YgaG9sZF9saXN0OwoKCQkJCQkt LSBNYWtlIGhvbGRfcXR5IHBvc2l0aXZlIGZvciBlYXN5IGNhbGN1bGF0aW9u cwoJCQkJCWhvbGRfcXR5ID0gLWhvbGRfcXR5OwoJCQkJCXNlbGxfdmFsdWUg PSBzZWxsX3ZhbHVlICsgKGhvbGRfcXR5ICogaG9sZF9wcmljZSk7CgkJCQkJ YnV5X3ZhbHVlID0gYnV5X3ZhbHVlICsgKGhvbGRfcXR5ICogdHJhZGVfcHJp Y2UpOwoJCQkJCW5lZWRlZF9xdHkgPSBuZWVkZWRfcXR5IC0gaG9sZF9xdHk7 CgkJCQlFTkQ7CgkJCQllbmQgaWY7CQktLSBpZiAoaG9sZF9xdHkgKyBuZWVk ZWRfcXR5IDwgMCkKCQkJRU5EOwoJCQllbmQgbG9vcDsKCQkJY2xvc2UgaG9s ZF9saXN0OwoJCUVORDsKCQllbmQgaWY7CQktLSBpZiAoaHNfcXR5X2xvYyA8 IDApCgoJCS0tIEJ1eSBUcmFkZToKCQktLSBJZiBuZWVkZWRfcXR5ID4gMCwg dGhlbiB0aGUgY3VzdG9tZXIgaGFzIGNvdmVyZWQgYWxsCgkJLS0gcHJldmlv dXMgU2hvcnQgU2VsbHMgYW5kIHRoZSBjdXN0b21lciBpcyBidXlpbmcgbmV3 CgkJLS0gaG9sZGluZ3MuIEEgbmV3IEhPTERJTkcgcmVjb3JkIHdpbGwgYmUg Y3JlYXRlZCB3aXRoCgkJLS0gSF9RVFkgc2V0IHRvIHRoZSBudW1iZXIgb2Yg bmVlZGVkIHNoYXJlcy4KCgkJaWYgKG5lZWRlZF9xdHkgPiAwKSB0aGVuCgkJ QkVHSU4KCQkJaW5zZXJ0CgkJCWludG8gSE9MRElOR19ISVNUT1JZICgJSEhf SF9UX0lELAoJCQkJCQlISF9UX0lELAoJCQkJCQlISF9CRUZPUkVfUVRZLAoJ CQkJCQlISF9BRlRFUl9RVFkKCQkJCQkJKQoJCQl2YWx1ZXMgKAl0cmFkZV9p ZCwgLS0gVF9JRCBjdXJyZW50IGlzIG9yaWdpbmFsIHRyYWRlCgkJCQkJdHJh ZGVfaWQsIC0tIFRfSUQgY3VycmVudCB0cmFkZQoJCQkJCTAsIC0tIEhfUVRZ IGJlZm9yZQoJCQkJCW5lZWRlZF9xdHkgLS0gSF9RVFkgYWZ0ZXIgaW5zZXJ0 CgkJCQkpOwoKCQkJaW5zZXJ0CgkJCWludG8gSE9MRElORyAoCUhfVF9JRCwK CQkJCQlIX0NBX0lELAoJCQkJCUhfU19TWU1CLAoJCQkJCUhfRFRTLAoJCQkJ CUhfUFJJQ0UsCgkJCQkJSF9RVFkpCgkJCXZhbHVlcyAoCXRyYWRlX2lkLCAt LSBIX1RfSUQKCQkJCQlhY2N0X2lkLCAtLSBIX0NBX0lECgkJCQkJc3ltYm9s LCAtLSBIX1NfU1lNQgoJCQkJCXRyYWRlX2R0cywgLS0gSF9EVFMKCQkJCQl0 cmFkZV9wcmljZSwgLS0gSF9QUklDRQoJCQkJCW5lZWRlZF9xdHkgLS0gSF9R VFkKCQkJCSk7CgkJRU5EOwoJCWVsc2UKCQlCRUdJTgoJCQlpZiAoLWhzX3F0 eV9sb2MgPSB0cmFkZV9xdHkpIHRoZW4KCQkJCWRlbGV0ZQoJCQkJZnJvbQlI T0xESU5HX1NVTU1BUlkKCQkJCXdoZXJlCUhTX0NBX0lEID0gYWNjdF9pZCBh bmQKCQkJCQlIU19TX1NZTUIgPSBzeW1ib2w7CgkJCWVuZCBpZjsKCQlFTkQ7 CgkJZW5kIGlmOwkJLS0gaWYgKG5lZWRlZF9xdHkgPiAwKQoJRU5EOwoJZW5k IGlmOwkJLS0gaWYgKHR5cGVfaXNfc2VsbCA9IDEpIAoKZW5kOwokJCBsYW5n dWFnZSBwbHBnc3FsOwoKCgpjcmVhdGUgb3IgcmVwbGFjZSBmdW5jdGlvbiBU cmFkZVJlc3VsdEZyYW1lMyAoCWluIGJ1eV92YWx1ZSBCQUxBTkNFX1QsCgkJ CQkJCWluIGN1c3RfaWQgSURFTlRfVCwKCQkJCQkJaW4gc2VsbF92YWx1ZSBC QUxBTkNFX1QsCgkJCQkJCWluIHRyYWRlX2lkIFRSQURFX1QsCgkJCQkJCW91 dCB0YXhfYW1vdW50IFZBTFVFX1QKKQpBUwokJApERUNMQVJFCnRheF9yYXRl cwludW1lcmljKDYsNSk7CkJFR0lOCgktLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KIAktLSBMb2cgdHJhbnNhY3Rpb24gaW5wdXRzLiBIdW1hbi1y ZWFkZXIgZnJpZW5kbHkuCgktLXJhaXNlIGxvZyAnVFIuRjMgIGJ1eV92YWx1 ZSglKSAgY3VzdF9pZCglKSAgc2VsbF92YWx1ZSglKSAgdHJhZGVfaWQoJSkn LAoJLS0JYnV5X3ZhbHVlLCBjdXN0X2lkLCBzZWxsX3ZhbHVlLCB0cmFkZV9p ZDsKCS0tCgktLSBMb2cgdHJhbnNhY3Rpb24gaW5wdXRzLiBUYWItZGVsaW1p dGVkIC0gYXV0b21hdGVkIGRhdGEgcHJvY2Vzc2luZyBmcmllbmRseS4KCS0t cmFpc2UgbG9nICcJVFIuRjMJJQklCSUJJScsCgktLQlidXlfdmFsdWUsIGN1 c3RfaWQsIHNlbGxfdmFsdWUsIHRyYWRlX2lkOwoJLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCgogICAgLS0gQ29tcHV0ZSBhbmQgcmVjb3JkIHRo ZSB0YXggbGlhYmlsaXR5CgoJLS0gTG9jYWwgRnJhbWUgdmFyaWFibGVzCglz ZWxlY3QJc3VtKFRYX1JBVEUpCglpbnRvCXRheF9yYXRlcwoJZnJvbQlUQVhS QVRFCgl3aGVyZQlUWF9JRCBpbiAoCgkJc2VsZWN0CUNYX1RYX0lECgkJZnJv bQlDVVNUT01FUl9UQVhSQVRFCgkJd2hlcmUJQ1hfQ19JRCA9IGN1c3RfaWQp OwoKCXRheF9hbW91bnQgPSAoc2VsbF92YWx1ZSAtIGJ1eV92YWx1ZSkgKiB0 YXhfcmF0ZXM7CgoJdXBkYXRlCVRSQURFCglzZXQJVF9UQVggPSB0YXhfYW1v dW50Cgl3aGVyZQlUX0lEID0gdHJhZGVfaWQ7CgplbmQ7CiQkIGxhbmd1YWdl IHBscGdzcWw7CgoKCmNyZWF0ZSBvciByZXBsYWNlIGZ1bmN0aW9uIFRyYWRl UmVzdWx0RnJhbWU0ICgJaW4gY3VzdF9pZCBJREVOVF9ULAoJCQkJCQlpbiBz eW1ib2wgdmFyY2hhcigxNSksICAKCQkJCQkJaW4gdHJhZGVfcXR5IFNfUVRZ X1QsCgkJCQkJCWluIHR5cGVfaWQgY2hhcigzKSwKCQkJCQkJb3V0IGNvbW1f cmF0ZSBudW1lcmljKDUsMiksCgkJCQkJCW91dCBzX25hbWVfbG9jIHZhcmNo YXIoNzApCikKQVMKJCQKREVDTEFSRQpleF9pZAljaGFyKDYpOwp0aWVyCXNt YWxsaW50OwpCRUdJTgoJLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CgktLSBMb2cgdHJhbnNhY3Rpb24gaW5wdXRzLiBIdW1hbi1yZWFkZXIgZnJp ZW5kbHkuCgktLXJhaXNlIGxvZyAnVFIuRjQgIGN1c3RfaWQoJSkgIHN5bWJv bCglKSAgdHJhZGVfcXR5KCUpICB0eXBlX2lkKCUpJywKCS0tCWN1c3RfaWQs IHN5bWJvbCwgdHJhZGVfcXR5LCB0eXBlX2lkOwoJLS0KCS0tIExvZyB0cmFu c2FjdGlvbiBpbnB1dHMuIFRhYi1kZWxpbWl0ZWQgLSBhdXRvbWF0ZWQgZGF0 YSBwcm9jZXNzaW5nIGZyaWVuZGx5LgoJLS1yYWlzZSBsb2cgJwlUUi5GNAkl CSUJJQklJywKCS0tCWN1c3RfaWQsIHN5bWJvbCwgdHJhZGVfcXR5LCB0eXBl X2lkOwoJLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgogICAgLS0g Q29tcHV0ZSBhbmQgcmVjb3JkIHRoZSBicm9rZXIncyBjb21taXNzaW9uCgoJ c2VsZWN0CVNfRVhfSUQsCgkJU19OQU1FCglpbnRvCWV4X2lkLAoJCXNfbmFt ZV9sb2MKCWZyb20JU0VDVVJJVFkKCXdoZXJlCVNfU1lNQiA9IHN5bWJvbDsK CglzZWxlY3QJQ19USUVSCglpbnRvCXRpZXIKCWZyb20JQ1VTVE9NRVIKCXdo ZXJlCUNfSUQgPSBjdXN0X2lkOwoKCS0tIE9ubHkgd2FudCAxIGNvbW1pc3Np b24gcmF0ZSByb3cKCglzZWxlY3QJQ1JfUkFURQoJaW50bwljb21tX3JhdGUK CWZyb20JQ09NTUlTU0lPTl9SQVRFCgl3aGVyZQlDUl9DX1RJRVIgPSB0aWVy IGFuZAoJCUNSX1RUX0lEID0gdHlwZV9pZCBhbmQKCQlDUl9FWF9JRCA9IGV4 X2lkIGFuZAoJCUNSX0ZST01fUVRZIDw9IHRyYWRlX3F0eSBhbmQKCQlDUl9U T19RVFkgPj0gdHJhZGVfcXR5CglsaW1pdCAxOwoKZW5kOwokJCBsYW5ndWFn ZSBwbHBnc3FsOwoKCmNyZWF0ZSBvciByZXBsYWNlIGZ1bmN0aW9uIFRyYWRl UmVzdWx0RnJhbWU1ICgJaW4gYnJva2VyX2lkIElERU5UX1QsCgkJCQkJCWlu IGNvbW1fYW1vdW50IFZBTFVFX1QsICAKCQkJCQkJaW4gc3RfY29tcGxldGVk X2lkIGNoYXIoNCksCgkJCQkJCWluIHRyYWRlX2R0cyB0aW1lc3RhbXAsCgkJ CQkJCWluIHRyYWRlX2lkIFRSQURFX1QsCgkJCQkJCWluIHRyYWRlX3ByaWNl IFNfUFJJQ0VfVAopIHJldHVybnMgdm9pZApBUwokJApCRUdJTgoJLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgktLSBMb2cgdHJhbnNhY3Rpb24g aW5wdXRzLiBIdW1hbi1yZWFkZXIgZnJpZW5kbHkuCgktLXJhaXNlIGxvZyAn VFIuRjUgIGJyb2tlcl9pZCglKSAgY29tbV9hbW91bnQoJSkgIHN0X2NvbXBs ZXRlZF9pZCglKSAgdHJhZGVfZHRzKCUpICB0cmFkZV9pZCglKSAgdHJhZGVf cHJpY2UoJSknLAoJLS0JYnJva2VyX2lkLCBjb21tX2Ftb3VudCwgc3RfY29t cGxldGVkX2lkLCB0cmFkZV9kdHMsIHRyYWRlX2lkLCB0cmFkZV9wcmljZTsK CS0tCgktLSBMb2cgdHJhbnNhY3Rpb24gaW5wdXRzLiBUYWItZGVsaW1pdGVk IC0gYXV0b21hdGVkIGRhdGEgcHJvY2Vzc2luZyBmcmllbmRseS4KCS0tcmFp c2UgbG9nICcJVFIuRjUJJQklCSUJJQklCSUnLAoJLS0JYnJva2VyX2lkLCBj b21tX2Ftb3VudCwgc3RfY29tcGxldGVkX2lkLCB0cmFkZV9kdHMsIHRyYWRl X2lkLCB0cmFkZV9wcmljZTsKCS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQoKICAgIC0tIFJlY29yZCB0aGUgdHJhZGUgcmVzdWx0IGFuZCB0aGUg YnJva2VyJ3MgY29tbWlzc2lvbgoKCXVwZGF0ZQlUUkFERQoJc2V0CVRfQ09N TSA9IGNvbW1fYW1vdW50LAoJCVRfRFRTID0gdHJhZGVfZHRzLAoJCVRfU1Rf SUQgPSBzdF9jb21wbGV0ZWRfaWQsCgkJVF9UUkFERV9QUklDRSA9IHRyYWRl X3ByaWNlCgl3aGVyZQlUX0lEID0gdHJhZGVfaWQ7CgoJaW5zZXJ0CglpbnRv CVRSQURFX0hJU1RPUlkgKAlUSF9UX0lELAoJCQkJVEhfRFRTLAoJCQkJVEhf U1RfSUQpCgl2YWx1ZXMgKAl0cmFkZV9pZCwKCQkJdHJhZGVfZHRzLAoJCQlz dF9jb21wbGV0ZWRfaWQKCQkpOwoKCXVwZGF0ZQlCUk9LRVIKCXNldAlCX0NP TU1fVE9UQUwgPSBCX0NPTU1fVE9UQUwgKyBjb21tX2Ftb3VudCwKCQlCX05V TV9UUkFERVMgPSBCX05VTV9UUkFERVMgKyAxCgl3aGVyZQlCX0lEID0gYnJv a2VyX2lkOwoKZW5kOwokJCBsYW5ndWFnZSBwbHBnc3FsOwoKCmNyZWF0ZSBv ciByZXBsYWNlIGZ1bmN0aW9uIFRyYWRlUmVzdWx0RnJhbWU2ICgJaW4gYWNj dF9pZCBJREVOVF9ULAoJCQkJCQlpbiBkdWVfZGF0ZSB0aW1lc3RhbXAsCgkJ CQkJCWluIHNfbmFtZSB2YXJjaGFyKDcwKSwKCQkJCQkJaW4gc2VfYW1vdW50 IFZBTFVFX1QsCgkJCQkJCWluIHRyYWRlX2R0cyB0aW1lc3RhbXAsCgkJCQkJ CWluIHRyYWRlX2lkIFRSQURFX1QsCgkJCQkJCWluIHRyYWRlX2lzX2Nhc2gg c21hbGxpbnQsCgkJCQkJCWluIHRyYWRlX3F0eSBTX1FUWV9ULAoJCQkJCQlp biB0eXBlX25hbWUgY2hhcigxMiksCgkJCQkJCW91dCBhY2N0X2JhbCBCQUxB TkNFX1QKKQpBUwokJApERUNMQVJFCmNhc2hfdHlwZQl2YXJjaGFyKDQwKTsK QkVHSU4KCS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoJLS0gTG9n IHRyYW5zYWN0aW9uIGlucHV0cy4gSHVtYW4tcmVhZGVyIGZyaWVuZGx5LgoJ LS1yYWlzZSBsb2cgJ1RSLkY2ICBhY2N0X2lkKCUpICBkdWVfZGF0ZSglKSAg c19uYW1lKCUpICBzZV9hbW91bnQoJSkgIHRyYWRlX2R0cyglKSAgdHJhZGVf aWQoJSkgIHRyYWRlX2lzX2Nhc2goJSkgIHRyYWRlX3F0eSglKSAgdHlwZV9u YW1lKCUpJywKCS0tCWFjY3RfaWQsIGR1ZV9kYXRlLCBzX25hbWUsIHNlX2Ft b3VudCwgdHJhZGVfZHRzLCB0cmFkZV9pZCwgdHJhZGVfaXNfY2FzaCwgdHJh ZGVfcXR5LCB0eXBlX25hbWU7CgktLQoJLS0gTG9nIHRyYW5zYWN0aW9uIGlu cHV0cy4gVGFiLWRlbGltaXRlZCAtIGF1dG9tYXRlZCBkYXRhIHByb2Nlc3Np bmcgZnJpZW5kbHkuCgktLXJhaXNlIGxvZyAnCVRSLkY2CSUJJQklCSUJJQkl CSUJJQklJywKCS0tCWFjY3RfaWQsIGR1ZV9kYXRlLCBzX25hbWUsIHNlX2Ft b3VudCwgdHJhZGVfZHRzLCB0cmFkZV9pZCwgdHJhZGVfaXNfY2FzaCwgdHJh ZGVfcXR5LCB0eXBlX25hbWU7CgktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KCiAgICAtLSBTZXR0bGUgdGhlIHRyYWRlCgoJaWYgKHRyYWRlX2lz X2Nhc2gpIHRoZW4KCQljYXNoX3R5cGUgPSAnQ2FzaCBBY2NvdW50JzsKCWVs c2UKCQljYXNoX3R5cGUgPSAnTWFyZ2luJzsKCWVuZCBpZjsKCglpbnNlcnQK CWludG8JU0VUVExFTUVOVCAoCVNFX1RfSUQsCgkJCQlTRV9DQVNIX1RZUEUs CgkJCQlTRV9DQVNIX0RVRV9EQVRFLAoJCQkJU0VfQU1UKQoJdmFsdWVzICgJ dHJhZGVfaWQsCgkJCWNhc2hfdHlwZSwKCQkJZHVlX2RhdGUsCgkJCXNlX2Ft b3VudAoJCSk7CgoJaWYgKHRyYWRlX2lzX2Nhc2gpIHRoZW4gCgkJdXBkYXRl CUNVU1RPTUVSX0FDQ09VTlQKCQlzZXQJQ0FfQkFMID0gQ0FfQkFMICsgc2Vf YW1vdW50CgkJd2hlcmUJQ0FfSUQgPSBhY2N0X2lkOwoKCQlpbnNlcnQgaW50 byBDQVNIX1RSQU5TQUNUSU9OICgJQ1RfRFRTLAoJCQkJCQlDVF9UX0lELAoJ CQkJCQlDVF9BTVQsCgkJCQkJCUNUX05BTUUpCgkJdmFsdWVzICgJdHJhZGVf ZHRzLAoJCQkJdHJhZGVfaWQsCgkJCQlzZV9hbW91bnQsCgkJCQkodHlwZV9u YW1lIHx8ICcgJyB8fCB0cmFkZV9xdHkgfHwgJyBzaGFyZXMgb2YgJyB8fCBz X25hbWUpCgkJCSk7CgllbmQgaWY7CgoJc2VsZWN0CUNBX0JBTAoJaW50bwlh Y2N0X2JhbAoJZnJvbQlDVVNUT01FUl9BQ0NPVU5UCgl3aGVyZQlDQV9JRCA9 IGFjY3RfaWQ7CgplbmQ7CiQkIGxhbmd1YWdlIHBscGdzcWw7CgpjcmVhdGUg b3IgcmVwbGFjZSBmdW5jdGlvbiBUcmFkZVJlc3VsdEZyYW1lNyAoCiAgICBp biBzdGF0dXNfc3VibWl0dGVkIGNoYXIoNCksCiAgICBpbiB0cmlnZ2VyX2lk IFRSQURFX1QsCiAgICBvdXQgYmlkX3ByaWNlIFNfUFJJQ0VfVCwKICAgIG91 dCBudW1fZm91bmQgaW50LAogICAgb3V0IHN5bWJvbCB2YXJjaGFyKDE1KSwK ICAgIG91dCB0cmFkZV9pZCBUUkFERV9ULAogICAgb3V0IHRyYWRlX3F0eSBT X1FUWV9ULAogICAgb3V0IHRyYWRlX3R5cGVfaWQgY2hhcigzKQopIApBUwok JAoKZGVjbGFyZQogICAgbm93X2R0cyB0aW1lc3RhbXA7CgpCRUdJTgoKICAg IHNlbGVjdCAgbm93KCkKICAgIGludG8gICAgbm93X2R0czsKICAgIAogICAg c2VsZWN0ICBUUl9UX0lELAogICAgICAgICAgICBUUl9CSURfUFJJQ0UsCiAg ICAgICAgICAgIFRSX1NfU1lNQiwKICAgICAgICAgICAgVFJfVFRfSUQsCiAg ICAgICAgICAgIFRSX1FUWQogICAgICAgICAgICAKICAgIGZyb20gICAgVFJB REVfUkVRVUVTVAogICAgCiAgICBpbnRvICAgIHRyYWRlX2lkLAogICAgICAg ICAgICBiaWRfcHJpY2UsCiAgICAgICAgICAgIHN5bWJvbCwKICAgICAgICAg ICAgdHJhZGVfdHlwZV9pZCwKICAgICAgICAgICAgdHJhZGVfcXR5CiAgICAg ICAgICAgIAogICAgd2hlcmUgICBUUl9UX0lEID0gdHJpZ2dlcl9pZDsKICAg IAogICAgc2VsZWN0ICAxCiAgICBpbnRvICAgIG51bV9mb3VuZDsKICAgIAog ICAgZGVsZXRlCiAgICBmcm9tICAgIFRSQURFX1JFUVVFU1QKICAgIHdoZXJl ICAgVFJfVF9JRCA9IHRyaWdnZXJfaWQ7CiAgICAKICAgIHVwZGF0ZSAgVFJB REUKICAgIHNldCAgICAgVF9EVFMgPSBub3dfZHRzLAogICAgICAgICAgICBU X1NUX0lEID0gc3RhdHVzX3N1Ym1pdHRlZAogICAgd2hlcmUgICBUX0lEID0g dHJpZ2dlcl9pZDsKICAgIAogICAgaW5zZXJ0CiAgICBpbnRvICAgIFRSQURF X0hJU1RPUlkgKFRIX1RfSUQsIFRIX0RUUywgVEhfU1RfSUQpCiAgICB2YWx1 ZXMgICh0cmlnZ2VyX2lkLCBub3dfZHRzLCBzdGF0dXNfc3VibWl0dGVkKTsK CmVuZDsKJCQgbGFuZ3VhZ2UgcGxwZ3NxbDsKCg== --_002_93e2642196e646adbcf5780d3cf54685EX13MBX013vmwarecom_ Content-Type: text/plain Content-Disposition: inline Content-Transfer-Encoding: 8bit MIME-Version: 1.0 -- Sent via pgsql-performance mailing list (pgsql-performance@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-performance --_002_93e2642196e646adbcf5780d3cf54685EX13MBX013vmwarecom_--