From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from pool-151-203-245-3.bos.east.verizon.net ([151.203.245.3]:8196 "EHLO ccure.user-mode-linux.org") by vger.kernel.org with ESMTP id S261346AbUKNUAi (ORCPT ); Sun, 14 Nov 2004 15:00:38 -0500 Message-Id: <200411142213.iAEMDHbV013050@ccure.user-mode-linux.org> Subject: Re: [PATCH 9/11] - UML - fix signal mask on delivery error In-Reply-To: Your message of "Fri, 12 Nov 2004 16:34:42 PST." <20041112163442.45fc966f.akpm@osdl.org> References: <200411130201.iAD210pT005889@ccure.user-mode-linux.org> <20041112163442.45fc966f.akpm@osdl.org> Mime-Version: 1.0 Content-Type: multipart/mixed ; boundary="==_Exmh_6290712620" Date: Sun, 14 Nov 2004 17:13:17 -0500 From: Jeff Dike To: Andrew Morton Cc: blaisorblade_spam@yahoo.it, bstroesser@fujitsu-siemens.com, linux-arch@vger.kernel.org, jdike@ccure.user-mode-linux.org List-ID: This is a multipart MIME message. --==_Exmh_6290712620 Content-Type: text/plain; charset=us-ascii akpm@osdl.org said: > Could you send one of the test apps? This is something which the arch > maintainers might want to look into fixing, thanks. Attached... Included are breakout.c - UML-specific breakouts, fixed in 2.6 and 2.4 now, but please don't popularize these :-) step_sighdlr.c - PTRACE_SINGLESTEPs into a signal handler, if I'm reading the code right, fails on i386 interrupted_syscall.c - counts signals and system calls during interrupted system calls, under ptrace and not. Fails on x86 under ptrace. kernel_restorer.c - I can't get this to compile because it's too intimate with the libc headers, expecting to get a k_sigaction from them. sigmasking.c - Makes sure that when a signal is (not) delivered to a bogus stack, that a segfault is delivered then, and not after returning to userspace. This is the test relevant to the patch that Andrew replied to. Jeff --==_Exmh_6290712620 Content-Type: application/x-tar ; name="testtools-bodo-2004-10-29.tar" Content-Description: testtools-bodo-2004-10-29.tar Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="testtools-bodo-2004-10-29.tar" Ym9kby10ZXN0cy8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAwNDA3NjYA MDAwMDc2NAAwMDAwNzY0ADAwMDAwMDAwMDAwADEwMTQ1NzMyMzQ2ADAxMjEyMgAgNQAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB1c3RhciAgAGpkaWtl AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAamRpa2UAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABib2RvLXRlc3RzL2JyZWFrb3V0LmMAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAMDEwMDYwMAAwMDAwNzY0ADAwMDA3NjQAMDAwMDAwMTQyMDcA MTAxMzc3MjcwMDAAMDE0MDYxACAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAHVzdGFyICAAamRpa2UAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABq ZGlrZQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC8q CiAqICBicmVha291dC5jCiAqCiAqICBUZXN0dG9vbCBmb3IgVU1MCiAqICBUaGlzIHRvb2wg dHJpZXMgdG8gYnJlYWtvdXQgZnJvbSBVTUwgb3IgdG8gY3Jhc2ggVU1MCiAqICBIb3BlZnVs bHkgaXQgaGFzIG5vIHN1Y2Nlc3MhCiAqCiAqICBDb3B5cmlnaHQgKEMpIDIwMDQgRnVqaXRz dSBTaWVtZW5zIENvbXB1dGVycyBHbWJICiAqICBBdXRob3I6IEJvZG8gU3Ryb2Vzc2VyIChi b2RvLnN0cm9lc3NlckBmdWppdHN1LXNpZW1lbnMuY29tKQogKgogKiAgTGljZW5zZWQgdW5k ZXIgdGhlIEdQTAogKi8KCiNkZWZpbmUgVkVSU0lPTl9TVFJJTkcgImJyZWFrb3V0ICBWMS4w IgojaW5jbHVkZSA8c3RkaW8uaD4KI2luY2x1ZGUgPHNpZ25hbC5oPgojaW5jbHVkZSA8c2No ZWQuaD4KI2luY2x1ZGUgPHN5cy90eXBlcy5oPgojaW5jbHVkZSA8c3lzL3dhaXQuaD4KI2lu Y2x1ZGUgPHN5cy9tbWFuLmg+CiNpbmNsdWRlIDxzeXMvcHRyYWNlLmg+CiNpbmNsdWRlIDxh c20vcHRyYWNlLmg+CiNpbmNsdWRlIDx1bmlzdGQuaD4KI2luY2x1ZGUgPGFzbS91bmlzdGQu aD4KI2luY2x1ZGUgPGVycm5vLmg+Cgp2b2xhdGlsZSBpbnQgKiBzdGVwbWU7CgoKaW50CnBh cmVudF9mbiggcGlkX3QgY2hpbGQpCnsKCWludCByZXQsIHN0YXR1czsKCXVuc2lnbmVkIGxv bmcgY29kZSwgZWlwOwoJc3RhdGljIGludCBjb3VudCA9IDA7CgoJcHJpbnRmKCJQYXJlbnQ6 IGNoaWxkcyBQSUQgaXMgJWRcbiIsIGNoaWxkKTsKCgl3aGlsZSAoMSkgewoJCXJldCA9IHdh aXRwaWQoIGNoaWxkLCAmc3RhdHVzLCAwKTsKCQlpZiAoIHJldCAhPSBjaGlsZCApIHsKCQkJ ZnByaW50Ziggc3RkZXJyLCAiUGFyZW50OiAiKTsKCQkJcGVycm9yKCJ3YWl0cGlkIik7CgkJ CWV4aXQoMSk7CgkJfQoJCWlmICggV0lGU1RPUFBFRChzdGF0dXMpICYmIFdTVE9QU0lHKHN0 YXR1cykgPT0gU0lHVFJBUCApIHsKCQkJZXJybm8gPSAwOwoJCQllaXAgPSBwdHJhY2UoIFBU UkFDRV9QRUVLVVNFUiwgY2hpbGQsICh2b2lkICopKEVJUCo0KSwgKHZvaWQgKikwKTsKCQkJ aWYgKCBlcnJubyApIHsKCQkJCWZwcmludGYoIHN0ZGVyciwgIlBhcmVudDogIik7CgkJCQlw ZXJyb3IoInB0cmFjZSggUFRSQUNFX1BFRUtVU0VSLCBjaGlsZCwgRUlQLCAwKSIpOwoJCQkJ ZXhpdCgxKTsKCQkJfQoJCQlwcmludGYoIlBhcmVudDogZWlwID0gMHglMDh4LCAiLCBlaXAp OwoJCQljb2RlID0gcHRyYWNlKCBQVFJBQ0VfUEVFS1RFWFQsIGNoaWxkLCBlaXAsICh2b2lk ICopMCk7CgkJCWlmICggZXJybm8gKQoJCQkJcHJpbnRmKCJwdHJhY2UoIFBUUkFDRV9QRUVL VEVYVCwgY2hpbGQsIGVpcCwgMCk6ICVzIiwgc3RyZXJyb3IoIGVycm5vKSk7CgkJCXByaW50 ZigiY29kZSA9ICUwMnggJTAyeCAlMDJ4ICUwMngsICIsCgkJCQljb2RlJjB4ZmYsIChjb2Rl Pj44KSYweGZmLCAoY29kZT4+MTYpJjB4ZmYsIChjb2RlPj4yNCkmMHhmZik7CgkJCWlmICgg KGNvZGUgJiAweGZmZmYpID09IDB4ODBjZCB8fCAoY29kZSAmIDB4ZmZmZikgPT0gMHgzNDBm ICkKCQkJCXByaW50ZigiU1lTQ0FMTCEsICIpOwoJCQllbHNlCgkJCQlwcmludGYoIiAgICAg ICAgICAiKTsKCQkJaWYgKCAqc3RlcG1lID09IDIgKSB7CgkJCQlpZiAoICsrY291bnQgPT0g MyApIHsKCQkJCQllcnJubyA9IDA7CgkJCQkJcHRyYWNlKCBQVFJBQ0VfUE9LRVVTRVIsIGNo aWxkLCAodm9pZCAqKShFSVAqNCksICh2b2lkICopKGVpcC0yKSk7CgkJCQkJaWYgKCBlcnJu byApIHsKCQkJCQkJZnByaW50Ziggc3RkZXJyLCAiUGFyZW50OiAiKTsKCQkJCQkJcGVycm9y KCJwdHJhY2UoIFBUUkFDRV9QT0tFVVNFUiwgY2hpbGQsIEVJUCwgZWlwLTIpIik7CgkJCQkJ CWV4aXQoMSk7CgkJCQkJfQoJCQkJCXB0cmFjZSggUFRSQUNFX1BPS0VVU0VSLCBjaGlsZCwg KHZvaWQgKikoRUFYKjQpLCAodm9pZCAqKV9fTlJfZ2V0cGlkKTsKCQkJCQlpZiAoIGVycm5v ICkgewoJCQkJCQlmcHJpbnRmKCBzdGRlcnIsICJQYXJlbnQ6ICIpOwoJCQkJCQlwZXJyb3Io InB0cmFjZSggUFRSQUNFX1BPS0VVU0VSLCBjaGlsZCwgRUFYLCBfX05SX2dldHBpZCkiKTsK CQkJCQkJZXhpdCgxKTsKCQkJCQl9CgkJCQkJKnN0ZXBtZSA9IDE7CgkJCQl9CgkJCQllbHNl IHsKCQkJCQlwcmludGYoIkRvaW5nIFNZU0NBTExfVFJBQ0UgLi4uXG4iKTsKCQkJCQlmZmx1 c2goIHN0ZG91dCk7CgkJCQkJaWYgKCBwdHJhY2UoIFBUUkFDRV9TWVNDQUxMLCBjaGlsZCwg KHZvaWQgKikwLCAodm9pZCAqKTApIDwgMCApIHsKCQkJCQkJZnByaW50Ziggc3RkZXJyLCAi UGFyZW50OiAiKTsKCQkJCQkJcGVycm9yKCJwdHJhY2UoIFBUUkFDRV9TWVNDQUxMLCBjaGls ZCwgMCwgMCkiKTsKCQkJCQkJZXhpdCgxKTsKCQkJCQl9CgkJCQl9CgkJCX0KCQkJaWYgKCAq c3RlcG1lID09IDEgKSB7CgkJCQlwcmludGYoIkRvaW5nIFNJTkdMRVNURVAgLi4uXG4iKTsK CQkJCWZmbHVzaCggc3Rkb3V0KTsKCQkJCWlmICggcHRyYWNlKCBQVFJBQ0VfU0lOR0xFU1RF UCwgY2hpbGQsICh2b2lkICopMCwgKHZvaWQgKikwKSA8IDAgKSB7CgkJCQkJZnByaW50Zigg c3RkZXJyLCAiUGFyZW50OiAiKTsKCQkJCQlwZXJyb3IoInB0cmFjZSggUFRSQUNFX1NJTkdM RVNURVAsIGNoaWxkLCAwLCAwKSIpOwoJCQkJCWV4aXQoMSk7CgkJCQl9CgkJCX0KCQkJZWxz ZSBpZiAoICpzdGVwbWUgPT0gMCApIHsKCQkJCXByaW50ZigiRG9pbmcgQ09OVElOVUUgLi4u XG4iKTsKCQkJCWZmbHVzaCggc3Rkb3V0KTsKCQkJCWlmICggcHRyYWNlKCBQVFJBQ0VfQ09O VCwgY2hpbGQsICh2b2lkICopMCwgKHZvaWQgKikwKSA8IDAgKSB7CgkJCQkJZnByaW50Zigg c3RkZXJyLCAiUGFyZW50OiAiKTsKCQkJCQlwZXJyb3IoInB0cmFjZSggUFRSQUNFX0NPTlQs IGNoaWxkLCAwLCAwKSIpOwoJCQkJCWV4aXQoMSk7CgkJCQl9CgkJCQljb3VudCA9IDA7CgkJ CX0KCQl9CgkJZWxzZSB7CgkJCXByaW50ZigiXG5QYXJlbnQ6IENoaWxkcyBzdGF0dXMgaXMg JXg6IGV4aXRpbmdcbiIsIHN0YXR1cyk7CgkJCXJldHVybiAoc3RhdHVzICE9IDApOwoJCX0K CX0KfQoKCmludCBnZXRwaWRfc3lzZW50ZXIodm9pZCkKewoJbG9uZyByZXM7CglfX2FzbV9f IHZvbGF0aWxlICgiCWNhbGwgMWZcblx0IgoJCQkiCWptcCAgMmZcblx0IgoJCQkiMToJcHVz aCAlJWVjeFxuXHQiCgkJCSIJcHVzaCAlJWVkeFxuXHQiCgkJCSIJcHVzaCAlJWVicFxuXHQi CgkJCSIJbW92bCAlJWVzcCwlJWVicFxuXHQiCgkJCSIJc3lzZW50ZXJcblx0IgoJCQkvKiBO b3RlOiB0aGUgZm9sbG93aW5nIGNvZGUgaXMgZm9yIGluZm9ybWF0aW9uIG9ubHkhCgkJCSAq IEl0IGlzIG5ldmVyIGV4ZWN1dGVkLCBzaW5jZSB0aGUga2VybmVsIGp1bXBzIHRvIHRoZQoJ CQkgKiB2c3lzY2FsbC1wYWdlIG9uIHJldHVybi4gVGhpcyBpcyBoYXJkLWNvZGVkLCBiZWNh dXNlCgkJCSAqIHN5c2VudGVyIGRvc24ndCBzYXZlIGEgcmV0dXJuIGFkZHJlc3MuCgkJCSAq LwoJCQkiICAgICAgIHBvcCAgJSVlYnBcblx0IgoJCQkiICAgICAgIHBvcCAgJSVlZHhcblx0 IgoJCQkiICAgICAgIHBvcCAgJSVlY3hcblx0IgoJCQkiCXJldFxuXHQiCgkJCSIyOgkiCgkJ CQk6ICI9YSIgKHJlcykKCQkJCTogIjAiIChfX05SX2dldHBpZCkpOwoJcmV0dXJuIHJlczsK fQoKaW50IGdldHBpZF9pbnQweDgwKHZvaWQpCnsKCWxvbmcgcmVzOwoJX19hc21fXyB2b2xh dGlsZSAoIglpbnQgJDB4ODBcblx0IgoJCQkJOiAiPWEiIChyZXMpCgkJCQk6ICIwIiAoX19O Ul9nZXRwaWQpKTsKfQoKaW50IGdldHBpZF92c3lzY2FsbCh2b2lkKQp7Cglsb25nIHJlczsK CV9fYXNtX18gdm9sYXRpbGUgKCIJY2FsbCAweGZmZmZlNDAwXG5cdCIKCQkJCTogIj1hIiAo cmVzKQoJCQkJOiAiMCIgKF9fTlJfZ2V0cGlkKSk7CglyZXR1cm4gcmVzOwp9CgoKaW50CmNo aWxkX2ZuKCB2b2lkKQp7CglwaWRfdCBwaWQsIG15cGlkID0gZ2V0cGlkKCk7CgoJcHJpbnRm KCIgICAgICAgIENoaWxkOiB1bnRyYWNlZDogbXkgUElEIGlzICVkXG4iLCBteXBpZCk7Cglm Zmx1c2goIHN0ZG91dCk7CgoJaWYgKCBwdHJhY2UoIFBUUkFDRV9UUkFDRU1FLCAwLCAodm9p ZCAqKTAsICh2b2lkICopMCkgKSB7CgkJZnByaW50Ziggc3RkZXJyLCAiICAgICAgICBDaGls ZDogIik7CgkJcGVycm9yKCJwdHJhY2UoIFBUUkFDRV9UUkFDRU1FLCAwLCAwLCAwKSIpOwoJ CWV4aXQoMSk7Cgl9CglraWxsKCBteXBpZCwgU0lHVFJBUCk7CgoJcHJpbnRmKCJcbj09PT09 PT09PT0gVGVzdCBDYXNlIDE6IHNpbmdsZXN0ZXAgc3ljYWxsIHZpYSBzeXNlbnRlciA9PT09 PT09PT09XG5cbiIpOwoJZmZsdXNoKCBzdGRvdXQpOwoKCSpzdGVwbWUgPSAxOwoJa2lsbCgg bXlwaWQsIFNJR1RSQVApOwoJcGlkID0gZ2V0cGlkX3N5c2VudGVyKCk7Cgkqc3RlcG1lID0g MDsKCXByaW50ZigiICAgICAgICBDaGlsZDogdHJhY2VkOiBteSBQSUQgaXMgJWRcbiIsIHBp ZCk7CglmZmx1c2goIHN0ZG91dCk7CglpZiAoIHBpZCAhPSBteXBpZCApCgkJcmV0dXJuIDE7 CgoJcHJpbnRmKCJcbj09PT09PT09PT0gVGVzdCBDYXNlIDI6IHNpbmdsZXN0ZXAgc3ljYWxs IHZpYSBpbnQgJDB4ODAgPT09PT09PT09PVxuXG4iKTsKCWZmbHVzaCggc3Rkb3V0KTsKCgkq c3RlcG1lID0gMTsKCWtpbGwoIG15cGlkLCBTSUdUUkFQKTsKCXBpZCA9IGdldHBpZF9pbnQw eDgwKCk7Cgkqc3RlcG1lID0gMDsKCXByaW50ZigiICAgICAgICBDaGlsZDogdHJhY2VkOiBt eSBQSUQgaXMgJWRcbiIsIHBpZCk7CglmZmx1c2goIHN0ZG91dCk7CglpZiAoIHBpZCAhPSBt eXBpZCApCgkJcmV0dXJuIDE7CgoJcHJpbnRmKCJcbj09PT09PT09PT0gVGVzdCBDYXNlIDM6 IHNpbmdsZXN0ZXAgc3ljYWxsIHZpYSB2c3lzY2FsbC1wYWdlID09PT09PT09PT1cblxuIik7 CglmZmx1c2goIHN0ZG91dCk7CgoJKnN0ZXBtZSA9IDE7CglraWxsKCBteXBpZCwgU0lHVFJB UCk7CglwaWQgPSBnZXRwaWRfdnN5c2NhbGwoKTsKCSpzdGVwbWUgPSAwOwoJcHJpbnRmKCIg ICAgICAgIENoaWxkOiB0cmFjZWQ6IG15IFBJRCBpcyAlZFxuIiwgcGlkKTsKCWZmbHVzaCgg c3Rkb3V0KTsKCWlmICggcGlkICE9IG15cGlkICkKCQlyZXR1cm4gMTsKCglwcmludGYoIlxu PT09PT09PT09PSBUZXN0IENhc2UgNDogdHJhY2Ugc3ljYWxsIHZpYSBpbnQgJDB4ODAgKHR3 aWNlKSA9PT09PT09PT09XG5cbiIpOwoJZmZsdXNoKCBzdGRvdXQpOwoKCSpzdGVwbWUgPSAy OwoJa2lsbCggbXlwaWQsIFNJR1RSQVApOwoJcGlkID0gZ2V0cGlkX2ludDB4ODAoKTsKCSpz dGVwbWUgPSAwOwoJcHJpbnRmKCIgICAgICAgIENoaWxkOiB0cmFjZWQ6IG15IFBJRCBpcyAl ZFxuIiwgcGlkKTsKCWZmbHVzaCggc3Rkb3V0KTsKCWlmICggcGlkICE9IG15cGlkICkKCQly ZXR1cm4gMTsKCglyZXR1cm4gMDsKfQoKCmludAptYWluKCB2b2lkKQp7CglpbnQgcmVzOwoJ cGlkX3QgY2hpbGQ7CgoJcHJpbnRmKFZFUlNJT05fU1RSSU5HICJcbiIpOwoKCXN0ZXBtZSA9 IG1tYXAoIE5VTEwsIDQwOTYsIFBST1RfV1JJVEV8UFJPVF9SRUFELCBNQVBfU0hBUkVEfE1B UF9BTk9OWU1PVVMsIDAsIDApOwoJaWYgKCBzdGVwbWUgPT0gTUFQX0ZBSUxFRCApIHsKCQlw ZXJyb3IoIm1tYXAiKTsKCQlleGl0KDEpOwoJfQoKCXByaW50ZigiUGFyZW50OiBteSBQSUQg aXMgJWRcbiIsIGdldHBpZCgpKTsKCWZmbHVzaCggc3Rkb3V0KTsKCgljaGlsZCA9IGZvcmso KTsKCglpZiAoIGNoaWxkIDwgMCApIHsKCQlwZXJyb3IoImZvcmsiKTsKCQlleGl0KDEpOwoJ fQoJZWxzZSBpZiAoIGNoaWxkICkgewoJCXJlcyA9IHBhcmVudF9mbiggY2hpbGQpOwoJCWlm ICggcmVzICkKCQkJcmV0dXJuIHJlczsKCgkJcHJpbnRmKCJcbj09PT09PT09PT0gVGVzdCBD YXNlIDU6IHN5c2NhbGwoLTEpID09PT09PT09PT1cblxuIik7CgkJX19hc21fXyB2b2xhdGls ZSAoIglpbnQgJDB4ODBcblx0IgoJCQkJCTogIj1hIiAocmVzKQoJCQkJCTogIjAiICgtMSkp OwoJCXByaW50ZigiU3lzY2FsbCggLTEpIHJldHVybnMgJWRcbiIsIHJlcyk7CgkJaWYgKCBy ZXMgIT0gLUVOT1NZUyApIHsKCQkJcHJpbnRmKCJTeXNjYWxsKCAtMSk6IHdyb25nIHJlc3Vs dCEhISEhXG4iKTsKCQkJcmV0dXJuIDE7CgkJfQoKCQlwcmludGYoIlxuPT09PT09PT09PSBU ZXN0IGVuZGVkIG5vcm1hbGx5ID09PT09PT09PT1cbiIpOwoKCQlyZXR1cm4gMDsKCX0gZWxz ZSB7CgkJcmVzID0gY2hpbGRfZm4oKTsKCQlpZiAoIHJlcyApCgkJCXByaW50ZigiICAgICAg ICBDaGlsZDogcGlkICE9IHRyYWNlZCBwaWQgLS0+IEJSRUFLT1VUISEhXG4iKTsKCQlyZXR1 cm4gcmVzOwoJfQp9CgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAYm9kby10ZXN0cy9zdGVwX3NpZ2hkbHIuYwAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAADAxMDA2MDAAMDAwMDc2NAAwMDAwNzY0ADAwMDAwMDE0NjQ1ADEwMTM3NzI3MDE2ADAx NDc1MQAgMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB1 c3RhciAgAGpkaWtlAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAamRpa2UAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAjaW5jbHVkZSA8c2lnbmFs Lmg+CiNpbmNsdWRlIDx1bmlzdGQuaD4KI2luY2x1ZGUgPGVycm5vLmg+CiNpbmNsdWRlIDxz dGRpby5oPgojaW5jbHVkZSA8c2NoZWQuaD4KI2luY2x1ZGUgPHN5cy90eXBlcy5oPgojaW5j bHVkZSA8c3lzL3dhaXQuaD4KI2luY2x1ZGUgPHN5cy9tbWFuLmg+CiNpbmNsdWRlIDxzeXMv cHRyYWNlLmg+CiNpbmNsdWRlIDxhc20vcHRyYWNlLmg+CiNpbmNsdWRlIDxhc20vdW5pc3Rk Lmg+Cgp2b2xhdGlsZSBpbnQgKiBzdGVwbWU7CgoKdm9pZCBzaWdoZGxyKCBpbnQgc2lnKQp7 Cgkqc3RlcG1lID0gMjsKCXByaW50Zigic2lnaGRscigpOiBzaWduYWwgJWQgY2F1Z2h0XG4i LCBzaWcpOwoJZmZsdXNoKCBzdGRvdXQpOwoJKnN0ZXBtZSA9IDQ7Cn0KCmludApjaGlsZF9m biggdm9pZCkKewoJaW50IG15cGlkID0gZ2V0cGlkKCk7CglpbnQgcmV0LCBlcnJub19zYXY7 CglpbnQgcmVzdWx0ID0gMDsKCXNpZ3NldF90IHNldF9iLCBzZXRfdWI7CgoKCXByaW50Zigi QWRkcmVzcyBvZiBzaWdoZGxyKCk6ICVwXG4iLCBzaWdoZGxyKTsKCglyZXQgPSBzaWdwcm9j bWFzayggU0lHX0JMT0NLLCBOVUxMLCAmc2V0X2IpOwoJaWYgKCByZXQgKSB7CgkJcGVycm9y KCJzaWdwcm9jbWFzayggU0lHX0JMT0NLLCBOVUxMLCAmc2V0X2IpIik7CgkJZXhpdCgxKTsK CX0KCW1lbWNweSggJnNldF91YiwgJnNldF9iLCBzaXplb2YoIHNpZ3NldF90KSk7CglzaWdh ZGRzZXQoICZzZXRfYiwgU0lHQUxSTSk7CglzaWdkZWxzZXQoICZzZXRfdWIsIFNJR0FMUk0p OwoKCSpzdGVwbWUgPSAwOwoJaWYgKCBwdHJhY2UoIFBUUkFDRV9UUkFDRU1FLCAwLCAodm9p ZCAqKTAsICh2b2lkICopMCkgKSB7CgkJcGVycm9yKCJwdHJhY2UoIFBUUkFDRV9UUkFDRU1F LCAwLCAwLCAwKSIpOwoJCWV4aXQoMSk7Cgl9CgoJcHJpbnRmKCJcbj09PT09PT09PT0gVGVz dCBjYXNlIDE6IFNpbmdsZXN0ZXAgc2lnbmFsIGhhbmRsZXI6IHJ1bm5pbmcgd2hpbGUgc2ln c3VzcGVuZCgpID09PT09PT09PT1cbiIpOwoJZmZsdXNoKCBzdGRvdXQpOwoJcmV0ID0gc2ln cHJvY21hc2soIFNJR19TRVRNQVNLLCAmc2V0X2IsIE5VTEwpOwoJaWYgKCByZXQgKSB7CgkJ cGVycm9yKCJzaWdwcm9jbWFzayggU0lHX1NFVE1BU0ssICZzZXRfYiwgTlVMTCkiKTsKCQll eGl0KDEpOwoJfQoJcmV0ID0gKGludCApc2lnbmFsKCBTSUdBTFJNLCBzaWdoZGxyKTsKCWlm ICggcmV0ID09IChpbnQgKVNJR19FUlIgKSB7CgkJcGVycm9yKCJzaWduYWwoKSIpOwoJCXJl dHVybiAxOwoJfQoJcmV0ID0gYWxhcm0oIDEpOwoJaWYgKCByZXQgKSB7CgkJcGVycm9yKCJh bGFybSgpIik7CgkJcmV0dXJuIDE7Cgl9CgkqKHN0ZXBtZSsxKSA9IDA7Cgkqc3RlcG1lID0g MTsKCXJldCA9IGtpbGwoIG15cGlkLCBTSUdUUkFQKTsKCWlmICggcmV0ICkgewoJCSpzdGVw bWUgPSAwOwoJCXBlcnJvcigia2lsbCggbXlwaWQsIFNJR1RSQVAiKTsKCQlyZXR1cm4gMTsK CX0KCXJldCA9IHNpZ3N1c3BlbmQoICZzZXRfdWIpOwoJKnN0ZXBtZSA9IDg7CglpZiAoIHJl dCApIHsKCQllcnJub19zYXY9ZXJybm87CgkJcGVycm9yKCJzaWdzdXNwZW5kKCkiKTsKCQlp ZiAoIGVycm5vX3NhdiAhPSBFSU5UUiApIHsKCQkJcHJpbnRmKCJFUlJPUjogc2lnc3VzcGVu ZCgpIGRpZG4ndCByZXR1cm4gLUVJTlRSXG4iKTsKCQkJZmZsdXNoKCBzdGRvdXQpOwoJCQly ZXR1cm4gMTsKCQl9Cgl9IGVsc2UgewoJCXByaW50ZigiRVJST1I6IHNpZ3N1c3BlbmQoKSBy ZXR1cm5zIE8uSy4gLS0+IHRoaXMgc2hvdWxkIG5ldmVyIGhhcHBlbiFcbiIpOwoJCWZmbHVz aCggc3Rkb3V0KTsKCQlyZXR1cm4gMTsKCX0KCglpZiAoICooc3RlcG1lKzEpICE9IDB4MGYg KSB7CgkJcHJpbnRmKCJGYWlsZWQ6IDB4JXhcbiIsICooc3RlcG1lKzEpKTsKCQlyZXN1bHQr PTI7Cgl9CgllbHNlCgkJcHJpbnRmKCJTdWNjZWVkZWRcbiIpOwoJZmZsdXNoKCBzdGRvdXQp OwoKCXByaW50ZigiXG49PT09PT09PT09IFRlc3QgY2FzZSAyOiBTaW5nbGVzdGVwIHNpZ25h bCBoYW5kbGVyOiBzdGFydGVkIGJ5IGtpbGwoIGdldHBpZCgpLCBTSUdBTFJNKSA9PT09PT09 PT09XG4iKTsKCWZmbHVzaCggc3Rkb3V0KTsKCXJldCA9IHNpZ3Byb2NtYXNrKCBTSUdfU0VU TUFTSywgJnNldF91YiwgTlVMTCk7CglpZiAoIHJldCApIHsKCQlwZXJyb3IoInNpZ3Byb2Nt YXNrKCBTSUdfU0VUTUFTSywgJnNldF91YiwgTlVMTCkiKTsKCQlleGl0KDEpOwoJfQoJcmV0 ID0gKGludCApc2lnbmFsKCBTSUdBTFJNLCBzaWdoZGxyKTsKCWlmICggcmV0ID09IChpbnQg KVNJR19FUlIgKSB7CgkJcGVycm9yKCJzaWduYWwoKSIpOwoJCXJldHVybiAxOwoJfQoJKihz dGVwbWUrMSkgPSAwOwoJKnN0ZXBtZSA9IDE7CglyZXQgPSBraWxsKCBteXBpZCwgU0lHVFJB UCk7CglpZiAoIHJldCApIHsKCQkqc3RlcG1lID0gMDsKCQlwZXJyb3IoImtpbGwoIG15cGlk LCBTSUdUUkFQIik7CgkJcmV0dXJuIDE7Cgl9CglyZXQgPSBraWxsKCBteXBpZCwgU0lHQUxS TSk7CglpZiAoIHJldCApIHsKCQkqc3RlcG1lID0gMDsKCQlwZXJyb3IoImtpbGwoIG15cGlk LCBTSUdBTFJNIik7CgkJcmV0dXJuIDE7Cgl9Cgkqc3RlcG1lID0gODsKCglpZiAoICooc3Rl cG1lKzEpICE9IDB4MGYgKSB7CgkJcHJpbnRmKCJGYWlsZWQ6IDB4JXhcbiIsICooc3RlcG1l KzEpKTsKCQlyZXN1bHQrPTQ7Cgl9CgllbHNlCgkJcHJpbnRmKCJTdWNjZWVkZWRcbiIpOwoJ ZmZsdXNoKCBzdGRvdXQpOwoKCXByaW50ZigiXG49PT09PT09PT09IFRlc3QgY2FzZSAzOiBT aW5nbGVzdGVwIHNpZ25hbCBoYW5kbGVyOiBydW5uaW5nIHdoaWxlIGxvb3BpbmcgPT09PT09 PT09PVxuIik7CglmZmx1c2goIHN0ZG91dCk7CglyZXQgPSBzaWdwcm9jbWFzayggU0lHX1NF VE1BU0ssICZzZXRfdWIsIE5VTEwpOwoJaWYgKCByZXQgKSB7CgkJcGVycm9yKCJzaWdwcm9j bWFzayggU0lHX1NFVE1BU0ssICZzZXRfdWIsIE5VTEwpIik7CgkJZXhpdCgxKTsKCX0KCXJl dCA9IChpbnQgKXNpZ25hbCggU0lHQUxSTSwgc2lnaGRscik7CglpZiAoIHJldCA9PSAoaW50 IClTSUdfRVJSICkgewoJCXBlcnJvcigic2lnbmFsKCkiKTsKCQlyZXR1cm4gMTsKCX0KCSoo c3RlcG1lKzEpID0gMDsKCSpzdGVwbWUgPSAxOwoJcmV0ID0gYWxhcm0oIDEpOwoJaWYgKCBy ZXQgKSB7CgkJcGVycm9yKCJhbGFybSgpIik7CgkJcmV0dXJuIDE7Cgl9CglyZXQgPSBraWxs KCBteXBpZCwgU0lHVFJBUCk7CglpZiAoIHJldCApIHsKCQkqc3RlcG1lID0gMDsKCQlwZXJy b3IoImtpbGwoIG15cGlkLCBTSUdUUkFQIik7CgkJcmV0dXJuIDE7Cgl9Cgl3aGlsZSAoICpz dGVwbWUgPT0gMSApIDsKCSpzdGVwbWUgPSA4OwoKCWlmICggKihzdGVwbWUrMSkgIT0gMHgw ZiApIHsKCQlwcmludGYoIkZhaWxlZDogMHgleFxuIiwgKihzdGVwbWUrMSkpOwoJCXJlc3Vs dCs9ODsKCX0KCWVsc2UKCQlwcmludGYoIlN1Y2NlZWRlZFxuIik7CglmZmx1c2goIHN0ZG91 dCk7CgoJcmV0dXJuIHJlc3VsdDsKfQoKCmludApwYXJlbnRfZm4oIHBpZF90IGNoaWxkLCBp bnQgZGVidWcpCnsKCWludCByZXQsIHN0YXR1cywgc2lnOwoJdW5zaWduZWQgbG9uZyBjb2Rl LCBlaXA7Cgl1bnNpZ25lZCBsb25nIGFkZHJoaXN0WzRdID0gezAsMCwwLDB9OwoJaW50IGFk ZHJudW09MDsKCWludCB0cmFjZV90aGlzID0gMTsKCgl3aGlsZSAoMSkgewoJCXJldCA9IHdh aXRwaWQoIGNoaWxkLCAmc3RhdHVzLCAwKTsKCQlpZiAoIHJldCAhPSBjaGlsZCApIHsKCQkJ ZnByaW50Ziggc3RkZXJyLCAiUGFyZW50OiAiKTsKCQkJcGVycm9yKCJ3YWl0cGlkIik7CgkJ CWV4aXQoMSk7CgkJfQoJCWlmICggV0lGU1RPUFBFRChzdGF0dXMpICYmCgkJICAgICAoV1NU T1BTSUcoc3RhdHVzKSA9PSBTSUdUUkFQIHx8IFdTVE9QU0lHKHN0YXR1cykgPT0gU0lHQUxS TSkgKSB7CgkJCXNpZyA9IFdTVE9QU0lHKHN0YXR1cyk7CgkJCWlmICggZGVidWcgKSB7CgkJ CQllcnJubyA9IDA7CgkJCQllaXAgPSBwdHJhY2UoIFBUUkFDRV9QRUVLVVNFUiwgY2hpbGQs ICh2b2lkICopKEVJUCo0KSwgKHZvaWQgKikwKTsKCQkJCWlmICggZXJybm8gKSB7CgkJCQkJ ZnByaW50Ziggc3RkZXJyLCAiUGFyZW50OiAiKTsKCQkJCQlwZXJyb3IoInB0cmFjZSggUFRS QUNFX1BFRUtVU0VSLCAwLCAwLCAwKSIpOwoJCQkJCWV4aXQoMSk7CgkJCQl9CgkJCQlpZiAo IGVpcCA9PSBhZGRyaGlzdFswXSAmJiBlaXAgPT0gYWRkcmhpc3RbMV0gJiYKCQkJCSAgICAg ZWlwID09IGFkZHJoaXN0WzJdICYmIGVpcCA9PSBhZGRyaGlzdFszXSApIHsKCQkJCQlmcHJp bnRmKCBzdGRlcnIsICJQYXJlbnQ6IENhbid0IGdldCBvdXQgb2YgdHJhY2UgbG9vcFxuIik7 CgkJCQkJZXhpdCgxKTsKCQkJCX0KCQkJCWlmICggZWlwID09IGFkZHJoaXN0W2FkZHJudW1d ICYmIHNpZyAhPSBTSUdBTFJNICkgewoJCQkJCWlmICggdHJhY2VfdGhpcyApIHsKCQkJCQkJ dHJhY2VfdGhpcyA9IDA7CgkJCQkJCXByaW50ZigiT3V0cHV0IHN0b3BwZWQgd2hpbGUgbG9v cGluZ1xuIik7CgkJCQkJCWZmbHVzaCggc3Rkb3V0KTsKCQkJCQl9CgkJCQl9IGVsc2UgewoJ CQkJCWlmICggIXRyYWNlX3RoaXMgKSB7CgkJCQkJCXRyYWNlX3RoaXMgPSAxOwoJCQkJCQlw cmludGYoIk91dHB1dCByZXN0YXJ0ZWQgYWZ0ZXIgbG9vcFxuIik7CgkJCQkJfQoJCQkJfQoJ CQkJYWRkcmhpc3RbYWRkcm51bSsrXSA9IGVpcDsKCQkJCWFkZHJudW0gJT0gNDsKCQkJfQoJ CQllbHNlIAoJCQkJdHJhY2VfdGhpcyA9IDA7CgoJCQkqKHN0ZXBtZSsxKSB8PSAqc3RlcG1l OwoJCQlpZiAoIHNpZyA9PSBTSUdUUkFQKQoJCQkJc2lnID0gMDsKCQkJZWxzZSB7CgkJCQlw cmludGYoIlNpZ25hbCBTSUdBTFJNIHRyYWNlZCIpOwoJCQkJaWYgKCB0cmFjZV90aGlzICkK CQkJCQlwcmludGYoIiAtLS0+XG4iKTsKCQkJCWVsc2UKCQkJCQlwdXRjaGFyKCdcbicpOwoJ CQl9CgoJCQlpZiAoIHRyYWNlX3RoaXMgKSB7CgkJCQlwcmludGYoIlBhcmVudDogZWlwID0g MHglMDh4LCAiLCBlaXApOwoJCQkJY29kZSA9IHB0cmFjZSggUFRSQUNFX1BFRUtURVhULCBj aGlsZCwgZWlwLCAodm9pZCAqKTApOwoJCQkJaWYgKCBlcnJubyApCgkJCQkJcHJpbnRmKCJw dHJhY2UoIFBUUkFDRV9QRUVLVVNFUiwgMCwgMCwgMCk6ICVzIiwgc3RyZXJyb3IoIGVycm5v KSk7CgkJCQlwcmludGYoImNvZGUgPSAlMDJ4ICUwMnggJTAyeCAlMDJ4LCAiLAoJCQkJCWNv ZGUmMHhmZiwgKGNvZGU+PjgpJjB4ZmYsIChjb2RlPj4xNikmMHhmZiwgKGNvZGU+PjI0KSYw eGZmKTsKCQkJCWlmICggKGNvZGUgJiAweGZmZmYpID09IDB4ODBjZCB8fCAoY29kZSAmIDB4 ZmZmZikgPT0gMHgzNDBmICkKCQkJCQlwcmludGYoIlNZU0NBTEwhLCAiKTsKCQkJCWVsc2UK CQkJCQlwcmludGYoIiAgICAgICAgICAiKTsKCQkJCXByaW50Zigic3RlcG1lPSVkLCAiLCAq c3RlcG1lKTsKCQkJfQoKCQkJaWYgKCAqc3RlcG1lICYmICpzdGVwbWUgIT0gOCApIHsKCQkJ CWlmICggdHJhY2VfdGhpcyApCgkJCQkJcHJpbnRmKCJEb2luZyBTSU5HTEVTVEVQIC4uLlxu Iik7CgkJCQlmZmx1c2goIHN0ZG91dCk7CgkJCQlpZiAoIHB0cmFjZSggUFRSQUNFX1NJTkdM RVNURVAsIGNoaWxkLCAodm9pZCAqKTAsICh2b2lkICopc2lnKSA8IDAgKSB7CgkJCQkJZnBy aW50Ziggc3RkZXJyLCAiUGFyZW50OiAiKTsKCQkJCQlwZXJyb3IoInB0cmFjZSggUFRSQUNF X1NJTkdMRVNURVAsIDAsIDAsIDApIik7CgkJCQkJZXhpdCgxKTsKCQkJCX0KCQkJfQoJCQll bHNlIHsKCQkJCWlmICggdHJhY2VfdGhpcyApCgkJCQkJcHJpbnRmKCJEb2luZyBDT05USU5V RSAuLi5cbiIpOwoJCQkJZmZsdXNoKCBzdGRvdXQpOwoJCQkJaWYgKCBwdHJhY2UoIFBUUkFD RV9DT05ULCBjaGlsZCwgKHZvaWQgKikwLCAodm9pZCAqKXNpZykgPCAwICkgewoJCQkJCWZw cmludGYoIHN0ZGVyciwgIlBhcmVudDogIik7CgkJCQkJcGVycm9yKCJwdHJhY2UoIFBUUkFD RV9DT05ULCAwLCAwLCAwKSIpOwoJCQkJCWV4aXQoMSk7CgkJCQl9CgkJCX0KCQl9CgkJZWxz ZSB7CgkJCXByaW50ZigiXG5QYXJlbnQ6IENoaWxkcyBzdGF0dXMgaXMgJXg6IGV4aXRpbmdc biIsIHN0YXR1cyk7CgkJCWZmbHVzaCggc3Rkb3V0KTsKCQkJcmV0dXJuIChzdGF0dXMgIT0g MCk7CgkJfQoJfQp9CgoKaW50Cm1haW4oIGludCBhcmdjLCBjaGFyICoqIGFyZ3YpCnsKCWlu dCByZXM7CglwaWRfdCBjaGlsZDsKCglzdGVwbWUgPSBtbWFwKCBOVUxMLCA0MDk2LCBQUk9U X1dSSVRFfFBST1RfUkVBRCwgTUFQX1NIQVJFRHxNQVBfQU5PTllNT1VTLCAwLCAwKTsKCWlm ICggc3RlcG1lID09IE1BUF9GQUlMRUQgKSB7CgkJcGVycm9yKCJtbWFwIik7CgkJZXhpdCgx KTsKCX0KCgljaGlsZCA9IGZvcmsoKTsKCglpZiAoIGNoaWxkIDwgMCApIHsKCQlwZXJyb3Io ImZvcmsiKTsKCQlleGl0KDEpOwoJfQoJZWxzZSBpZiAoIGNoaWxkICkgewoJCXJlcyA9IHBh cmVudF9mbiggY2hpbGQsIChhcmdjID09IDIgJiYgISBzdHJjbXAoImRlYnVnIiwgYXJndlsx XSkpKTsKCQlyZXR1cm4gcmVzOwoJfSBlbHNlIHsKCQlyZXMgPSBjaGlsZF9mbigpOwoJCXJl dHVybiByZXM7Cgl9Cn0KAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGJv ZG8tdGVzdHMvaW50ZXJydXB0ZWRfc3lzY2FsbC5jAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwMTAwNjAwADAw MDA3NjQAMDAwMDc2NAAwMDAwMDAxNTUwNAAxMDE0MDQ1MzEzMAAwMTYzMzcAIDAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdXN0YXIgIABqZGlrZQAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGpkaWtlAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALyoKICogIGludGVycnVwdGVkX3N5c2NhbGwuYwog KgogKiAgVGVzdHRvb2wgZm9yIFVNTAogKiAgVGhpcyB0b29sIHRlc3RzIHNldmVyYWwgY2Fz ZXMgb2YgaW50ZXJydXB0ZWQgc3lzY2FsbHMgYW5kCiAqICBjaGVja3MgZm9yIHRoZSBzeXNj YWxsIHJlc3RhcnRpbmcgYmVpbmcgY29ycmVjdGx5IGRvbmUuCiAqCiAqICBDb3B5cmlnaHQg KEMpIDIwMDQgRnVqaXRzdSBTaWVtZW5zIENvbXB1dGVycyBHbWJICiAqICBBdXRob3I6IEJv ZG8gU3Ryb2Vzc2VyIChib2RvLnN0cm9lc3NlckBmdWppdHN1LXNpZW1lbnMuY29tKQogKgog KiAgTGljZW5zZWQgdW5kZXIgdGhlIEdQTAogKi8KCiNpbmNsdWRlIDxzdGRpby5oPgojaW5j bHVkZSA8dGltZS5oPgojaW5jbHVkZSA8c2lnbmFsLmg+CiNpbmNsdWRlIDxlcnJuby5oPgoj aW5jbHVkZSA8c3lzL3B0cmFjZS5oPgojaW5jbHVkZSA8YXNtL3B0cmFjZS5oPgojaW5jbHVk ZSA8c3lzL3dhaXQuaD4KI2luY2x1ZGUgPHN5cy9tbWFuLmg+CgppbnQgY2hpbGQsIHRlc3Rl cjsKaW50IHRyYWNlZDsKaW50IHBpcGVfZmRbMl07Cgp2b2xhdGlsZSBpbnQgKiBjb3VudGVy cDsKCmNoYXIgb3V0YnVmWzUxMl0sICpwOwoKdm9pZCBzaWdoZGxyKCBpbnQgc2lnKQp7Cglp ZiAoICEgdHJhY2VkICkgewoJCXByaW50ZigiU2lnbmFsICVkIGNhdWdodFxuIiwgc2lnKTsK CX0KfQoKdm9pZCBhbGFybV93cml0ZXIoIGludCBwYXJlbnQsIGludCBjb3VudCkKewoJd2hp bGUgKCBjb3VudC0tICkgewoJCXNsZWVwKCAxKTsKCQlpZiAoIGtpbGwoIHBhcmVudCwgU0lH QUxSTSkgKSB7CgkJCXBlcnJvcigia2lsbCggcGFyZW50LCBTSUdBTFJNKSIpOwoJCQlleGl0 KDEpOwoJCX0KCX0KCWlmICggcGlwZV9mZFswXSA9PSAtMSApCgkJZ290byBvdXQ7CgoJc2xl ZXAoIDEpOwoJY2xvc2UoIHBpcGVfZmRbMF0pOwoJaWYgKCB3cml0ZSggcGlwZV9mZFsxXSwg IlgiLCAxKSAhPSAxICkgewoJCXBlcnJvcigid3JpdGUoIHBpcGVfZmRbMV0sIFwiWFwiLCAx KSIpOwoJCWV4aXQoMSk7Cgl9CiAgICBvdXQ6CglzbGVlcCg2MCk7CglleGl0KDApOwp9Cgp2 b2lkCnByZXBhcmUoIGludCBta3BpcGUsIGludCBjb3VudCwgdm9pZCAqIGhkbHIsIGludCBm bGFncykKewoJc3RydWN0IHNpZ2FjdGlvbiBzYTsKCWludCByZXQ7CglpbnQgcGlkID0gZ2V0 cGlkKCk7CgoJaWYgKCBta3BpcGUgKSB7CgkJaWYgKCBwaXBlKCBwaXBlX2ZkKSApIHsKCQkJ cGVycm9yKCJwaXBlKCBwaXBlX2ZkKSIpOwoJCQlleGl0KDEpOwoJCX0KCX0gZWxzZSAKCQlw aXBlX2ZkWzBdID0gcGlwZV9mZFsxXSA9IC0xOwoKCW1lbXNldCggJnNhLCAwLCBzaXplb2Yo IHNhKSk7CglzYS5zYV9oYW5kbGVyID0gaGRscjsKCXNhLnNhX2ZsYWdzID0gZmxhZ3M7Cglp ZiAoIHNpZ2FjdGlvbiggU0lHQUxSTSwgJnNhLCBOVUxMKSApIHsKCQlwZXJyb3IoInNpZ2Fj dGlvbiggU0lHQUxSTSwgJnNhKSIpOwoJCWV4aXQoMSk7Cgl9CglpZiAoIChjaGlsZCA9IGZv cmsoKSkgPCAwICkgewoJCXBlcnJvcigiZm9yaygpIik7CgkJZXhpdCgxKTsKCX0KCWVsc2Ug aWYgKCAhY2hpbGQgKQoJCWFsYXJtX3dyaXRlciggcGlkLCBjb3VudCk7IC8qIENoaWxkIHdp bGwgbmV2ZXIgcmV0dXJuICovCgoJaWYgKCBta3BpcGUgKSB7CgkJY2xvc2UoIHBpcGVfZmRb MV0pOwoJCXBpcGVfZmRbMV0gPSAtMTsKCX0KCWNvdW50ZXJwWzBdID0gMDsKCWNvdW50ZXJw WzFdID0gMDsKCWlmICggaGRsciA9PSBTSUdfSUdOICkKCQljb3VudGVycFsyXSA9IDA7Cgll bHNlCgkJY291bnRlcnBbMl0gPSAxOwoKCXAgPSBvdXRidWY7Cn0KCnZvaWQKY2xlYW51cCgg aW50IG9rLCBpbnQgc3lzY2FsbHMsIGludCBzaWduYWxzKQp7CglpbnQgc3RhdHVzOwoKCWlu dCBzeXNjYWxsX2NvdW50ID0gY291bnRlcnBbMF07CglpbnQgc2lnbmFsX2NvdW50ID0gY291 bnRlcnBbMV07CgoJcHJpbnRmKCBvdXRidWYpOwoKCWlmICggcGlwZV9mZFswXSAhPSAtMSAp CgkJY2xvc2UoIHBpcGVfZmRbMF0pOwoJaWYgKCBwaXBlX2ZkWzFdICE9IC0xICkKCQljbG9z ZSggcGlwZV9mZFsxXSk7CgoJa2lsbCggY2hpbGQsIFNJR0tJTEwpOwoKCXdhaXRwaWQoIGNo aWxkLCAmc3RhdHVzLCAwKTsKCglpZiAoIHRyYWNlZCApIHsKCQlwcmludGYoIlN5c2NhbGxz OiAlZCwgU2lnbmFsczogJWQgPT0+ICIsIHN5c2NhbGxfY291bnQsIHNpZ25hbF9jb3VudCk7 CgkJaWYgKCBzeXNjYWxsX2NvdW50ICE9IHN5c2NhbGxzIHx8IHNpZ25hbF9jb3VudCAhPSBz aWduYWxzICkgewoJCQlvayA9IDA7CgkJCXByaW50ZigiIEVSUk9SIVxuRXhwZWN0ZWQ6IFN5 c2NhbGxzOiAlZCBTaWduYWxzOiAlZFxuIiwgc3lzY2FsbHMsIHNpZ25hbHMpOwoJCX0KCQll bHNlCgkJCXByaW50ZigiT0suXG4iKTsKCX0KCglpZiAoICEgb2sgKSB7CgkJcHJpbnRmKCJU ZXN0IGZhaWxlZCFcbiIpOwoJCWV4aXQoMSk7Cgl9CglwcmludGYoIlRlc3Qgc3VjY2VlZGVk XG5cbiIpOwp9CgoKaW50CnRlc3Rlcl9mbiggdm9pZCkKewoJc3RydWN0IHRpbWVzcGVjIHRz LCB0czI7CglzaWdzZXRfdCBzZXQ7CgljaGFyIGJ1ZlsxMF07CglpbnQgcmV0LCBlcnJub19z YXY7CgoJc2lncHJvY21hc2soIFNJR19CTE9DSywgTlVMTCwgJnNldCk7CgoKCXByaW50Zigi XG49PT09PT4gVGVzdCBjYXNlIDE6IG5hbm9zbGVlcCgpIDMuNSBzZWNvbmRzLCBTSUdBTFJN IGFmdGVyIDEgYW5kIDIgc2Vjb25kcywgU0lHX0lHTlxuIik7CgoJcHJlcGFyZSggMCwgMiwg U0lHX0lHTiwgMCk7CgoJdHMgPSAoc3RydWN0IHRpbWVzcGVjKXsgMywgNTAwMDAwMDAwfTsK CXJldCA9IG5hbm9zbGVlcCggJnRzLCAmdHMyKTsKCWlmICggcmV0ICkgewoJCXArPXNwcmlu dGYocCwgIkVSUk9SOiBuYW5vc2xlZXAoKTogJXMiLCBzdHJlcnJvciggZXJybm8pKTsKCQlw Kz1zcHJpbnRmKHAsICI7ICByZW1haW5pbmcgdGltZT0lbGQvJWxkXG4iLCB0czIudHZfc2Vj LCB0czIudHZfbnNlYyk7Cgl9CgllbHNlCgkJcCs9c3ByaW50ZihwLCAiT0s6IG5hbm9zbGVl cCgpIHJldHVybnMgT0suXG4iKTsKCgljbGVhbnVwKCByZXQgPT0gMCAsIDYsIDIpOwoKCglw cmludGYoIlxuPT09PT0+IFRlc3QgY2FzZSAyOiBuYW5vc2xlZXAoKSAzLjUgc2Vjb25kcywg U0lHQUxSTSBhZnRlciAxIGFuZCAyIHNlY29uZHMsIHNpZ25hbCBoYW5kbGVyXG4iKTsKCglw cmVwYXJlKCAwLCAyLCBzaWdoZGxyLCAwKTsKCgl0cyA9IChzdHJ1Y3QgdGltZXNwZWMpeyAz LCA1MDAwMDAwMDB9OwoJcmV0ID0gbmFub3NsZWVwKCAmdHMsICZ0czIpOwoJaWYgKCByZXQg KSB7CgkJcCs9c3ByaW50ZihwLCAiT0s6IG5hbm9zbGVlcCgpOiAlcyIsIHN0cmVycm9yKCBl cnJubykpOwoJCXArPXNwcmludGYocCwgIjsgIHJlbWFpbmluZyB0aW1lPSVsZC8lbGRcbiIs IHRzMi50dl9zZWMsIHRzMi50dl9uc2VjKTsKCX0KCWVsc2UKCQlwKz1zcHJpbnRmKHAsICJF UlJPUjogbmFub3NsZWVwKCkgcmV0dXJucyBPSy5cbiIpOwoKCWNsZWFudXAoIHJldCAmJiB0 czIudHZfc2VjID09IDIgLCA0LCAxKTsKCgoJcHJpbnRmKCJcbj09PT09PiBUZXN0IGNhc2Ug MzogcmVhZCgpLCBTSUdBTFJNIGFmdGVyIDEgYW5kIDIgc2Vjb25kcywgMSBCeXRlIGFmdGVy IDNyZCBzZWNvbmQsIFNJR19JR05cbiIpOwoKCXByZXBhcmUoIDEsIDIsIFNJR19JR04sIDAp OwoKCXJldCA9IHJlYWQoIHBpcGVfZmRbMF0sIGJ1Ziwgc2l6ZW9mKCBidWYpKTsKCWlmICgg cmV0ICE9IDEgKQoJCXArPXNwcmludGYocCwgIkVSUk9SOiByZWFkKCBwaXBlX2ZkWzBdLCBi dWYsIHNpemVvZihidWYpKTogJXNcbiIsIHN0cmVycm9yKCBlcnJubykpOwoJZWxzZSAKCQlw Kz1zcHJpbnRmKHAsICJPSzogcmVhZCByZWNlaXZlZCAlZCBieXRlc1xuIiwgcmV0KTsKCglj bGVhbnVwKCByZXQgPT0gMSAsIDYsIDIpOwoKCglwcmludGYoIlxuPT09PT0+IFRlc3QgY2Fz ZSA0OiByZWFkKCksIFNJR0FMUk0gYWZ0ZXIgMSBhbmQgMiBzZWNvbmRzLCAxIEJ5dGUgYWZ0 ZXIgM3JkIHNlY29uZCwgc2lnbmFsIGhhbmRsZXIsIFNBX1JFU1RBUlRcbiIpOwoKCXByZXBh cmUoIDEsIDIsIHNpZ2hkbHIsIFNBX1JFU1RBUlQpOwoKCXJldCA9IHJlYWQoIHBpcGVfZmRb MF0sIGJ1Ziwgc2l6ZW9mKCBidWYpKTsKCWlmICggcmV0ICE9IDEgKQoJCXArPXNwcmludGYo cCwgIkVSUk9SOiByZWFkKCBwaXBlX2ZkWzBdLCBidWYsIHNpemVvZihidWYpKTogJXNcbiIs IHN0cmVycm9yKCBlcnJubykpOwoJZWxzZSAKCQlwKz1zcHJpbnRmKHAsICJPSzogcmVhZCBy ZWNlaXZlZCAlZCBieXRlc1xuIiwgcmV0KTsKCgljbGVhbnVwKCByZXQgPT0gMSAsIDEwLCAy KTsKCgoJcHJpbnRmKCJcbj09PT09PiBUZXN0IGNhc2UgNTogcmVhZCgpLCBTSUdBTFJNIGFm dGVyIDEgc2Vjb25kLCAxIEJ5dGUgYWZ0ZXIgMm5kIHNlY29uZCwgc2lnbmFsIGhhbmRsZXIs ICEgU0FfUkVTVEFSVFxuIik7CgoJcHJlcGFyZSggMSwgMSwgc2lnaGRsciwgMCk7CgoJcmV0 ID0gcmVhZCggcGlwZV9mZFswXSwgYnVmLCBzaXplb2YoIGJ1ZikpOwoJZXJybm9fc2F2ID0g ZXJybm87CglpZiAoIHJldCAhPSAxICkKCQlwKz1zcHJpbnRmKHAsICJPSzogcmVhZCggcGlw ZV9mZFswXSwgYnVmLCBzaXplb2YoYnVmKSk6ICVzXG4iLCBzdHJlcnJvciggZXJybm8pKTsK CWVsc2UgCgkJcCs9c3ByaW50ZihwLCAiRVJST1I6IHJlYWQgcmVjZWl2ZWQgJWQgYnl0ZXNc biIsIHJldCk7CgoJY2xlYW51cCggcmV0ID09IC0xICYmIGVycm5vX3NhdiA9PSBFSU5UUiAs IDQsIDEpOwoKCglwcmludGYoIlxuPT09PT0+IFRlc3QgY2FzZSA2OiBzaWdzdXNwZW5kKCks IFNJR0FMUk0gYWZ0ZXIgMSBzZWNvbmQsIHNpZ25hbCBoYW5kbGVyLCBTQV9SRVNUQVJUXG4i KTsKCglwcmVwYXJlKCAwLCAxLCBzaWdoZGxyLCBTQV9SRVNUQVJUKTsKCglyZXQgPSBzaWdz dXNwZW5kKCAmc2V0KTsKCWVycm5vX3NhdiA9IGVycm5vOwoJaWYgKCByZXQgPCAwICkKCQlw Kz1zcHJpbnRmKHAsICJPSzogc2lnc3VzcGVuZCgpOiAlc1xuIiwgc3RyZXJyb3IoIGVycm5v KSk7CgllbHNlIAoJCXArPXNwcmludGYocCwgIkVSUk9SOiBzaWdzdXNwZW5kIHJldHVybnMg T0suXG4iKTsKCgljbGVhbnVwKCByZXQgPT0gLTEgJiYgZXJybm9fc2F2ID09IEVJTlRSICwg NCwgMSk7Cn0KCgppbnQKbWFpbiggaW50IGFyZ2MsIGNoYXIgKiphcmd2KQp7CglpbnQgc3Rh dHVzLCByZXQsIHNpZywgZGVidWc7CglzaWdzZXRfdCBzZXQ7CgoJc2lncHJvY21hc2soIFNJ R19CTE9DSywgTlVMTCwgJnNldCk7CglzaWdkZWxzZXQoICZzZXQsIFNJR0NITEQpOwoJc2ln cHJvY21hc2soIFNJR19TRVRNQVNLLCBOVUxMLCAmc2V0KTsKCgljb3VudGVycCA9IG1tYXAo IE5VTEwsIDQwOTYsIFBST1RfV1JJVEV8UFJPVF9SRUFELCBNQVBfU0hBUkVEfE1BUF9BTk9O WU1PVVMsIDAsIDApOwoJaWYgKCBjb3VudGVycCA9PSBNQVBfRkFJTEVEICkgewoJCXBlcnJv cigibW1hcCIpOwoJCWV4aXQoMSk7Cgl9CgoJZGVidWcgPSBhcmdjID4gMSAmJiAhc3RyY21w KCJkZWJ1ZyIsYXJndlsxXSk7CgoJdGVzdGVyID0gZm9yaygpOwoJaWYgKCB0ZXN0ZXIgPCAw ICkgewoJCXBlcnJvcigiZm9yaygpIik7CgkJZXhpdCgxKTsKCX0KCWlmICggISB0ZXN0ZXIg KSB7CgkJcHJpbnRmKCJcblxuU3RhcnRpbmcgVGVzdDogVU5UUkFDRURcblxuIik7CgkJdHJh Y2VkID0gMDsKCQl0ZXN0ZXJfZm4oKTsKCQlpZiAoIHB0cmFjZSggUFRSQUNFX1RSQUNFTUUs IDAsICh2b2lkICopMCwgKHZvaWQgKikwKSApIHsKCQkJcGVycm9yKCJwdHJhY2UoIFBUUkFD RV9UUkFDRU1FLCAwLCAwLCAwKSIpOwoJCQlleGl0KDEpOwoJCX0KCQlwcmludGYoIlxuU3Rh cnRpbmcgVGVzdDogVFJBQ0VEXG4iKTsKCQl0cmFjZWQgPSAxOwoJCWtpbGwoIGdldHBpZCgp LCBTSUdUUkFQKTsKCQl0ZXN0ZXJfZm4oKTsKCQlleGl0KDApOwoJfQoKCXdoaWxlICgxKSB7 CgkJcmV0ID0gd2FpdHBpZCggdGVzdGVyLCAmc3RhdHVzLCAwKTsKCQlpZiAoIHJldCAhPSB0 ZXN0ZXIgKSB7CgkJCWZwcmludGYoIHN0ZGVyciwgIlRyYWNlcjogIik7CgkJCXBlcnJvcigi d2FpdHBpZCIpOwoJCQlleGl0KDEpOwoJCX0KCQlpZiAoIFdJRlNUT1BQRUQoc3RhdHVzKSAm JiBXU1RPUFNJRyhzdGF0dXMpID09IFNJR1RSQVAgKSB7CgkJCXNpZyA9IDA7CgkJCWNvdW50 ZXJwWzBdKys7CgkJCWlmICggZGVidWcgKQoJCQkJcHJpbnRmKCJUUkFQOiBzeXNjYWxsLSMg PSAlZCwgY291bnQgPSAlZFxuIiwKCQkJCSAgICAgICBwdHJhY2UoIFBUUkFDRV9QRUVLVVNF UiwgdGVzdGVyLCAodm9pZCAqKShPUklHX0VBWCo0KSwgTlVMTCksCgkJCQkgICAgICAgY291 bnRlcnBbMF0pOwoJCX0KCQllbHNlIGlmICggV0lGU1RPUFBFRChzdGF0dXMpICYmIFdTVE9Q U0lHKHN0YXR1cykgPT0gU0lHQUxSTSApIHsKCQkJaWYgKCBkZWJ1ZyApCgkJCQlwcmludGYo IlNJR0NITEQgISEhISFcbiIpOwoJCQlzaWcgPSBTSUdBTFJNOwoJCQlpZiAoIGNvdW50ZXJw WzJdICkKCQkJCXByaW50ZigiU2lnbmFsICVkIGNhdWdodFxuIiwgc2lnKTsKCQkJZWxzZQoJ CQkJcHJpbnRmKCJTaWduYWwgJWQgaWdub3JlZFxuIiwgc2lnKTsKCQkJY291bnRlcnBbMV0r KzsKCQl9CgkJZWxzZSBpZiAoIFdJRlNUT1BQRUQoc3RhdHVzKSAmJiBXU1RPUFNJRyhzdGF0 dXMpID09IFNJR0NITEQgKSB7CgkJCWlmICggZGVidWcgKQoJCQkJcHJpbnRmKCJTSUdDSExE ICEhISEhXG4iKTsKCQkJc2lnID0gU0lHQ0hMRDsKCQl9CgkJZWxzZSB7CgkJCXByaW50Zigi XG5UcmFjZXI6IFRlc3RlcidzIHN0YXR1cyBpcyAleDogZXhpdGluZ1xuIiwgc3RhdHVzKTsK CQkJcmV0dXJuIChzdGF0dXMgIT0gMCk7CgkJfQoJCWlmICggcHRyYWNlKCBQVFJBQ0VfU1lT Q0FMTCwgdGVzdGVyLCAodm9pZCAqKTAsIHNpZykgPCAwICkgewoJCQlmcHJpbnRmKCBzdGRl cnIsICJQYXJlbnQ6ICIpOwoJCQlwZXJyb3IoInB0cmFjZSggUFRSQUNFX1NZU0NBTEwsIHRl c3RlciwgMCwgc2lnKSIpOwoJCQlleGl0KDEpOwoJCX0KCX0KfQoAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAGJvZG8tdGVzdHMva2VybmVsX3Jlc3RvcmVyLmMAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAwMTAwNjAwADAwMDA3NjQAMDAwMDc2NAAwMDAwMDAwNTYxMgAxMDE0MDQ1MzI2NAAwMTU0 NTQAIDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdXN0 YXIgIABqZGlrZQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGpkaWtlAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALyoKICogIGtlcm5lbF9yZXN0 b3Jlci5jCiAqCiAqICBUZXN0dG9vbCBmb3IgVU1MCiAqICBUaGlzIHRvb2wgdGVzdHMgdGhl IGtlcm5lbHMgcmVzdG9yZXIgY29kZSBzdHVicy4KICogIEFsc28gaXQgY2hlY2tzLCB3aGV0 aGVyIHN5c2NhbGwgcmVzdGFydGluZyBpcyBza2lwcGVkIG9uCiAqICByZXR1cm4gZnJvbSBz eXNfc2lncmV0dXJuKCkgYW5kIHN5c19ydF9zaWdyZXR1cm4oKQogKgogKiAgQ29weXJpZ2h0 IChDKSAyMDA0IEZ1aml0c3UgU2llbWVucyBDb21wdXRlcnMgR21iSAogKiAgQXV0aG9yOiBC b2RvIFN0cm9lc3NlciAoYm9kby5zdHJvZXNzZXJAZnVqaXRzdS1zaWVtZW5zLmNvbSkKICoK ICogIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwKICovCgojZGVmaW5lIF9fS0VSTkVMX18KI2lu Y2x1ZGUgPGFzbS9zaWduYWwuaD4KI2luY2x1ZGUgPGFzbS9zaWdpbmZvLmg+CiNpbmNsdWRl IDxhc20vc2lnY29udGV4dC5oPgojaW5jbHVkZSA8YXNtL3Vjb250ZXh0Lmg+CiNpbmNsdWRl IDx1bmlzdGQuaD4KI2luY2x1ZGUgPGVycm5vLmg+CiNpbmNsdWRlIDxhc20vdW5pc3RkLmg+ CgppbnQgY291bnRlcjsKaW50IG1vZF9laXA7Cgp2b2lkIHNpZ2hkbHIoIGludCBzaWcpCnsK CXN0cnVjdCBzaWdjb250ZXh0ICogc2MgPSAoc3RydWN0IHNpZ2NvbnRleHQgKikoJnNpZyAr IDEpOwoKCXByaW50Zigic2lnaGRscigpOiBzaWduYWwgJWQgY2F1Z2h0XG4iLCBzaWcpOwoJ aWYgKCAtLWNvdW50ZXIgKQoJCWFsYXJtKDEpOwoJZWxzZSBpZiAoIG1vZF9laXAgKQoJCXNj LT5laXAgLT0gMjsKfQoKCnZvaWQgcnRfc2lnaGRsciggaW50IHNpZywgc2lnaW5mb190ICog aW5mbywgc3RydWN0IHVjb250ZXh0ICogdWMpCnsKCXByaW50ZigicnRfc2lnaGRscigpOiBz aWduYWwgJWQgY2F1Z2h0XG4iLCBzaWcpOwoJaWYgKCAtLWNvdW50ZXIgKQoJCWFsYXJtKDEp OwoJZWxzZSBpZiAoIG1vZF9laXAgKQoJCXVjLT51Y19tY29udGV4dC5laXAgLT0gMjsKfQoK X3N5c2NhbGw0KCBpbnQsIHJ0X3NpZ2FjdGlvbiwgaW50LCBzaWduciwgc3RydWN0IGtfc2ln YWN0aW9uICosIG5ldywgc3RydWN0IGtfc2lnYWN0aW9uICosIG9sZCwgaW50LCBzaXplKQoK CnZvaWQKcHJlcGFyZSggc3RydWN0IGtfc2lnYWN0aW9uICpzYSwgdm9pZCAqIGhkbHIsIGlu dCBjb3VudCkKewoJaW50IHJldDsKCgljb3VudGVyID0gY291bnQ7CglzYS0+c2Euc2FfaGFu ZGxlciA9IGhkbHI7CglzYS0+c2Euc2FfZmxhZ3MgPSBTQV9SRVNUQVJUOwoJaWYgKCBoZGxy ID09IHJ0X3NpZ2hkbHIgKQoJCXNhLT5zYS5zYV9mbGFncyB8PSBTQV9TSUdJTkZPOwoJcmV0 ID0gcnRfc2lnYWN0aW9uKCBTSUdBTFJNLCBzYSwgTlVMTCwgc2l6ZW9mKCBzaWdzZXRfdCkp OwoJaWYgKCByZXQgKSB7CgkJcGVycm9yKCJydF9zaWdhY3Rpb24oKSIpOwoJCWV4aXQoMSk7 Cgl9CgkKCWFsYXJtKDEpOwp9CgoKdm9pZAp0ZXN0X3N1c3BlbmQoIHZvaWQpCnsKCWludCBy ZXQsIGVycm5vX3NhdjsKCXNpZ3NldF90IHNldDsKCgltZW1zZXQoICZzZXQsIDAsIHNpemVv Ziggc2lnc2V0X3QpKTsKCglyZXQgPSBzaWdzdXNwZW5kKCAmc2V0KTsKCWlmICggcmV0ICkg ewoJCWVycm5vX3Nhdj1lcnJubzsKCQlwZXJyb3IoInNpZ3N1c3BlbmQoKSIpOwoJCWlmICgg ZXJybm9fc2F2ICE9IEVJTlRSICkgewoJCQlwcmludGYoIkVSUk9SOiBzaWdzdXNwZW5kKCkg ZGlkbid0IHJldHVybiAtRUlOVFJcbiIpOwoJCQlleGl0KDEpOwoJCX0KCX0gZWxzZSB7CgkJ cHJpbnRmKCJFUlJPUjogc2lnc3VzcGVuZCgpIHJldHVybnMgTy5LLiAtLT4gdGhpcyBzaG91 bGQgbmV2ZXIgaGFwcGVuIVxuIik7CgkJZXhpdCgxKTsKCX0KCglpZiAoIGNvdW50ZXIgKSB7 CgkJcHJpbnRmKCJFUlJPUjogc2lnbmFsIGNvdW50ZXIgbm90IGNvdW50ZWQgZG93biB0byAw LCBpcyAlZFxuIiwgY291bnRlcik7CgkJZXhpdCgxKTsKCX0KCXByaW50ZigiPT0+IE9LLlxu Iik7Cn0KCgp2b2lkCnRlc3RfbG9vcCggdm9pZCkKewoJX19hc21fXyB2b2xhdGlsZSAoIglj YWxsIDFmCVxuIgoJCQkiCWptcCAgMmYJXG4iCgkJCSIJcmV0CVxuIgoJCQkiCW5vcAlcbiIK CQkJIjE6CWptcCAgMWIJXG4iCgkJCSIyOgkJXG4iCgkJCQk6IDogImEiICgtRVJFU1RBUlRT WVMpKTsKCglhbGFybSgwKTsKCglpZiAoIGNvdW50ZXIgKSB7CgkJcHJpbnRmKCJFUlJPUjog c2lnbmFsIGNvdW50ZXIgbm90IGNvdW50ZWQgZG93biB0byAwLCBpcyAlZFxuIiwgY291bnRl cik7CgkJZXhpdCgxKTsKCX0KCXByaW50ZigiPT0+IE9LLlxuIik7Cn0KCgppbnQKbWFpbigg dm9pZCkKewoJc3RydWN0IGtfc2lnYWN0aW9uIHNhOwoKCXNhLnNhLnNhX3Jlc3RvcmVyID0g TlVMTDsKCW1lbXNldCggc2Euc2Euc2FfbWFzay5zaWcsIDB4ZmYsIHNpemVvZiggc2lnc2V0 X3QpKTsKCgltb2RfZWlwID0gMDsKCglwcmludGYoIlxuVGVzdGluZyBrZXJuZWxzIHJlc3Rv cmVyIGZvciBzaWdyZXR1cm4oKTogdGhpcyBzaW1wbHkgc2hvdWxkbid0IGNyYXNoXG5cbiIp OwoKCXByZXBhcmUoICZzYSwgc2lnaGRsciwgMSk7CgoJdGVzdF9zdXNwZW5kKCk7CgoJcHJp bnRmKCJcblRlc3Rpbmcga2VybmVscyByZXN0b3JlciBmb3IgcnRfc2lncmV0dXJuKCk6IHRo aXMgc2ltcGx5IHNob3VsZG4ndCBjcmFzaFxuXG4iKTsKCglwcmVwYXJlKCAmc2EsIHJ0X3Np Z2hkbHIsIDEpOwoKCXRlc3Rfc3VzcGVuZCgpOwoKCW1vZF9laXAgPSAxOwoKCXByaW50Zigi XG5UZXN0aW5nIGNvcnJlY3QgcmV0dXJuY29kZS1oYW5kbGluZyBmb3Igc2lncmV0dXJuKClc biIpOwoKCXByZXBhcmUoICZzYSwgc2lnaGRsciwgMyk7CgoJdGVzdF9sb29wKCk7CgoJcHJp bnRmKCJcblRlc3RpbmcgY29ycmVjdCByZXR1cm5jb2RlLWhhbmRsaW5nIGZvciBydF9zaWdy ZXR1cm4oKVxuIik7CgoJcHJlcGFyZSggJnNhLCBydF9zaWdoZGxyLCAzKTsKCgl0ZXN0X2xv b3AoKTsKCglyZXR1cm4gMDsKfQoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYm9kby10ZXN0cy9zaWdtYXNraW5nLmMA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAADAxMDA2MDAAMDAwMDc2NAAwMDAwNzY0ADAwMDAwMDEx MzcxADEwMTQwNTEwMDY0ADAxNDM3MgAgMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAB1c3RhciAgAGpkaWtlAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAamRpa2UAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAvKgogKiAgc2lnbWFza2luZy5jCiAqCiAqICBUZXN0dG9vbCBmb3IgVU1MCiAqICBUaGlz IHRvb2wgdGVzdHMgc2lnbmFsIG1hc2tpbmcgLyB1bm1hc2tpbmcgaW4gY2FzZSBvZgogKiAg ZXJyb3JzIHdoaWxlIHByZXBhcmluZyBzaWdoYW5kbGVyJ3Mgc3RhY2tmcmFtZSAoaW52YWxp ZAogKiAgc3RhY2spLgogKgogKiAgQ29weXJpZ2h0IChDKSAyMDA0IEZ1aml0c3UgU2llbWVu cyBDb21wdXRlcnMgR21iSAogKiAgQXV0aG9yOiBCb2RvIFN0cm9lc3NlciAoYnN0cm9lc3Nl ckBmdWppdHN1LXNpZW1lbnMuY29tKQogKgogKiAgTGljZW5zZWQgdW5kZXIgdGhlIEdQTAog Ki8KCiNpbmNsdWRlIDx0aW1lLmg+CiNpbmNsdWRlIDxzaWduYWwuaD4KI2luY2x1ZGUgPHN0 ZGlvLmg+CiNpbmNsdWRlIDxlcnJuby5oPgoKc2lnc2V0X3QgaGFuZGxlcl9zZXQ7Cgp2b2lk IHNpZ25hbF9oYW5kbGVyKCBpbnQgc2lnKQp7CglwcmludGYoIlNpZ25hbCAlZCBjYXVnaHRc biIsIHNpZyk7CglzaWdhZGRzZXQoICZoYW5kbGVyX3NldCwgc2lnKTsKfQoKCmludAptYWlu KCB2b2lkKQp7CglzdHJ1Y3Qgc2lnYWN0aW9uIHNhOwoJc2lnc2V0X3QgZW1wdHlzZXQsIGZ1 bGxzZXQsIG9sZHNldCwgZW1wdHlVU1Ixc2V0OwoJc3RhY2tfdCBzdGFjazsKCXN0cnVjdCB0 aW1lc3BlYyB0cywgdHMyOwoJaW50IGksIHJldCwgZXJybm9fc2F2LCBlcnJvciA9IDA7CgoJ cHJpbnRmKCJcblxuXG4iKTsKCglzdGFjay5zc19zcCA9IChjaGFyICopMHhmMjM0NTY3ODsg LyogVGhpcyBzaG91bGQgZ2l2ZSB1cyBhIHNlZ2ZhdWx0IC4uLiovCglzdGFjay5zc19zaXpl ID0gOCoxMDI0OwoJc3RhY2suc3NfZmxhZ3MgPSAwOwoJaWYgKCBzaWdhbHRzdGFjayggJnN0 YWNrLCBOVUxMKSApIHsKCQlwZXJyb3IoICJzaWdhbHRzdGFjayggJnN0YWNrLCBOVUxMKSIp OwoJCWV4aXQoMSk7Cgl9CgoJc2lnZW1wdHlzZXQoICZlbXB0eXNldCk7CglzaWdlbXB0eXNl dCggJmVtcHR5VVNSMXNldCk7CglzaWdhZGRzZXQoICZlbXB0eVVTUjFzZXQsIFNJR1VTUjEp OwoJc2lnZmlsbHNldCggJmZ1bGxzZXQpOwoJc2lnZGVsc2V0KCAmZnVsbHNldCwgU0lHVVNS MSk7CgoJcHJpbnRmKCJJbnN0YWxsaW5nIHNpZ25hbCBoYW5kbGVyIGZvciBTSUdTRUdWLCBz YV9tYXNrID0gZnVsbCBtYXNrIC0gU0lHVVNSMVxuIik7CglzYS5zYV9yZXN0b3JlciA9IE5V TEw7CglzYS5zYV9oYW5kbGVyID0gc2lnbmFsX2hhbmRsZXI7CglzaWdmaWxsc2V0KCAmKHNh LnNhX21hc2spKTsKCXNhLnNhX2ZsYWdzID0gMDsKCWlmICggc2lnYWN0aW9uKCBTSUdTRUdW LCAmc2EsIE5VTEwpICkgewoJCXBlcnJvcigic2lnYWN0aW9uKCBTSUdTRUdWLCAmc2EsIE5V TEwpIik7CgkJZXhpdCgxKTsKCX0KCXByaW50ZigiSW5zdGFsbGluZyBzaWduYWwgaGFuZGxl ciBmb3IgU0lHQUxSTSwgU0FfT05TVEFDSyB3aXRoIGludmFsaWQgc3RhY2ssICIKCSAgICAg ICAic2FfbWFzayA9IGZ1bGwgbWFzayAtIFNJR1VTUjFcbiIpOwoJc2Euc2FfZmxhZ3MgPSBT QV9PTlNUQUNLOwoJaWYgKCBzaWdhY3Rpb24oIFNJR0FMUk0sICZzYSwgTlVMTCkgKSB7CgkJ cGVycm9yKCJzaWdhY3Rpb24oIFNJR1NFR1YsICZzYSwgTlVMTCkiKTsKCQlleGl0KDEpOwoJ fQoKCWZvciAoIGk9MDsgaTwyOyBpKyspIHsKCQlpZiAoIGkgPT0gMCApCgkJCXByaW50Zigi XG5cbj09PT09IFRlc3QgMTogc2lnbmFsIFNJR0FMUk0gd2hpbGUgd2FpdGluZyBpbiBzaWdz dXNwZW5kKCkgPT09PT1cblxuIik7CgkJaWYgKCBpID09IDEgKQoJCQlwcmludGYoIlxuXG49 PT09PSBUZXN0IDI6IHNpZ25hbCBTSUdBTFJNIHdoaWxlIHdhaXRpbmcgaW4gbmFub3NsZWVw KCkgPT09PT1cblxuIik7CgoJCXByaW50ZigiVW5ibG9ja2luZyBhbGwgc2lnbmFsc1xuIik7 CgkJaWYgKCBzaWdwcm9jbWFzayggU0lHX1NFVE1BU0ssICZlbXB0eXNldCwgTlVMTCkgKSB7 CgkJCXBlcnJvciggInNpZ3Byb2NtYXNrKCBTSUdfU0VUTUFTSywgJmVtcHR5c2V0LCBOVUxM KSIpOwoJCQlleGl0KDEpOwoJCX0gCgoJCXNpZ2VtcHR5c2V0KCAmaGFuZGxlcl9zZXQpOwoK CQlwcmludGYoIkNhbGxpbmcgYWxhcm0oMilcbiIpOwoJCWFsYXJtKCAyKTsKCgkJaWYgKCBp ID09IDAgKSB7CgkJCXByaW50ZigiQ2FsbGluZyBzaWdzdXNwZW5kKCBlbXB0eXNldCArIFNJ R1VTUjEpXG4iKTsKCQkJcmV0ID0gc2lnc3VzcGVuZCggJmVtcHR5VVNSMXNldCk7CgkJCWVy cm5vX3NhdiA9IGVycm5vOwoJCQlpZiAoIHNpZ3Byb2NtYXNrKCBTSUdfU0VUTUFTSywgJmZ1 bGxzZXQsICZvbGRzZXQpICkgewoJCQkJcGVycm9yKCAic2lncHJvY21hc2soIFNJR19TRVRN QVNLLCAmZnVsbHNldCwgTlVMTCkiKTsKCQkJCWV4aXQoMSk7CgkJCX0KCQkJcHJpbnRmKCJB ZnRlciByZXR1cm4gZnJvbSBzaWdzdXNwZW5kKCksIGJsb2NrZWQgYWxsIHNpZ25hbHMsIHNh dmVkIHJldHVybmVkIG1hc2tcbiIpOwoJCQlpZiAoIHJldCA8IDAgKSB7CgkJCQllcnJubyA9 IGVycm5vX3NhdjsKCQkJCXBlcnJvcigiT0s6IHNpZ3N1c3BlbmQoKSIpOwoJCQl9IGVsc2Ug ewoJCQkJcHJpbnRmKCJFUlJPUjogc2lnc3VzcGVuZCByZXR1cm5zIE8uSy5cbiIpOwoJCQkJ ZXJyb3IrKzsKCQkJfQoJCX0KCQlpZiAoIGkgPT0gMSApIHsKCQkJcHJpbnRmKCJDYWxsaW5n IG5hbm9zbGVlcCggMjBzKVxuIik7CgkJCXRzID0gKHN0cnVjdCB0aW1lc3BlYyl7IDIwLCA1 MDAwMDAwMDB9OwoJCQlyZXQgPSBuYW5vc2xlZXAoICZ0cywgJnRzMik7CgkJCWVycm5vX3Nh diA9IGVycm5vOwoJCQlpZiAoIHNpZ3Byb2NtYXNrKCBTSUdfU0VUTUFTSywgJmZ1bGxzZXQs ICZvbGRzZXQpICkgewoJCQkJcGVycm9yKCAic2lncHJvY21hc2soIFNJR19TRVRNQVNLLCAm ZnVsbHNldCwgTlVMTCkiKTsKCQkJCWV4aXQoMSk7CgkJCX0KCQkJcHJpbnRmKCJBZnRlciBy ZXR1cm4gZnJvbSBuYW5vc2xlZXAoKSwgYmxvY2tlZCBhbGwgc2lnbmFscywgc2F2ZWQgcmV0 dXJuZWQgbWFza1xuIik7CgkJCWlmICggcmV0ICkgewoJCQkJZXJybm8gPSBlcnJub19zYXY7 CgkJCQlwZXJyb3IoIk9LOiBuYW5vc2xlZXAoKSIpOwoJCQkJaWYgKCB0czIudHZfc2VjICE9 IDE4ICkgewoJCQkJCXByaW50ZigiRVJST1I6IHJlbWFpbmluZyB0aW1lPSVsZC8lbGQsIGV4 cGVjdGVkIGFib3V0IDE4IHNlY29uZHNcbiIsCgkJCQkJICAgICAgIHRzMi50dl9zZWMsIHRz Mi50dl9uc2VjKTsKCQkJCQllcnJvcisrOwoJCQkJfQoJCQl9IGVsc2UgewoJCQkJcHJpbnRm KCJFUlJPUjogbmFub3NsZWVwKCkgcmV0dXJucyBPLksuXG4iKTsKCQkJCWVycm9yKys7CgkJ CX0KCQl9CgkJaWYgKCAhIHNpZ2lzbWVtYmVyKCAmaGFuZGxlcl9zZXQsIFNJR0FMUk0pICkg ewoJCQlwcmludGYoIk9LOiBzaWdoYW5kbGVyIGZvciBTSUdBTFJNICglZCkgZGlkbid0IHJ1 biAoaW52YWxpZCBzdGFjaylcbiIsIFNJR0FMUk0pOwoJCX0gZWxzZSB7CgkJCXByaW50Zigi RVJST1I6IHNpZ2hhbmRsZXIgZm9yIFNJR0FMUk0gKCVkKSBkaWQgcnVuLCBkZXNwaXRlIG9m IGludmFsaWQgc3RhY2shXG4iLCBTSUdBTFJNKTsKCQl9CgkJaWYgKCAhIHNpZ2lzbWVtYmVy KCAmb2xkc2V0LCBTSUdTRUdWKSApIHsKCQkJcHJpbnRmKCJPSzogU0lHU0VHViBpcyB1bm1h c2tlZCBhdCBlbmQgb2YgdGVzdFxuIik7CgkJfSBlbHNlIHsKCQkJcHJpbnRmKCJFUlJPUjog U0lHU0VHViBpcyBtYXNrZWQgYXQgZW5kIG9mIHRlc3RcbiIpOwoJCQllcnJvcisrOwoJCX0K CQlpZiAoIHNpZ2lzbWVtYmVyKCAmaGFuZGxlcl9zZXQsIFNJR1NFR1YpICkgewoJCQlwcmlu dGYoIk9LOiBzaWdoYW5kbGVyIGZvciBTSUdTRUdWICglZCkgZGlkIHJ1blxuIiwgU0lHU0VH Vik7CgkJfSBlbHNlIHsKCQkJcHJpbnRmKCJFUlJPUjogc2lnaGFuZGxlciBmb3IgU0lHU0VH ViAoJWQpIGRpZG4ndCBydW5cbiIsIFNJR1NFR1YpOwoJCQllcnJvcisrOwoJCX0KCQlpZiAo ICEgc2lnaXNtZW1iZXIoICZvbGRzZXQsIFNJR1VTUjEpICkgewoJCQlwcmludGYoIk9LOiBT SUdVU1IxIGlzIHVubWFza2VkXG4iKTsKCQl9IGVsc2UgewoJCQlwcmludGYoIkVSUk9SOiBT SUdVU1IxIGlzIG1hc2tlZFxuIik7CgkJCWVycm9yKys7CgkJfQoJCWlmICggISBzaWdpc21l bWJlciggJm9sZHNldCwgU0lHVVNSMikgKSB7CgkJCXByaW50ZigiT0s6IFNJR1VTUjIgaXMg dW5tYXNrZWRcbiIpOwoJCX0gZWxzZSB7CgkJCXByaW50ZigiRVJST1I6IFNJR1VTUjIgaXMg bWFza2VkXG4iKTsKCQkJZXJyb3IrKzsKCQl9CgkJaWYgKCBzaWdwZW5kaW5nKCAmb2xkc2V0 KSApIHsKCQkJcGVycm9yKCJzaWdwZW5kaW5nKCkiKTsKCQkJZXhpdCgxKTsKCQl9CgkJaWYg KCBzaWdpc21lbWJlciggJm9sZHNldCwgU0lHU0VHVikgKSB7CgkJCXByaW50ZigiU0lHU0VH ViBpcyBwZW5kaW5nIGF0IGVuZCBvZiB0ZXN0LCB1bmJsb2NraW5nIGl0IG5vdyAuLi5cbiIp OwoJCQlpZiAoIHNpZ3Byb2NtYXNrKCBTSUdfU0VUTUFTSywgJmVtcHR5c2V0LCBOVUxMKSAp IHsKCQkJCXBlcnJvciggInNpZ3Byb2NtYXNrKCBTSUdfU0VUTUFTSywgJmVtcHR5c2V0LCBO VUxMKSIpOwoJCQkJZXhpdCgxKTsKCQkJfSAKCQkJaWYgKCAhc2lnaXNtZW1iZXIoICZoYW5k bGVyX3NldCwgU0lHU0VHVikgKSB7CgkJCQlwcmludGYoIkVSUk9SOiBDb3VsZG4ndCB1bmJs b2NrIFNJR1NFR1YgaGFuZGxlciAtLT4gZXhpdGluZ1xuIik7CgkJCQlleGl0KDEpOwoJCQl9 CgkJCXByaW50ZigiLi4uIGRvbmVcbiIpOwoJCX0KCX0KCglpZiAoIGVycm9yICkKCQlwcmlu dGYoIlxuXG5UZXN0IGVuZGVkIHdpdGggZXJyb3JzXG4iKTsKCWVsc2UKCQlwcmludGYoIlxu XG5UZXN0IGNvbXBsZXRlZCBzdWNjZXNzZnVsbHlcbiIpOwoKCXJldHVybiBlcnJvcjsKfQoA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA== --==_Exmh_6290712620--