delorie.com/archives/browse.cgi | search |
X-Recipient: | archive-cygwin AT delorie DOT com |
X-SWARE-Spam-Status: | No, hits=-2.6 required=5.0 tests=AWL,BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FROM,RCVD_IN_DNSWL_LOW,TW_RG,TW_SW |
X-Spam-Check-By: | sourceware.org |
Message-ID: | <4EDC224D.3020907@gmail.com> |
Date: | Sun, 04 Dec 2011 17:45:49 -0800 |
From: | Daniel Colascione <dan DOT colascione AT gmail DOT com> |
User-Agent: | Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:8.0) Gecko/20111105 Thunderbird/8.0 |
MIME-Version: | 1.0 |
To: | cygwin AT cygwin DOT com |
Subject: | injob version 1.3 |
X-IsSubscribed: | yes |
Mailing-List: | contact cygwin-help AT cygwin DOT com; run by ezmlm |
List-Id: | <cygwin.cygwin.com> |
List-Subscribe: | <mailto:cygwin-subscribe AT cygwin DOT com> |
List-Archive: | <http://sourceware.org/ml/cygwin/> |
List-Post: | <mailto:cygwin AT cygwin DOT com> |
List-Help: | <mailto:cygwin-help AT cygwin DOT com>, <http://sourceware.org/ml/#faqs> |
Sender: | cygwin-owner AT cygwin DOT com |
Mail-Followup-To: | cygwin AT cygwin DOT com |
Delivered-To: | mailing list cygwin AT cygwin DOT com |
--------------enig77974F43BAEA62474A7EAD45 Content-Type: multipart/mixed; boundary="------------090306080502090103040904" This is a multi-part message in MIME format. --------------090306080502090103040904 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable /** * injob: runs a program (Win32 or Cygwin) in a job object, imbuing it * and all its sub-processes with Cygwin job control support. * * Revision history: * * Version 1.3 - 2011-12-04 * * - Add ability to wait for all processes in a job to exit * before killing the entire job. * * - Add ability to trace execution of processes in jobs. * * - Correctly block SIGHUP. * * - Print PIDs of children in the job when SIGUSR1 is * received. * * - Correctly propagate exit status of Cygwin programs in the job. * * Version 1.0 - 2011-04-06 * * - Initial release * */ --------------090306080502090103040904 Content-Type: text/plain; x-mac-type="0"; x-mac-creator="0"; name="injob.c" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="injob.c" LyoqCiAqIGluam9iOiBydW5zIGEgcHJvZ3JhbSAoV2luMzIgb3IgQ3lnd2lu KSBpbiBhIGpvYiBvYmplY3QsIGltYnVpbmcgaXQKICogYW5kIGFsbCBpdHMg c3ViLXByb2Nlc3NlcyB3aXRoIEN5Z3dpbiBqb2IgY29udHJvbCBzdXBwb3J0 LgogKgogKiBSZXZpc2lvbiBoaXN0b3J5OgogKgogKiBWZXJzaW9uIDEuMyAt IDIwMTEtMTItMDQKICoKICogICAtIEFkZCBhYmlsaXR5IHRvIHdhaXQgZm9y IGFsbCBwcm9jZXNzZXMgaW4gYSBqb2IgdG8gZXhpdAogKiAgICAgYmVmb3Jl IGtpbGxpbmcgdGhlIGVudGlyZSBqb2IuCiAqCiAqICAgLSBBZGQgYWJpbGl0 eSB0byB0cmFjZSBleGVjdXRpb24gb2YgcHJvY2Vzc2VzIGluIGpvYnMuCiAq CiAqICAgLSBDb3JyZWN0bHkgYmxvY2sgU0lHSFVQLgogKgogKiAgIC0gUHJp bnQgUElEcyBvZiBjaGlsZHJlbiBpbiB0aGUgam9iIHdoZW4gU0lHVVNSMiBp cwogKiAgICAgcmVjZWl2ZWQuCiAqCiAqICAgLSBDb3JyZWN0bHkgcHJvcGFn YXRlIGV4aXQgc3RhdHVzIG9mIEN5Z3dpbiBwcm9ncmFtcyBpbiB0aGUgam9i LgogKgogKiBWZXJzaW9uIDEuMCAtIDIwMTEtMDQtMDYKICoKICogICAtIElu aXRpYWwgcmVsZWFzZQogKgogKi8KCiNkZWZpbmUgX1dJTjMyX1dJTk5UIDB4 MDUwMCAvKldpbjJrKi8KI2RlZmluZSBTVFJJQ1QKI2RlZmluZSBVTklDT0RF IDEKI2RlZmluZSBfVU5JQ09ERSAxCgojaW5jbHVkZSA8d2NoYXIuaD4KI2lu Y2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDx3aW5kb3dzLmg+CiNpbmNsdWRl IDxkZGsvbnRhcGkuaD4KI2luY2x1ZGUgPGdldG9wdC5oPgojaW5jbHVkZSA8 c3lzL2N5Z3dpbi5oPgojaW5jbHVkZSA8c3lzL3F1ZXVlLmg+CiNpbmNsdWRl IDxwcm9jZXNzLmg+CiNpbmNsdWRlIDx1bmlzdGQuaD4KI2luY2x1ZGUgPHN5 cy90eXBlcy5oPgojaW5jbHVkZSA8c3lzL3dhaXQuaD4KI2luY2x1ZGUgPGVy cm5vLmg+CiNpbmNsdWRlIDxUbGhlbHAzMi5oPgojaW5jbHVkZSA8cHRocmVh ZC5oPgojaW5jbHVkZSA8YXNzZXJ0Lmg+CgojZGVmaW5lIFBSR05BTUUgImlu am9iIgojZGVmaW5lIFBSR1ZFUiAiMS4zIgojZGVmaW5lIFBSR0FVVEhPUiAi RGFuaWVsIENvbGFzY2lvbmUgPGRhbi5jb2xhc2Npb25lQGdtYWlsLmNvbT4i CiNkZWZpbmUgUFJHQ09QWSAiQ29weXJpZ2h0IChDKSAyMDExICIgUFJHQVVU SE9SCiNkZWZpbmUgUFJHTElDRU5TRSAiR1BMdjIgb3IgbGF0ZXIgPGh0dHA6 Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwtMi4wLmh0bWw+IgoKI2lmbmRl ZiBQUk9DRVNTX1FVRVJZX0xJTUlURURfSU5GT1JNQVRJT04KI2RlZmluZSBQ Uk9DRVNTX1FVRVJZX0xJTUlURURfSU5GT1JNQVRJT04gMHgxMDAwCiNlbmRp ZgoKLyogR2V0cyBzZXQgdG8gUFJPQ0VTU19RVUVSWV9MSU1JVEVEX0lORk9S TUFUSU9OIGlmIHdlJ3JlIHJ1bm5pbmcgb24KICogPj0gVmlzdGEuICBBbHdh eXMgYmV0dGVyIHRvIHVzZSBsZWFzdCBwcml2aWxlZ2UuICovCnN0YXRpYyBE V09SRCBvcGVuX3Byb2Nlc3Nfc2Nhbl9mbGFncyA9IFBST0NFU1NfUVVFUllf SU5GT1JNQVRJT047CgovKioKICogU21hbGwgdXRpbGl0eSB0byBydW4gYW4g YXJiaXRyYXJ5IHNldCBvZiBwcm9jZXNzZXMgd2l0aGluIGEgam9iCiAqIG9i amVjdC4gIFdlIHJlYWNoIHRvIEN5Z3dpbiBqb2IgY29udHJvbCBzaWduYWxz IGJ5IGFwcHJvcHJpYXRlbHkKICogbWFuaXB1bGF0aW5nIHRoZSBqb2Igb2Jq ZWN0LCBwcm92aWRpbmcgYSBjcnVkZSBmb3JtIG9mIGpvYiBjb250cm9sCiAq IGZvciBXaW4zMiBhcHBsaWNhdGlvbnMgYmVpbmcgcnVuIGZyb20gQ3lnd2lu IHByb2dyYW1zLgogKgogKiBJdCB3b3JrcyBsaWtlIHRoaXM6CiAqCiAqICAg LSBTdGFydHVwLgogKgogKiAgIC0gQ3JlYXRlIGEgcGlwZSB3aXRoIGVuZHMg UF9SIGFuZCBQX1cuCiAqCiAqICAgLSBCbG9jayBzaWduYWxzLgogKgogKiAg IC0gRm9yawogKgogKiAgICAgKiBDaGlsZCBjbG9zZXMgUF9XLCBibG9ja3Mg cmVhZGluZyBQX1IuICBJZiBpdCBnZXRzIEVPRiwgY2hpbGQKICogICAgICAg a25vd3MgcGFyZW50IGRpZWQgZm9yIHNvbWUgcmVhc29uIGFuZCBleGl0cyB3 aXRob3V0IGRvaW5nCiAqICAgICAgIGFueXRoaW5nIGVsc2UuCiAqCiAqICAg ICAqIENoaWxkIHJlYWRzIDEgYnl0ZSBmcm9tIHBpcGUsIGluZGljYXRpbmcg YWxsLWNsZWFyLgogKgogKiAgICAgKiBDaGlsZCBleGVjcyB0YXJnZXQgcHJv Z3JhbS4KICoKICogICAtIE1lYW53aGlsZSBwYXJlbnQgY2xvc2VzIFBfUiBh bmQga25vd3MgY2hpbGQgaXMgYmxvY2tlZCBvbiBwaXBlLgogKgogKiAgIC0g UGFyZW50IGNyZWF0ZXMgam9iIG9iamVjdCBhbmQgcHV0cyB0aGUgY2hpbGQK ICogICAgIGludG8gaXQgKGNoaWxkIGlzIHN0aWxsIGJsb2NrZWQpLgogKgog KiAgIC0gUGFyZW50IGdpdmVzIGFsbC1jbGVhciBzaWduYWwgdG8gY2hpbGQg Ynkgd3JpdGluZyBvbmUgYnl0ZSB0bwogKiAgICAgUF9XIGFuZCBjbG9zaW5n IGl0LgogKgogKiAgIC0gUGFyZW50IHdhaXRzIGZvciBTSUdJTlQsIFNJR1RF Uk0sIFNJR0NITEQsIGV0Yy4KICoKICovCgpzdGF0aWMgQk9PTCBXSU5BUEkK KCpYSXNQcm9jZXNzSW5Kb2IpKAogICAgSEFORExFIFByb2Nlc3NIYW5kbGUs CiAgICBIQU5ETEUgSm9iSGFuZGxlLAogICAgUEJPT0wgUmVzdWx0CiAgICAp OwoKI2RlZmluZSBDSEsob3ApICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBcCiAgICAoeyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgIGludCBjaGtf cmV0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBcCiAgICAgICAgZG8geyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICAgICBjaGtfcmV0ID0g KG9wKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICB9 IHdoaWxlIChjaGtfcmV0ID09IC0xICYmIGVycm5vID09IEVJTlRSKTsgICAg ICBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgXAogICAgICAgIGlmIChjaGtfcmV0ID09IC0xKSB7 ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgICAgZnBy aW50ZiAoc3RkZXJyLCBQUkdOQU1FICI6ICIgI29wICI6ICVzXG4iLCBcCiAg ICAgICAgICAgICAgICAgICAgIHN0cmVycm9yIChlcnJubykpOyAgICAgICAg ICAgICAgICAgXAogICAgICAgICAgICBnb3RvIG91dDsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICB9ICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAg Y2hrX3JldDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgXAogICAgfSkKCiNkZWZpbmUgQ0hLX1czMl9IQU5ETEUob3ApICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgKHsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAg ICBIQU5ETEUgY2hrX3JldCA9IChvcCk7ICAgICAgICAgICAgICAgICAgICAg ICAgICBcCiAgICAgICAgaWYgKGNoa19yZXQgPT0gTlVMTCB8fCAgICAgICAg ICAgICAgICAgICAgICAgICAgXAogICAgICAgICAgICBjaGtfcmV0ID09IElO VkFMSURfSEFORExFX1ZBTFVFKSAgICAgICAgICAgIFwKICAgICAgICB7ICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc CiAgICAgICAgICAgIGZwcmludGYgKHN0ZGVyciwgUFJHTkFNRSAiOiAiICNv cCAiOiAlc1xuIiwgXAogICAgICAgICAgICAgICAgICAgICBlcnJtc2cgKEdl dExhc3RFcnJvciAoKSkpOyAgICAgICAgIFwKICAgICAgICAgICAgZ290byBv dXQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAg ICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFwKICAgICAgICBjaGtfcmV0OyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICB9KQoKI2Rl ZmluZSBDSEtfVzMyX0JPT0wob3ApICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBcCiAgICAoeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgIEJPT0wgY2hrX3JldCA9 IChvcCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICBp ZiAoY2hrX3JldCA9PSBGQUxTRSkgeyAgICAgICAgICAgICAgICAgICAgICAg ICBcCiAgICAgICAgICAgIGZwcmludGYgKHN0ZGVyciwgUFJHTkFNRSAiOiAi ICNvcCAiOiAlc1xuIiwgXAogICAgICAgICAgICAgICAgICAgICBlcnJtc2cg KEdldExhc3RFcnJvciAoKSkpOyAgICAgICAgIFwKICAgICAgICAgICAgZ290 byBvdXQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAg ICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICBjaGtfcmV0OyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICB9KQoK CiNkZWZpbmUgUElQRV9SRUFEICAwCiNkZWZpbmUgUElQRV9XUklURSAxCgpz dHJ1Y3Qgc3VzcGVuZAp7CiAgICBEV09SRCAgIHRocmVhZF9pZDsKICAgIEhB TkRMRSAgdGhyZWFkOwoKICAgIFNMSVNUX0VOVFJZIChzdXNwZW5kKSBlbnRy aWVzOwp9OwoKc3RhdGljIHZvaWQKdXNhZ2UoKQp7CiAgICBmcHJpbnRmICgK ICAgICAgICBzdGRvdXQsCiAgICAgICAgUFJHTkFNRSAiIFtPUFRJT05TXSBQ Uk9HUkFNIEFSRzEgQVJHMi4uLjogUnVuIFBST0dSQU0gaW4gYSBqb2Igb2Jq ZWN0XG4iCiAgICAgICAgIlxuIgogICAgICAgICIgIFBST0dSQU0gd2lsbCBi ZSBydW4gaW4gYSBqb2Igb2JqZWN0LiAgQSBTSUdIVVAsIFNJR1RFUk0sIG9y IFNJR0lOVFxuIgogICAgICAgICIgIHNlbnQgdG8gdGhpcyBwcm9lc3Mgd2ls bCB0ZXJtaW5hdGUgUFJPR1JBTSBhbmQgYWxsIGl0cyBjaGlsZHJlbi5cbiIK ICAgICAgICAiXG4iCiAgICAgICAgIiAgQnkgZGVmYXVsdCwgd2Uga2lsbCBh bGwgcHJvY2Vzc2VzIGluIHRoZSBqb2IgYW5kIGV4aXQgd2hlbiBQUk9HUkFN XG4iCiAgICAgICAgIiAgaXRzZWxmIGV4aXRzLiAgSWYgLS13YWl0LWFsbCBp cyBwYXNzZWQsIGhvd2V2ZXIsIHdlIGRlbGF5IGV4aXRpbmdcbiIKICAgICAg ICAiICB1bnRpbCBhbGwgcHJvY2Vzc2VzIGluIHRoZSBqb2IgZXhpdC5cbiIK ICAgICAgICAiXG4iCiAgICAgICAgUFJHTkFNRSAiIC1oXG4iCiAgICAgICAg UFJHTkFNRSAiIC0taGVscFxuIgogICAgICAgICJcbiIKICAgICAgICAiICBE aXNwbGF5IHRoaXMgaGVscCBtZXNzYWdlLlxuIgogICAgICAgICJcbiIKICAg ICAgICBQUkdOQU1FICIgLWFcbiIKICAgICAgICBQUkdOQU1FICIgLS13YWl0 LWFsbFxuIgogICAgICAgICJcbiIKICAgICAgICAiICBXYWl0IGZvciBhbGwg cHJvY2Vzc2VzIGluIHRoZSBqb2IgdG8gZXhpdCBiZWZvcmUgZXhpdGluZyBp bnN0ZWFkIG9mXG4iCiAgICAgICAgIiAgZXhpdGluZyAoYW5kIGtpbGxpbmcg dGhlIGpvYikgYWZ0ZXIgUFJPR1JBTSBpdHNlbGYgZXhpdHMuXG4iCiAgICAg ICAgIlxuIgogICAgICAgIFBSR05BTUUgIiAtdlxuIgogICAgICAgIFBSR05B TUUgIiAtLXZlcmJvc2VcbiIKICAgICAgICAiXG4iCiAgICAgICAgIiAgVHJh Y2UgcHJvY2VzcyBjcmVhdGlvbiBhbmQgZGVzdHJ1Y3Rpb24gb24gc3RkZXJy LlxuIgogICAgICAgICJcbiIKICAgICAgICBQUkdOQU1FICIgLVZcbiIKICAg ICAgICBQUkdOQU1FICIgLS12ZXJzaW9uXG4iCiAgICAgICAgIlxuIgogICAg ICAgICIgIERpc3BsYXkgdmVyc2lvbiBpbmZvcm1hdGlvbi5cbiIKCSk7Cn0K CnN0YXRpYyB2b2lkCnZlcnNpbmZvICgpCnsKICAgIGZwcmludGYgKHN0ZG91 dCwKICAgICAgICAgICAgIFBSR05BTUUgIiAiIFBSR1ZFUiAiXG4iCiAgICAg ICAgICAgICBQUkdDT1BZICJcbiIKICAgICAgICAgICAgIFBSR0xJQ0VOU0Ug IlxuIgogICAgICAgICk7Cn0KCi8qIENvbnZlcnQgYSB3aWRlLWNoYXJhY3Rl ciBzdHJpbmcgdG8gYSBtYWxsb2NlZCBtdWx0aWJ5dGUgc3RyaW5nCiAgIGVu Y29kZWQgYXMgc3BlY2lmaWVkIGluIHRoZSBjdXJyZW50IGxvY2FsZS4gIFJl dHVybiBOVUxMIG9uCiAgIGZhaWx1cmUuICovCnN0YXRpYyBjaGFyKgp0b19t YnMoY29uc3Qgd2NoYXJfdCogd2NzKQp7CiAgICBzaXplX3QgbWJzX2xlbmd0 aCA9IHdjc3RvbWJzKE5VTEwsIHdjcywgMCkgKyAxOwogICAgY2hhciogbWJz ID0gbWFsbG9jKG1ic19sZW5ndGggKiBzaXplb2YoKm1icykpOwogICAgaWYo bWJzICE9IE5VTEwpIHsKICAgICAgICBpZih3Y3N0b21icyhtYnMsIHdjcywg bWJzX2xlbmd0aCkgPT0gKHNpemVfdCkgLTEpIHsKICAgICAgICAgICAgZnJl ZShtYnMpOwogICAgICAgICAgICBtYnMgPSBOVUxMOwogICAgICAgIH0KICAg IH0KCiAgICByZXR1cm4gbWJzOwp9CgovKiBEZWNvZGUgYSBXaW4zMiBlcnJv ciBjb2RlIHRvIGEgbG9jYWxpemVkIHN0cmluZyBlbmNvZGVkIGFjY29yZGlu ZwogICB0byB0aGUgY3VycmVudCBsb2NhbGUuICBSZXR1cm4gYSBtYWxsb2Mo KWVkIHN0cmluZy4gKi8Kc3RhdGljIGNoYXIqCmVycm1zZyhEV09SRCBlcnJv cmNvZGUpCnsKICAgIHdjaGFyX3QqIHdjc21zZyA9IE5VTEw7CiAgICBjaGFy KiBtc2cgPSBOVUxMOwoKICAgIEZvcm1hdE1lc3NhZ2VXKAogICAgICAgIChG T1JNQVRfTUVTU0FHRV9GUk9NX1NZU1RFTXwKICAgICAgICAgRk9STUFUX01F U1NBR0VfQUxMT0NBVEVfQlVGRkVSKSwKICAgICAgICBOVUxMLAogICAgICAg IGVycm9yY29kZSwKICAgICAgICAwLAogICAgICAgIChMUFdTVFIpJndjc21z ZywKICAgICAgICAwLAogICAgICAgIE5VTEwpOwoKICAgIGlmKHdjc21zZyAh PSBOVUxMKSB7CiAgICAgICAgbXNnID0gdG9fbWJzKHdjc21zZyk7CiAgICAg ICAgTG9jYWxGcmVlKHdjc21zZyk7CiAgICAgICAgaWYobXNnICYmIG1zZ1sw XSAmJiBtc2dbc3RybGVuKG1zZykgLSAxXSA9PSAnXG4nKSB7CiAgICAgICAg ICAgIG1zZ1tzdHJsZW4obXNnKSAtIDFdID0gJ1wwJzsKICAgICAgICB9CiAg ICB9CgogICAgaWYobXNnID09IE5VTEwpIHsKICAgICAgICBtc2cgPSBzdHJk dXAoIlt1bmtub3duIGVycm9yXSIpOwogICAgfQoKICAgIHJldHVybiBtc2c7 Cn0KCi8qIEhvbGRzIGEgbGlzdCBvZiBwcm9jZXNzZXMgd2UndmUgc3VzcGVu ZGVkLiAqLwoKdHlwZWRlZiBTTElTVF9IRUFEIChzdXNwZW5kX2xpc3RfaGVh ZCwgc3VzcGVuZCkgc3VzcGVuZF9saXN0X2hlYWRfdDsKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljIHN1 c3BlbmRfbGlzdF9oZWFkX3Qgc3VzcGVuZF9saXN0X2hlYWQgPQogICAgU0xJ U1RfSEVBRF9JTklUSUFMSVpFUiAoc3VzcGVuZF9saXN0X2hlYWQpOwoKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg LyogUmVzdW1lIGV2ZXJ5dGhpbmcgd2UgcmVtZW1iZXIgd2Ugc3VzcGVuZGVk LiAqLwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBzdGF0aWMgdm9pZAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICByZXN1bWVfYWxsICgpCnsKICAgIHN0 cnVjdCBzdXNwZW5kKiBzdXNwOwoKICAgIHdoaWxlICghU0xJU1RfRU1QVFkg KCZzdXNwZW5kX2xpc3RfaGVhZCkpIHsKICAgICAgICBzdXNwID0gU0xJU1Rf RklSU1QgKCZzdXNwZW5kX2xpc3RfaGVhZCk7CiAgICAgICAgU0xJU1RfUkVN T1ZFX0hFQUQgKCZzdXNwZW5kX2xpc3RfaGVhZCwgZW50cmllcyk7CgogICAg ICAgIC8qIERvbid0IGNhcmUgYWJvdXQgZmFpbHVyZXMgaGVyZS4gQmVzdCBl ZmZvcnQuICovCiAgICAgICAgUmVzdW1lVGhyZWFkIChzdXNwLT50aHJlYWQp OwogICAgICAgIENsb3NlSGFuZGxlIChzdXNwLT50aHJlYWQpOwogICAgICAg IGZyZWUgKHN1c3ApOwogICAgfQp9CgpzdGF0aWMgQk9PTAppc190aHJlYWRf YWxyZWFkeV9zdXNwZW5kZWQgKERXT1JEIHRocmVhZF9pZCkKewogICAgc3Ry dWN0IHN1c3BlbmQqIHM7CiAgICBTTElTVF9GT1JFQUNIIChzLCAmc3VzcGVu ZF9saXN0X2hlYWQsIGVudHJpZXMpIHsKICAgICAgICBpZiAocy0+dGhyZWFk X2lkID09IHRocmVhZF9pZCkgewogICAgICAgICAgICByZXR1cm4gVFJVRTsK ICAgICAgICB9CiAgICB9CgogICAgcmV0dXJuIEZBTFNFOwp9CgovKiBCcnV0 ZSBmb3JjZS4gTG9vcCB0aHJvdWdoIGFsbCBwcm9jZXNlcyBpbiB0aGUgc3lz dGVtIGFuZCBzdXNwZW5kCiAqIHRocmVhZHMgaW4gb3VyIGpvYiB1bnRpbCB3 ZSdyZSBvdXQgb2YgdGhyZWFkcyB0byBzdXNwZW5kLiAqLwpzdGF0aWMgdm9p ZApzdXNwZW5kX2FsbF9pbl9qb2IgKEhBTkRMRSBqb2IpCnsKICAgIHVuc2ln bmVkIG5yX3N1c3BlbmRlZDsKICAgIEhBTkRMRSBzbmFwOwogICAgVEhSRUFE RU5UUlkzMiB0aGVudDsKICAgIEhBTkRMRSBwcm9jOwogICAgSEFORExFIHRo cmVhZDsKICAgIEJPT0wgcHJvY2Vzc19pbl9qb2I7CiAgICBzdHJ1Y3Qgc3Vz cGVuZCogbmV3X3N1c3AgPSBOVUxMOwogICAgdW5zaWduZWQgdHJ5X2NvdW50 ID0gMTAwMDsKCiAgICBkbyB7CiAgICAgICAgbnJfc3VzcGVuZGVkID0gMDsK ICAgICAgICBzbmFwID0gQ3JlYXRlVG9vbGhlbHAzMlNuYXBzaG90IChUSDMy Q1NfU05BUFRIUkVBRCwgMCk7CgogICAgICAgIGlmIChzbmFwID09IE5VTEwp IHsKICAgICAgICAgICAgZ290byBuZXh0X3NuYXBzaG90OwogICAgICAgIH0K CiAgICAgICAgbWVtc2V0ICgmdGhlbnQsIDAsIHNpemVvZiAodGhlbnQpKTsK ICAgICAgICB0aGVudC5kd1NpemUgPSBzaXplb2YgKHRoZW50KTsKCiAgICAg ICAgaWYgKFRocmVhZDMyRmlyc3QgKHNuYXAsICZ0aGVudCkgPT0gRkFMU0Up IHsKICAgICAgICAgICAgZ290byBuZXh0X3NuYXBzaG90OwogICAgICAgIH0K CiAgICAgICAgZG8gewogICAgICAgICAgICAvKiBUaHJlYWQzMntGaXJzdCxO ZXh0fSBpcyBhbGxvd2VkIHRvIHJldHVybiBhIHN0cnVjdAogICAgICAgICAg ICAgICBzbWFsbGVyIHRoYXQgdGhlIG9uZSB3ZSBhc2tlZCBmb3IsIHNvIG1h a2Ugc3VyZSB0aGUKICAgICAgICAgICAgICAgZmllbGRzIHdlIHVzZWQgYXJl IGluY2x1ZGVkIGluIHRoaXMgc3RydWN0dXJlLiAqLwogICAgICAgICAgICBp ZiAodGhlbnQuZHdTaXplIDwgc2l6ZW9mIChEV09SRCkqNCkgewogICAgICAg ICAgICAgICAgZ290byBuZXh0X3RocmVhZDsKICAgICAgICAgICAgfQoKICAg ICAgICAgICAgcHJvYyA9IE5VTEw7CiAgICAgICAgICAgIHRocmVhZCA9IE5V TEw7CgogICAgICAgICAgICBwcm9jID0gT3BlblByb2Nlc3MgKG9wZW5fcHJv Y2Vzc19zY2FuX2ZsYWdzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIEZBTFNFIC8qZG8gbm90IGluaGVyaXQqLywKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICB0aGVudC50aDMyT3duZXJQcm9jZXNzSUQpOwoK ICAgICAgICAgICAgaWYgKHByb2MgPT0gTlVMTCkgewogICAgICAgICAgICAg ICAgZ290byBuZXh0X3RocmVhZDsKICAgICAgICAgICAgfQoKICAgICAgICAg ICAgaWYgKFhJc1Byb2Nlc3NJbkpvYiAocHJvYywgam9iLCAmcHJvY2Vzc19p bl9qb2IpID09IEZBTFNFKSB7CiAgICAgICAgICAgICAgICBnb3RvIG5leHRf dGhyZWFkOwogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAocHJvY2Vz c19pbl9qb2IgPT0gRkFMU0UpIHsKICAgICAgICAgICAgICAgIGdvdG8gbmV4 dF90aHJlYWQ7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIC8qIFdlIGZv dW5kIGEgdGhyZWFkIGluIGEgcHJvY2VzcyB0aGF0J3MgaW4gb3VyIGpvYi4g IE5vdwogICAgICAgICAgICAgKiB0aGlzIHBhcnQgaXMgTyhOXjIpOiB3ZSBl eGFtaW5lIG91ciBlbnRpcmUgbGlzdAogICAgICAgICAgICAgKiBzbyBmYXIg dG8gbWFrZSBzdXJlIHdlIGhhdmVuJ3QgYWxyZWFkeSBub3RpY2VkIHRoaXMK ICAgICAgICAgICAgICogdGhyZWFkLiAqLwoKICAgICAgICAgICAgaWYgKGlz X3RocmVhZF9hbHJlYWR5X3N1c3BlbmRlZCAodGhlbnQudGgzMlRocmVhZElE KSkgewogICAgICAgICAgICAgICAgZ290byBuZXh0X3RocmVhZDsKICAgICAg ICAgICAgfQoKICAgICAgICAgICAgdGhyZWFkID0gT3BlblRocmVhZCAoVEhS RUFEX1NVU1BFTkRfUkVTVU1FLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBGQUxTRSAvKmRvIG5vdCBpbmhlcml0Ki8sCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHRoZW50LnRoMzJUaHJlYWRJRCk7Cgog ICAgICAgICAgICBpZiAodGhyZWFkID09IE5VTEwpIHsKICAgICAgICAgICAg ICAgIGdvdG8gbmV4dF90aHJlYWQ7CiAgICAgICAgICAgIH0KCiAgICAgICAg ICAgIC8qIFdlIGZvdW5kIGEgbWF0Y2ggd2UgZGlkbid0IG5vdGljZSBiZWZv cmUuICovCgogICAgICAgICAgICBuZXdfc3VzcCA9IG1hbGxvYyAoc2l6ZW9m ICgqbmV3X3N1c3ApKTsKICAgICAgICAgICAgaWYgKG5ld19zdXNwID09IE5V TEwpIHsKICAgICAgICAgICAgICAgIGdvdG8gbmV4dF90aHJlYWQ7CiAgICAg ICAgICAgIH0KCiAgICAgICAgICAgIG5ld19zdXNwLT50aHJlYWQgPSB0aHJl YWQ7CiAgICAgICAgICAgIG5ld19zdXNwLT50aHJlYWRfaWQgPSB0aGVudC50 aDMyVGhyZWFkSUQ7CgogICAgICAgICAgICAvKiBUcnkgdG8gc3VzcGVuZCB0 aGUgdGhyZWFkICovCgogICAgICAgICAgICBpZiAoU3VzcGVuZFRocmVhZCAo dGhyZWFkKSA9PSAoRFdPUkQpLTEpIHsKICAgICAgICAgICAgICAgIGdvdG8g bmV4dF90aHJlYWQ7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIFNMSVNU X0lOU0VSVF9IRUFEICgmc3VzcGVuZF9saXN0X2hlYWQsIG5ld19zdXNwLCBl bnRyaWVzKTsKICAgICAgICAgICAgKytucl9zdXNwZW5kZWQ7CgogICAgICAg ICAgICB0aHJlYWQgPSBOVUxMOwogICAgICAgICAgICBuZXdfc3VzcCA9IE5V TEw7CgogICAgICAgICAgICBuZXh0X3RocmVhZDoKCiAgICAgICAgICAgIGZy ZWUgKG5ld19zdXNwKTsKCiAgICAgICAgICAgIGlmICh0aHJlYWQgIT0gTlVM TCkgewogICAgICAgICAgICAgICAgQ2xvc2VIYW5kbGUgKHRocmVhZCk7CiAg ICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmIChwcm9jICE9IE5VTEwpIHsK ICAgICAgICAgICAgICAgIENsb3NlSGFuZGxlIChwcm9jKTsKICAgICAgICAg ICAgfQoKICAgICAgICAgICAgbWVtc2V0ICgmdGhlbnQsIDAsIHNpemVvZiAo dGhlbnQpKTsKICAgICAgICAgICAgdGhlbnQuZHdTaXplID0gc2l6ZW9mICh0 aGVudCk7CiAgICAgICAgfSB3aGlsZSAoVGhyZWFkMzJOZXh0IChzbmFwLCAm dGhlbnQpKTsKCiAgICAgICAgbmV4dF9zbmFwc2hvdDoKICAgICAgICBpZiAo c25hcCAhPSBOVUxMKSB7CiAgICAgICAgICAgIENsb3NlSGFuZGxlIChzbmFw KTsKICAgICAgICAgICAgc25hcCA9IE5VTEw7CiAgICAgICAgfQogICAgfSB3 aGlsZSAoLS10cnlfY291bnQgJiYgbnJfc3VzcGVuZGVkID4gMCk7Cn0KCnN0 YXRpYyB2b2lkCnByaW50X2FsbF9pbl9qb2IgKEhBTkRMRSBqb2IpCnsKICAg IEhBTkRMRSBzbmFwOwogICAgUFJPQ0VTU0VOVFJZMzIgcHJvY2VudDsKICAg IEhBTkRMRSBwcm9jOwogICAgQk9PTCBwcm9jZXNzX2luX2pvYjsKICAgIGlu dCBwcm9jaW5qb2I9MDsKCiAgICBzbmFwID0gQ3JlYXRlVG9vbGhlbHAzMlNu YXBzaG90IChUSDMyQ1NfU05BUFBST0NFU1MsIDApOwoKICAgIGlmIChzbmFw ID09IE5VTEwpIHsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgZnByaW50 ZiAoc3RkZXJyLCAiUHJvY2Vzc2VzIGluIGpvYjpcbiIpOwoKICAgIG1lbXNl dCAoJnByb2NlbnQsIDAsIHNpemVvZiAocHJvY2VudCkpOwogICAgcHJvY2Vu dC5kd1NpemUgPSBzaXplb2YgKHByb2NlbnQpOwoKICAgIGlmIChQcm9jZXNz MzJGaXJzdCAoc25hcCwgJnByb2NlbnQpID09IEZBTFNFKSB7CiAgICAgICAg Q2xvc2VIYW5kbGUgKHNuYXApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAg ICBkbyB7CiAgICAgICAgLyogUHJvY2VzczMye0ZpcnN0LE5leHR9IGlzIGFs bG93ZWQgdG8gcmV0dXJuIGEgc3RydWN0CiAgICAgICAgICAgc21hbGxlciB0 aGF0IHRoZSBvbmUgd2UgYXNrZWQgZm9yLCBzbyBtYWtlIHN1cmUgdGhlCiAg ICAgICAgICAgZmllbGRzIHdlIHVzZWQgYXJlIGluY2x1ZGVkIGluIHRoaXMg c3RydWN0dXJlLiAqLwogICAgICAgIGlmIChwcm9jZW50LmR3U2l6ZSA8IHNp emVvZiAoRFdPUkQpKjQpIHsKICAgICAgICAgICAgZ290byBuZXh0X3Byb2Nl c3M7CiAgICAgICAgfQoKICAgICAgICBwcm9jID0gT3BlblByb2Nlc3MgKG9w ZW5fcHJvY2Vzc19zY2FuX2ZsYWdzLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgRkFMU0UgLypkbyBub3QgaW5oZXJpdCovLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgcHJvY2VudC50aDMyUHJvY2Vzc0lEKTsKCiAgICAg ICAgaWYgKHByb2MgPT0gTlVMTCkgewogICAgICAgICAgICBnb3RvIG5leHRf cHJvY2VzczsKICAgICAgICB9CgogICAgICAgIGlmIChYSXNQcm9jZXNzSW5K b2IgKHByb2MsIGpvYiwgJnByb2Nlc3NfaW5fam9iKSA9PSBGQUxTRSkgewog ICAgICAgICAgICBnb3RvIG5leHRfcHJvY2VzczsKICAgICAgICB9CgogICAg ICAgIGlmIChwcm9jZXNzX2luX2pvYiA9PSBGQUxTRSkgewogICAgICAgICAg ICBnb3RvIG5leHRfcHJvY2VzczsKICAgICAgICB9CgogICAgICAgIGZwcmlu dGYgKHN0ZGVyciwgIiAgJXVcbiIsICh1bnNpZ25lZClwcm9jZW50LnRoMzJQ cm9jZXNzSUQpOwogICAgICAgICsrcHJvY2luam9iOwoKICAgICAgbmV4dF9w cm9jZXNzOgoKICAgICAgICBpZiAocHJvYyAhPSBOVUxMKSB7CiAgICAgICAg ICAgIENsb3NlSGFuZGxlIChwcm9jKTsKICAgICAgICB9CgogICAgICAgIG1l bXNldCAoJnByb2NlbnQsIDAsIHNpemVvZiAocHJvY2VudCkpOwogICAgICAg IHByb2NlbnQuZHdTaXplID0gc2l6ZW9mIChwcm9jZW50KTsKICAgIH0gd2hp bGUgKFByb2Nlc3MzMk5leHQgKHNuYXAsICZwcm9jZW50KSk7CgogICAgaWYg KHNuYXAgIT0gTlVMTCkgewogICAgICAgIENsb3NlSGFuZGxlIChzbmFwKTsK ICAgIH0KCiAgICBmcHJpbnRmIChzdGRlcnIsICJFbmQgcHJvY2VzcyBsaXN0 OiBmb3VuZCAlZFxuIiwgcHJvY2luam9iKTsKfQoKCnN0YXRpYyB2b2lkCmR1 bW15X3NpZ2hhbmRsZXIgKGludCBkdW1teSkKe30KCnN0YXRpYyBpbnQKY2hp bGRfbWFpbiAoaW50IGFyZ2MsIGNoYXIqKiBhcmd2LCBpbnQqIGNoaWxkX3Bp cGUpCnsKICAgIGludCByZXQgPSAxOwogICAgc3NpemVfdCBycmV0OwogICAg Y2hhciBidWZbMV07CiAgICBpbnQgY2hpbGRfc3RhdHVzOwoKICAgIENISyAo Y2xvc2UgKGNoaWxkX3BpcGVbUElQRV9XUklURV0pKTsKCiAgICBkbyB7CiAg ICAgICAgcnJldCA9IHJlYWQgKGNoaWxkX3BpcGVbUElQRV9SRUFEXSwgJmJ1 ZiwgMSk7CiAgICB9IHdoaWxlIChycmV0ID09IC0xICYmIGVycm5vID09IEVJ TlRSKTsKCiAgICBpZiAocnJldCA9PSAwKSB7CiAgICAgICAgLyogUGFyZW50 IGRpZWQgYmVmb3JlIGl0IHJlYWRpZWQgdXMsIHNvIGRpZSBhbG9uZyB3aXRo IGl0LiAqLwogICAgICAgIGdvdG8gb3V0OwogICAgfQoKICAgIENISyAoY2xv c2UgKGNoaWxkX3BpcGVbUElQRV9SRUFEXSkpOwoKICAgIGRvIHsKICAgICAg ICByZXQgPSBleGVjdnAgKGFyZ3ZbMF0sIGFyZ3YpOwogICAgfSB3aGlsZSAo cmV0ID09IC0xICYmIGVycm5vID09IEVJTlRSKTsKCiAgICBmcHJpbnRmIChz dGRlcnIsIFBSR05BTUUgIjogY291bGQgbm90IHNwYXduIFwiJXNcIjogJXNc biIsCiAgICAgICAgICAgICBhcmd2WzBdLCBzdHJlcnJvciAoZXJybm8pKTsK ICAgIHJldCA9IDEyODsKCiAgICBvdXQ6CiAgICByZXR1cm4gcmV0Owp9Cgpz dGF0aWMgSEFORExFIGNvbXBsZXRpb25fcG9ydDsKc3RhdGljIHB0aHJlYWRf dCBtYWluX3RocmVhZDsKc3RhdGljIGludCB2ZXJib3NlX21vbiA9IDA7Cgov LyBDb3BpZWQgZnJvbSBNU0ROIGFuZCByZW5hbWVkIHRvIGF2b2lkIGNvbmZs aWN0IHdpdGggZnV0dXJlIEN5Z3dpbgovLyBfUEVCIGRlZmluaXRpb24uCnR5 cGVkZWYgc3RydWN0IF9YUEVCIHsKICBCWVRFICAgICAgICAgICAgICAgICAg ICAgICAgICBSZXNlcnZlZDFbMl07CiAgQllURSAgICAgICAgICAgICAgICAg ICAgICAgICAgQmVpbmdEZWJ1Z2dlZDsKICBCWVRFICAgICAgICAgICAgICAg ICAgICAgICAgICBSZXNlcnZlZDJbMV07CiAgUFZPSUQgICAgICAgICAgICAg ICAgICAgICAgICAgUmVzZXJ2ZWQzWzJdOwogIFBWT0lEICAgICAgICAgICAg ICAgICAgICAgICAgIExkcjsKICBQUlRMX1VTRVJfUFJPQ0VTU19QQVJBTUVU RVJTICBQcm9jZXNzUGFyYW1ldGVyczsKICBCWVRFICAgICAgICAgICAgICAg ICAgICAgICAgICBSZXNlcnZlZDRbMTA0XTsKICBQVk9JRCAgICAgICAgICAg ICAgICAgICAgICAgICBSZXNlcnZlZDVbNTJdOwogIFBWT0lEICAgICAgICAg ICAgICAgICAgICAgICAgIFBvc3RQcm9jZXNzSW5pdFJvdXRpbmU7CiAgQllU RSAgICAgICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQ2WzEyOF07CiAg UFZPSUQgICAgICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQ3WzFdOwog IFVMT05HICAgICAgICAgICAgICAgICAgICAgICAgIFNlc3Npb25JZDsKfSBY UEVCLCAqUFhQRUI7CgojZGVmaW5lIF9jb3VudG9mKGFycmF5KSAgICAgICAg ICAgICAgICAgICAgICAgICBcCiAgICAoIHNpemVvZiAoYXJyYXkpIC8gc2l6 ZW9mICgqYXJyYXkpICkKCnN0YXRpYyB3Y2hhcl90KgpnZXRfcHJvY2Vzc19j b21tYW5kX2xpbmUgKERXT1JEIHBpZCkKewogICAgSEFORExFIHByb2Nlc3Mg PSBOVUxMOwogICAgd2NoYXJfdCogY21kbGluZSA9IE5VTEw7CiAgICB3Y2hh cl90KiBjbWRsaW5lX3RtcCA9IE5VTEw7CiAgICBOVFNUQVRVUyBudDsKICAg IFBST0NFU1NfQkFTSUNfSU5GT1JNQVRJT04gYmFzaWNpbmZvOwogICAgWFBF QiBwZWI7CiAgICBTSVpFX1QgYnl0ZXNfY29waWVkOwogICAgUlRMX1VTRVJf UFJPQ0VTU19QQVJBTUVURVJTIHBwYXJhbXM7CiAgICB3Y2hhcl90IGJ1Zlsy NTZdOwoKICAgIHByb2Nlc3MgPSBPcGVuUHJvY2VzcyAoUFJPQ0VTU19BTExf QUNDRVNTLAogICAgICAgICAgICAgICAgICAgICAgICAgICBGQUxTRSwgcGlk KTsKCiAgICBpZiAoIXByb2Nlc3MpIHsKICAgICAgICBzd3ByaW50ZiAoYnVm LCBfY291bnRvZiAoYnVmKSwgTCJbW09wZW5Qcm9jZXNzIEZBSUxFRDogJXVd XSIsCiAgICAgICAgICAgICAgICAgICh1bnNpZ25lZCkgR2V0TGFzdEVycm9y ICgpKTsKICAgICAgICBjbWRsaW5lID0gd2NzZHVwIChidWYpOwogICAgICAg IGdvdG8gb3V0OwogICAgfQoKICAgIG50ID0gTnRRdWVyeUluZm9ybWF0aW9u UHJvY2VzcyAocHJvY2VzcywKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgUHJvY2Vzc0Jhc2ljSW5mb3JtYXRpb24sCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICZiYXNpY2luZm8sCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZiAoYmFzaWNpbmZv KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCk7 CiAgICBpZiAoIU5UX1NVQ0NFU1MgKG50KSkgewogICAgICAgIHN3cHJpbnRm IChidWYsIF9jb3VudG9mIChidWYpLAogICAgICAgICAgICAgICAgICBMIltb TnRRdWVyeUluZm9ybWF0aW9uUHJvY2VzcyBGQUlMRUQ6ICV1XV0iLAogICAg ICAgICAgICAgICAgICAodW5zaWduZWQpIG50KTsKICAgICAgICBjbWRsaW5l ID0gd2NzZHVwIChidWYpOwogICAgICAgIGdvdG8gb3V0OwogICAgfQoKICAg IGlmICghUmVhZFByb2Nlc3NNZW1vcnkgKAogICAgICAgICAgICBwcm9jZXNz LAogICAgICAgICAgICAmKCgoUFhQRUIpKGJhc2ljaW5mby5QZWJCYXNlQWRk cmVzcykpLT5Qcm9jZXNzUGFyYW1ldGVycyksCiAgICAgICAgICAgICZwZWIu UHJvY2Vzc1BhcmFtZXRlcnMsCiAgICAgICAgICAgIHNpemVvZiAocGViLlBy b2Nlc3NQYXJhbWV0ZXJzKSwKICAgICAgICAgICAgJmJ5dGVzX2NvcGllZCkp CiAgICB7CiAgICAgICAgc3dwcmludGYgKGJ1ZiwgX2NvdW50b2YgKGJ1Ziks CiAgICAgICAgICAgICAgICAgIEwiW1tSZWFkUHJvY2Vzc01lbW9yeVtwZWJd IEZBSUxFRDogJXVdXSIsCiAgICAgICAgICAgICAgICAgICh1bnNpZ25lZCkg R2V0TGFzdEVycm9yICgpKTsKICAgICAgICBjbWRsaW5lID0gd2NzZHVwIChi dWYpOwogICAgICAgIGdvdG8gb3V0OwogICAgfQoKICAgIGlmICghUmVhZFBy b2Nlc3NNZW1vcnkgKHByb2Nlc3MsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAmcGViLlByb2Nlc3NQYXJhbWV0ZXJzLT5Db21tYW5kTGluZSwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICZwcGFyYW1zLkNvbW1hbmRMaW5l LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mIChwcGFyYW1z LkNvbW1hbmRMaW5lKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICZi eXRlc19jb3BpZWQpKQogICAgewogICAgICAgIHN3cHJpbnRmIChidWYsIF9j b3VudG9mIChidWYpLAogICAgICAgICAgICAgICAgICBMIltbUmVhZFByb2Nl c3NNZW1vcnlbcHBhcmFtc10gRkFJTEVEOiAldV1dIiwKICAgICAgICAgICAg ICAgICAgKHVuc2lnbmVkKSBHZXRMYXN0RXJyb3IgKCkpOwogICAgICAgIGNt ZGxpbmUgPSB3Y3NkdXAgKGJ1Zik7CiAgICAgICAgZ290byBvdXQ7CiAgICB9 CgogICAgY21kbGluZV90bXAgPSBtYWxsb2MgKHBwYXJhbXMuQ29tbWFuZExp bmUuTGVuZ3RoICsgc2l6ZW9mICh3Y2hhcl90KSk7CiAgICBpZiAoIVJlYWRQ cm9jZXNzTWVtb3J5IChwcm9jZXNzLCBwcGFyYW1zLkNvbW1hbmRMaW5lLkJ1 ZmZlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtZGxpbmVfdG1w LCBwcGFyYW1zLkNvbW1hbmRMaW5lLkxlbmd0aCwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICZieXRlc19jb3BpZWQpKQogICAgewogICAgICAgIHN3 cHJpbnRmIChidWYsIF9jb3VudG9mIChidWYpLAogICAgICAgICAgICAgICAg ICBMIltbUmVhZFByb2Nlc3NNZW1vcnlbY21kbGluZV0gRkFJTEVEOiAldV1d IiwKICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkKSBHZXRMYXN0RXJyb3Ig KCkpOwogICAgICAgIGNtZGxpbmUgPSB3Y3NkdXAgKGJ1Zik7CiAgICAgICAg Z290byBvdXQ7CiAgICB9CgogICAgY21kbGluZSA9IGNtZGxpbmVfdG1wOwog ICAgY21kbGluZV90bXAgPSBOVUxMOwogICAgY21kbGluZVtwcGFyYW1zLkNv bW1hbmRMaW5lLkxlbmd0aCAvIHNpemVvZiAod2NoYXJfdCldID0gTCdcMCc7 CgogIG91dDoKCiAgICBpZiAocHJvY2VzcykgewogICAgICAgIENsb3NlSGFu ZGxlIChwcm9jZXNzKTsKICAgIH0KCiAgICBmcmVlIChjbWRsaW5lX3RtcCk7 CgogICAgcmV0dXJuIGNtZGxpbmU7Cn0KCi8qIFdhaXQgZm9yIG91ciBqb2Ig b2JqZWN0IHRvIGVtcHR5LiAqLwpzdGF0aWMgdm9pZCoKZG9fbW9uaXRvcl90 aHJlYWQgKHZvaWQqIGlnbm9yZWQpCnsKICAgIERXT1JEIG1zZzsKICAgIFVM T05HX1BUUiBrZXk7CiAgICBPVkVSTEFQUEVEKiBvdmVybGFwcGVkOwoKICBn ZXRfbmV4dF9tZXNzYWdlOgoKICAgIENIS19XMzJfQk9PTCAoCiAgICAgICAg R2V0UXVldWVkQ29tcGxldGlvblN0YXR1cyAoY29tcGxldGlvbl9wb3J0LAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZtc2csICZrZXks ICZvdmVybGFwcGVkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIElORklOSVRFKSk7CiAgICBzd2l0Y2gobXNnKSB7CiAgICAgICAgY2Fz ZSBKT0JfT0JKRUNUX01TR19BQ1RJVkVfUFJPQ0VTU19aRVJPOgogICAgICAg ICAgICBnb3RvIG91dDsKCiAgICAgICAgY2FzZSBKT0JfT0JKRUNUX01TR19O RVdfUFJPQ0VTUzogewogICAgICAgICAgICBpZiAodmVyYm9zZV9tb24pIHsK ICAgICAgICAgICAgICAgIERXT1JEIHBpZCA9IChEV09SRCkgb3ZlcmxhcHBl ZDsKICAgICAgICAgICAgICAgIHdjaGFyX3QqIGNtZGxpbmUgPSBnZXRfcHJv Y2Vzc19jb21tYW5kX2xpbmUgKHBpZCk7CiAgICAgICAgICAgICAgICBmcHJp bnRmIChzdGRlcnIsICJuZXcgcHJvY2VzczogJXU6ICVTXG4iLAogICAgICAg ICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkKSBwaWQsIGNtZGxpbmUpOwog ICAgICAgICAgICAgICAgZnJlZSAoY21kbGluZSk7CiAgICAgICAgICAgIH0K CiAgICAgICAgICAgIGdvdG8gZ2V0X25leHRfbWVzc2FnZTsKICAgICAgICB9 CgogICAgICAgIGNhc2UgSk9CX09CSkVDVF9NU0dfRVhJVF9QUk9DRVNTOgog ICAgICAgICAgICBpZiAodmVyYm9zZV9tb24pIHsKICAgICAgICAgICAgICAg IGZwcmludGYgKHN0ZGVyciwgInByb2Nlc3MgZXhpdGVkOiAldVxuIiwKICAg ICAgICAgICAgICAgICAgICAgICAgICh1bnNpZ25lZCkgb3ZlcmxhcHBlZCk7 CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGdvdG8gZ2V0X25leHRfbWVz c2FnZTsKCiAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgZ290byBnZXRf bmV4dF9tZXNzYWdlOwogICAgfQoKICAgIG91dDoKICAgIGlmICh2ZXJib3Nl X21vbikgewogICAgICAgIGZwcmludGYgKHN0ZGVyciwgImpvYiBlbXB0eVxu Iik7CiAgICB9CgogICAgcHRocmVhZF9raWxsIChtYWluX3RocmVhZCwgU0lH VVNSMik7CiAgICBzbGVlcCAoMTApOwogICAgYXNzZXJ0ICghInNob3VsZCBo YXZlIGV4aXRlZCBieSBub3ciKTsKICAgIGV4aXQgKDQpOwogICAgcmV0dXJu IE5VTEw7Cn0KCmludAptYWluIChpbnQgYXJnYywgY2hhcioqIGFyZ3YpCnsK ICAgIGludCBjOwogICAgaW50IHJldCA9IDE7CiAgICBIQU5ETEUgam9iOwog ICAgaW50IGNoaWxkX3N0YXR1czsKICAgIHNpZ3NldF90IHdhaXRtYXNrOwog ICAgc2lnc2V0X3Qgb3JpZ21hc2s7CiAgICBwaWRfdCBjaGlsZF9waWQ7CiAg ICBpbnQgY2hpbGRfcGlwZVsyXTsKICAgIGludCBzaWc7CiAgICBEV09SRCBj aGlsZF93MzJfcGlkOwogICAgSEFORExFIGNoaWxkX3Byb2NfaGFuZGxlOwog ICAgSEFORExFIGtlcm5lbDMyZGxsOwogICAgT1NWRVJTSU9OSU5GTyB2ZXJz aW9uX2luZm87CiAgICBwdGhyZWFkX3QgbW9uaXRvcl90aHJlYWQ7CiAgICBp bnQgZXhpdF9hZnRlcl9zaWdjaGxkID0gMTsKCiAgICBzdGF0aWMgY29uc3Qg c3RydWN0IG9wdGlvbgogICAgICAgIGxvbmdvcHRzW10gPQogICAgICAgIHsK ICAgICAgICAgICAgLyogTmFtZSAgICAgICAgICAgaGFzX2FyZyAgZmxhZyAg dmFsICovCiAgICAgICAgICAgIHsgImhlbHAiLCAgICAgICAgIDAsICAgICAg IDAsICAgICdoJyB9LAogICAgICAgICAgICB7ICJ2ZXJzaW9uIiwgICAgICAw LCAgICAgICAwLCAgICAnVicgfSwKICAgICAgICAgICAgeyAidmVyYm9zZSIs ICAgICAgMCwgICAgICAgMCwgICAgJ3YnIH0sCiAgICAgICAgICAgIHsgIndh aXQtYWxsIiwgICAgIDAsICAgICAgIDAsICAgICdhJyB9LAogICAgICAgICAg ICB7IDAgfQogICAgICAgIH07CgogICAgd2hpbGUgKChjID0gZ2V0b3B0X2xv bmcgKGFyZ2MsIGFyZ3YsICIrVmhsdmEiLCBsb25nb3B0cywgMCkpICE9IC0x KSB7CiAgICAgICAgc3dpdGNoIChjKSB7CiAgICAgICAgICAgIGNhc2UgJ2gn OgogICAgICAgICAgICAgICAgdXNhZ2UgKCk7CiAgICAgICAgICAgICAgICBy ZXQgID0gMDsKICAgICAgICAgICAgICAgIGdvdG8gb3V0OwogICAgICAgICAg ICBjYXNlICdWJzoKICAgICAgICAgICAgICAgIHZlcnNpbmZvICgpOwogICAg ICAgICAgICAgICAgcmV0ID0gMDsKICAgICAgICAgICAgICAgIGdvdG8gb3V0 OwogICAgICAgICAgICBjYXNlICd2JzoKICAgICAgICAgICAgICAgIHZlcmJv c2VfbW9uID0gMTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg ICBjYXNlICdhJzoKICAgICAgICAgICAgICAgIGV4aXRfYWZ0ZXJfc2lnY2hs ZCA9IDA7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgZGVm YXVsdDoKICAgICAgICAgICAgICAgIGZwcmludGYgKHN0ZGVyciwgUFJHTkFN RSAiOiB1c2UgLS1oZWxwIGZvciB1c2FnZVxuIik7CiAgICAgICAgICAgICAg ICBnb3RvIG91dDsKICAgICAgICB9CiAgICB9CgogICAgYXJnYyAtPSBvcHRp bmQ7CiAgICBhcmd2ICs9IG9wdGluZDsKCiAgICBpZiAoYXJnYyA9PSAwKSB7 CiAgICAgICAgZnByaW50ZiAoc3RkZXJyLCBQUkdOQU1FICI6IG1pc3Npbmcg UFJPR1JBTSBhcmd1bWVudFxuIik7CiAgICAgICAgZnByaW50ZiAoc3RkZXJy LCBQUkdOQU1FICI6IHVzZSAtLWhlbHAgZm9yIHVzYWdlXG4iKTsKICAgICAg ICBnb3RvIG91dDsKICAgIH0KCiAgICBrZXJuZWwzMmRsbCA9IENIS19XMzJf SEFORExFIChMb2FkTGlicmFyeSAoTCJrZXJuZWwzMi5kbGwiKSk7CiAgICBY SXNQcm9jZXNzSW5Kb2IgPSBHZXRQcm9jQWRkcmVzcyAoa2VybmVsMzJkbGws ICJJc1Byb2Nlc3NJbkpvYiIpOwogICAgaWYgKFhJc1Byb2Nlc3NJbkpvYiA9 PSBOVUxMKSB7CiAgICAgICAgZnByaW50ZiAoc3RkZXJyLCBQUkdOQU1FICI6 IGNvdWxkIG5vdCBmaW5kIElzUHJvY2Vzc0luSm9iOiBPUyB0b28gb2xkP1xu Iik7CiAgICAgICAgZ290byBvdXQ7CiAgICB9CgogICAgdmVyc2lvbl9pbmZv LmR3T1NWZXJzaW9uSW5mb1NpemUgPSBzaXplb2YgKHZlcnNpb25faW5mbyk7 CiAgICBDSEtfVzMyX0JPT0wgKEdldFZlcnNpb25FeCAoJnZlcnNpb25faW5m bykpOwoKICAgIC8qIFZpc3RhIG9yIGhpZ2hlciBsZXRzIHVzIHVzZSBtb3Jl IGxpbWl0ZWQgcGVybWlzc2lvbnMgb3BlbmluZwogICAgICogcHJvY2VzcyBv YmplY3RzLiAqLwogICAgaWYgKHZlcnNpb25faW5mby5kd01ham9yVmVyc2lv biA+PSA2KSB7CiAgICAgICAgb3Blbl9wcm9jZXNzX3NjYW5fZmxhZ3MgPSBQ Uk9DRVNTX1FVRVJZX0xJTUlURURfSU5GT1JNQVRJT047CiAgICB9CgogICAg Q0hLIChwaXBlIChjaGlsZF9waXBlKSk7CiAgICBmZmx1c2ggKE5VTEwpOwoK ICAgIC8qIFNpZ25hbHMgYmxvY2tlZCBiZWxvdywgZXhjZXB0IHdoaWxlIHdh aXRpbmcuICovCgogICAgQ0hLIChzaWdlbXB0eXNldCAoJndhaXRtYXNrKSk7 CiAgICBDSEsgKHNpZ2FkZHNldCAoJndhaXRtYXNrLCBTSUdDSExEKSk7CiAg ICBDSEsgKHNpZ2FkZHNldCAoJndhaXRtYXNrLCBTSUdIVVApKTsKICAgIENI SyAoc2lnYWRkc2V0ICgmd2FpdG1hc2ssIFNJR1VTUjIpKTsKICAgIENISyAo c2lnYWRkc2V0ICgmd2FpdG1hc2ssIFNJR1VTUjEpKTsKICAgIENISyAoc2ln YWRkc2V0ICgmd2FpdG1hc2ssIFNJR1RFUk0pKTsKICAgIENISyAoc2lnYWRk c2V0ICgmd2FpdG1hc2ssIFNJR0lOVCkpOwogICAgQ0hLIChzaWdhZGRzZXQg KCZ3YWl0bWFzaywgU0lHVFNUUCkpOwogICAgQ0hLIChzaWdwcm9jbWFzayAo U0lHX0JMT0NLLCAmd2FpdG1hc2ssICZvcmlnbWFzaykpOwoKICAgIHNpZ25h bCAoU0lHQ0hMRCwgZHVtbXlfc2lnaGFuZGxlcik7CiAgICBzaWduYWwgKFNJ R1RFUk0sIGR1bW15X3NpZ2hhbmRsZXIpOwogICAgc2lnbmFsIChTSUdJTlQs ICBkdW1teV9zaWdoYW5kbGVyKTsKICAgIHNpZ25hbCAoU0lHVFNUUCwgZHVt bXlfc2lnaGFuZGxlcik7CiAgICBzaWduYWwgKFNJR1VTUjIsIGR1bW15X3Np Z2hhbmRsZXIpOwogICAgc2lnbmFsIChTSUdVU1IxLCBkdW1teV9zaWdoYW5k bGVyKTsKCiAgICAvKiBDcmVhdGUgY2hpbGQuICBDaGlsZCB3aWxsIGp1c3Qg d2FpdCBmb3IgdXMgYXQgZmlyc3QuICovCgogICAgY2hpbGRfcGlkID0gQ0hL IChmb3JrICgpKTsKICAgIGlmIChjaGlsZF9waWQgPT0gMCkgewogICAgICAg IENISyAoc2lncHJvY21hc2sgKFNJR19TRVRNQVNLLCAmb3JpZ21hc2ssIE5V TEwpKTsKICAgICAgICByZXR1cm4gY2hpbGRfbWFpbiAoYXJnYywgYXJndiwg Y2hpbGRfcGlwZSk7CiAgICB9CgogICAgQ0hLIChjbG9zZSAoY2hpbGRfcGlw ZVtQSVBFX1JFQURdKSk7CgogICAgLyogQ2hpbGQgaXMgYWxpdmUgYW5kIGJs b2NrZWQuIFNldCB1cCBpdHMgam9iIG9iamVjdC4gKi8KCiAgICBjaGlsZF93 MzJfcGlkID0gKERXT1JEKWN5Z3dpbl9pbnRlcm5hbCAoCiAgICAgICAgQ1df Q1lHV0lOX1BJRF9UT19XSU5QSUQsIGNoaWxkX3BpZCk7CgogICAgaWYgKGNo aWxkX3czMl9waWQgPT0gMCkgewogICAgICAgIGZwcmludGYgKHN0ZGVyciwg UFJHTkFNRSAiOiBjb3VsZCBub3QgZ2V0IGNoaWxkIFczMiBQSURcbiIpOwog ICAgICAgIGdvdG8gb3V0OwogICAgfQoKICAgIGNoaWxkX3Byb2NfaGFuZGxl ID0gQ0hLX1czMl9IQU5ETEUgKAogICAgICAgIE9wZW5Qcm9jZXNzIChQUk9D RVNTX0FMTF9BQ0NFU1MsCiAgICAgICAgICAgICAgICAgICAgIEZBTFNFLAog ICAgICAgICAgICAgICAgICAgICBjaGlsZF93MzJfcGlkKSk7CgogICAgam9i ID0gQ0hLX1czMl9IQU5ETEUgKENyZWF0ZUpvYk9iamVjdCAoTlVMTCwgTlVM TCkpOwoKICAgIC8qIEFzc29jaWF0ZSBvdXIgbmV3IGpvYiBvYmplY3Qgd2l0 aCBhIGNvbXBsZXRpb24gcG9ydCBzbyB3ZSBnZXQgYQogICAgICogbWVzc2Fn ZSB3aGVuIGFsbCBwcm9jZXNzZXMgaW4gdGhlIGpvYiBleGl0LiAqLwogICAg Y29tcGxldGlvbl9wb3J0ID0gQ0hLX1czMl9IQU5ETEUgKAogICAgICAgIENy ZWF0ZUlvQ29tcGxldGlvblBvcnQgKElOVkFMSURfSEFORExFX1ZBTFVFLCBO VUxMLCAwLCAwKSk7CgogICAgewogICAgICAgIEpPQk9CSkVDVF9BU1NPQ0lB VEVfQ09NUExFVElPTl9QT1JUIGFzc29jID0geyAwLCBjb21wbGV0aW9uX3Bv cnQgfTsKICAgICAgICBDSEtfVzMyX0JPT0wgKFNldEluZm9ybWF0aW9uSm9i T2JqZWN0KAogICAgICAgICAgICAgICAgICAgICAgICAgIGpvYiwgSm9iT2Jq ZWN0QXNzb2NpYXRlQ29tcGxldGlvblBvcnRJbmZvcm1hdGlvbiwKICAgICAg ICAgICAgICAgICAgICAgICAgICAmYXNzb2MsIHNpemVvZiAoYXNzb2MpKSk7 CiAgICB9CgogICAgLyogQWN0dWFsbHkgYWRkIHRoZSBjaGlsZCB0byB0aGUg am9iIG9iamVjdC4gKi8KICAgIENIS19XMzJfQk9PTCAoQXNzaWduUHJvY2Vz c1RvSm9iT2JqZWN0IChqb2IsIGNoaWxkX3Byb2NfaGFuZGxlKSk7CiAgICBD SEtfVzMyX0JPT0wgKENsb3NlSGFuZGxlIChjaGlsZF9wcm9jX2hhbmRsZSkp OwoKICAgIC8qIFNlbmQgb3Vyc2VsdmVzIGEgU0lHVVNSMiB3aGVuIHRoZSBq b2IgYmVjb21lcyBlbXB0eS4gIE9ubHkKICAgICAqIG5lY2Vzc2FyeSBpZiB3 ZSB3YW50IHRvIHN0aWNrIGFyb3VuZCBhZnRlciBTSUdDSExELiAqLwogICAg aWYgKCFleGl0X2FmdGVyX3NpZ2NobGQpICB7CiAgICAgICAgbWFpbl90aHJl YWQgPSBwdGhyZWFkX3NlbGYgKCk7CiAgICAgICAgQ0hLIChwdGhyZWFkX2Ny ZWF0ZSAoJm1vbml0b3JfdGhyZWFkLCBOVUxMLCBkb19tb25pdG9yX3RocmVh ZCwgTlVMTCkpOwogICAgfQoKICAgIC8qIENoaWxkIGlzIG5vdyBpbiB0aGUg am9iIG9iamVjdC4gU2VuZCB0aGUgYWxsLWNsZWFyIHNpZ25hbCwKICAgICAq IGNhdXNpbmcgdGhlIGNoaWxkIHRvIGV4ZWMgdGhlIHByb2dyYW0gd2UgYWN0 dWFsbHkgd2FudCB0bwogICAgICogcnVuLiAqLwogICAgQ0hLICh3cml0ZSAo Y2hpbGRfcGlwZVtQSVBFX1dSSVRFXSwgJnJldCAvKiBhcmJpdGFyeSBieXRl ICovLCAxKSk7CiAgICBDSEsgKGNsb3NlIChjaGlsZF9waXBlW1BJUEVfV1JJ VEVdKSk7CgogICAgLyogQmVnaW4gcHJvY2Vzc2luZyBzaWduYWxzIGFzIHRo ZXkgY29tZSBpbi4gKi8KCiAgICBnZXRfYW5vdGhlcl9zaWduYWw6CgogICAg c3dpdGNoICgoc2lnID0gc2lnd2FpdGluZm8gKCZ3YWl0bWFzaywgTlVMTCkp KSB7CiAgICAgICAgY2FzZSBTSUdDSExEOgogICAgICAgICAgICBpZiAodmVy Ym9zZV9tb24pIHsKICAgICAgICAgICAgICAgIGZwcmludGYgKHN0ZGVyciwg IlNJR0NITERcbiIpOwogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAo ZXhpdF9hZnRlcl9zaWdjaGxkKSB7CiAgICAgICAgICAgICAgICBUZXJtaW5h dGVKb2JPYmplY3QgKGpvYiwgMCk7CiAgICAgICAgICAgICAgICBnb3RvIGRv bmU7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGdvdG8gZ2V0X2Fub3Ro ZXJfc2lnbmFsOwogICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgIGZwcmlu dGYgKHN0ZGVyciwgUFJHTkFNRSAiOiB1bmV4cGVjdGVkIHNpZ25hbCAlZDog JXNcbiIsCiAgICAgICAgICAgICAgICAgICAgIHNpZywgc3RyZXJyb3IgKGVy cm5vKSk7CiAgICAgICAgICAgIC8qIEZhbGwgdGhyb3VnaCAqLwogICAgICAg IGNhc2UgU0lHSFVQOgogICAgICAgIGNhc2UgU0lHVEVSTToKICAgICAgICBj YXNlIFNJR0lOVDoKICAgICAgICAgICAgLyogV2Ugd2VyZSBhc2tlZCB0byBx dWl0LiAgS2lsbCBldmVyeXRoaW5nIGluIHRoZSBqb2IuICovCiAgICAgICAg ICAgIENIS19XMzJfQk9PTCAoVGVybWluYXRlSm9iT2JqZWN0IChqb2IsIDEy OCArIHNpZykpOwogICAgICAgICAgICBjaGlsZF9waWQgPSAwOyAvKiBEb24n dCB1c2Ugd2FpdHBpZDsganVzdCByZXR1cm4gdGhlCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHNpZ25hbCArIDEyOCwgbGlrZSBhIHNoZWxsLiAq LwogICAgICAgICAgICBnb3RvIGRvbmU7CiAgICAgICAgY2FzZSBTSUdVU1Iy OgogICAgICAgICAgICBnb3RvIGRvbmU7CiAgICAgICAgY2FzZSBTSUdVU1Ix OgogICAgICAgICAgICBwcmludF9hbGxfaW5fam9iIChqb2IpOwogICAgICAg ICAgICBnb3RvIGdldF9hbm90aGVyX3NpZ25hbDsKICAgICAgICBjYXNlIFNJ R1RTVFA6CiAgICAgICAgICAgIHN1c3BlbmRfYWxsX2luX2pvYiAoam9iKTsK ICAgICAgICAgICAgcmFpc2UgKFNJR1NUT1ApOyAvKiBCbG9jayB1bnRpbCBz b21lYm9keSByZXN1bWVzIHVzLiAqLwogICAgICAgICAgICByZXN1bWVfYWxs ICgpOwogICAgICAgICAgICBnb3RvIGdldF9hbm90aGVyX3NpZ25hbDsKICAg IH0KCiAgICBkb25lOgoKICAgIGlmIChjaGlsZF9waWQgPiAwKSB7CiAgICAg ICAgQ0hLICh3YWl0ICgmY2hpbGRfc3RhdHVzKSk7CgogICAgICAgIHJldCA9 ICggV0lGRVhJVEVEIChjaGlsZF9zdGF0dXMpCiAgICAgICAgICAgICAgICA/ IFdFWElUU1RBVFVTIChjaGlsZF9zdGF0dXMpCiAgICAgICAgICAgICAgICA6 IDEyOCArIFdURVJNU0lHIChjaGlsZF9zdGF0dXMpICk7CiAgICB9IGVsc2Ug ewogICAgICAgIHJldCA9IDEyOCArIHNpZzsKICAgIH0KCiAgICBvdXQ6CiAg ICByZXR1cm4gcmV0Owp9Cg== --------------090306080502090103040904-- --------------enig77974F43BAEA62474A7EAD45 Content-Type: application/pgp-signature; name="signature.asc" Content-Description: OpenPGP digital signature Content-Disposition: attachment; filename="signature.asc" -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.11 (Darwin) Comment: GPGTools - http://gpgtools.org iEYEARECAAYFAk7cImUACgkQ17c2LVA10Vu3eQCbBJNFtKJuBerOfjVsPuj38ESK dEwAn1+cNiQBZqRhkP1JF0K3GVIcHio1 =L2yN -----END PGP SIGNATURE----- --------------enig77974F43BAEA62474A7EAD45--
webmaster | delorie software privacy |
Copyright © 2019 by DJ Delorie | Updated Jul 2019 |