From mboxrd@z Thu Jan 1 00:00:00 1970 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on inbox.vuxu.org X-Spam-Level: X-Spam-Status: No, score=0.2 required=5.0 tests=DKIM_INVALID,DKIM_SIGNED autolearn=no autolearn_force=no version=3.4.4 Received: (qmail 18998 invoked from network); 25 Mar 2023 05:25:02 -0000 Received: from 9front.inri.net (168.235.81.73) by inbox.vuxu.org with ESMTPUTF8; 25 Mar 2023 05:25:02 -0000 Received: from mail.posixcafe.org ([45.76.19.58]) by 9front; Sat Mar 25 01:23:22 -0400 2023 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=posixcafe.org; s=20200506; t=1679722137; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type; bh=7SNeWPlDSrK1bmVJNstnzrXLXLailGlxnoAzPCvc1Nc=; b=xt3Mi0ILBA8Mi9ZaaTMAqQiT4CyEY7fUuWRjV+0BK2xltSWDw5wO+fB0aJUFwTu+Wik/Wz 9BWPJvvgiO4dXms93GSGgPjqRArvkNswAMt00kJ2B8Hy7Hpk7om1DHOB34A8CKUS5pZ1vM yM7FKJ6mYqOKLNjZDNqLuSQB4DuMhXU= Received: from [192.168.168.200] (161-097-205-025.v4.mynextlight.net [161.97.205.25]) by mail.posixcafe.org (OpenSMTPD) with ESMTPSA id 05c2f26a (TLSv1.3:TLS_AES_256_GCM_SHA384:256:NO) for <9front@9front.org>; Sat, 25 Mar 2023 00:28:56 -0500 (CDT) Content-Type: multipart/mixed; boundary="------------lqF0Pv7xuUKvjWZxQscTAop0" Message-ID: Date: Fri, 24 Mar 2023 23:22:44 -0600 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.7.2 Content-Language: en-US To: 9front@9front.org From: Jacob Moody List-ID: <9front.9front.org> List-Help: X-Glyph: ➈ X-Bullshit: content-addressed standard-oriented optimizer Subject: [9front] [PATCH] Multi-rune grapheme routines Reply-To: 9front@9front.org Precedence: bulk This is a multi-part message in MIME format. --------------lqF0Pv7xuUKvjWZxQscTAop0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Hello, In working with unicode on our system there is one sticking point currently that I would like to address. This issue is with handling graphemes that span multiple runes. Grapheme here refers to one human perceived character. Unicode has a notion of 'composed' and 'decomposed' graphemes. For most of latin there are both options for example an A with a grave may either be: U+00C0 (À) or U+0041 U+0300 (À) In general we currently only support composed runes, and you will get a nice pjw for the trailing conjoining character. This is OK for most languages, as they provide both composed and decomposed variants. However, with more recent additions to Unicode they have favored only decomposed variants, Devanagari being one such example. Likewise newer emojis are also formed out of compositions of others. Now fully supporting this new multi rune world of Unicode is going to involve an editor that knows about their existence. While I do love our venerable pike text editing suite, I think the solution to some of these problems should be done in a new editor. So what I aim to do is provide library support to make handling this stuff easier for upcoming window manager and text editor developers. The full patch has grown a bit large, so I've attached it and opted to only provide the rendered man page for discussion in the body. The tables used for these routines are generated from the published Unicode standard database, they are nice to be provided in a awk'able txt format for the most part. Our /lib/unicode file itself is a slightly modified version of the UnicodeData.txt file. Since we use these tables for generation they will need to be included as well, for the sake of not making the patch unreadable they have been separated in to a another diff that I have posted here: https://posixcafe.org/_ucd.diff This also removes /lib/unicode in favor of using the official txt documents. Now these do add a bit of heft: % du -sh /lib/ucd 5.00977M /lib/ucd But I am inclined to think its worth the cost. The ucd diff also includes a mkfile that downloads these files from the official http sites, if we opted to not commit the txt files directly. Thankfully Unicode provides test files for verifying implementations of these routines, the test files are included in the previous summary of ucd files. I have added matching unit tests to use these files to verify our implementation. These test files cover all the functionality provided by these new routines. I have had these baking in my local tree for a bit now. If there are no complaints, I would like to commit these soon. Thank you, Jacob Moody RUNECOMP(2) RUNECOMP(2) NAME runecomp, runedecomp, fullrunenorm, runegbreak, runewbreak, utfcomp, utfdecomp, fullutfnorm, utfgbreak, utfwbreak - multi-rune graphemes SYNOPSIS #include #include int runecomp(Rune *dst, Rune *src, int max) int runedecomp(Rune *dst, Rune *src, int max) Rune* fullrunenorm(Rune *s, int n) Rune* runegbreak(Rune *s) Rune* runewbreak(Rune *s) int utfcomp(char *dst, char *src, int max) int utfdecomp(char *dst, char *src, int max) char* fullutfnorm(char *s, int n) char* utfgbreak(char *s) char* utfwbreak(char *s) DESCRIPTION These routines help in handling graphemes that may span mul- tiple runes. Runecomp, runedecomp, utfcomp, and utfdecomp perform Uni- code® normalization on src, storing the result in dst. No more than max elements will be written, and the resulting string will always be null terminated. The return value is always the total number of elements required to store the transformation. If this value is larger than the supplied max the caller can assume the result has been truncated. Runecomp and utfcomp perform NFC normalization while runedecomp and utfdecomp perform NFD normalization. Fullrunenorm, and fullutfnorm determine if enough elements are present in s to perform normalization. If enough are present, a pointer is returned to the first element that begins the next context. Otherwise s is returned. No more then n elements will be read. Runegbreak and utfgbreak search s for the next grapheme break opportunity. If none is found before the end of the string, s is returned. Runewbreak and utfwbreak search s for the next word break opportunity. If none is found before the end of the string, s is returned. SOURCE /sys/src/libc/port/mkrunetype.c /sys/src/libc/port/runenorm.c /sys/src/libc/port/runebreak.c SEE ALSO Unicode® Standard Annex #15 Unicode® Standard Annex #29 rune(2), utf(6), tcs(1) --------------lqF0Pv7xuUKvjWZxQscTAop0 Content-Type: multipart/mixed; boundary="upas-zvjieldmlifvvpzudqkmilbsnj" Content-Disposition: inline This is a multi-part message in MIME format. --upas-zvjieldmlifvvpzudqkmilbsnj Content-Disposition: inline Content-Type: text/plain; charset="US-ASCII" Content-Transfer-Encoding: 7bit from postmaster@9front: The following attachment had content that we can't prove to be harmless. To avoid possible automatic execution, we changed the content headers. The original header was: Content-Type: text/x-patch; charset=UTF-8; name="unicode.diff" Content-Disposition: attachment; filename="unicode.diff" Content-Transfer-Encoding: base64 --upas-zvjieldmlifvvpzudqkmilbsnj Content-Type: application/octet-stream Content-Disposition: attachment; filename="unicode.diff.suspect" Content-Transfer-Encoding: base64 ZGlmZiBiOGFlNzcwOGZiM2VmM2FjYmIzMGNjZjMxODE4OTdmODE1N2MxOGRlIHVuY29tbWl0 dGVkCi0tLSBhLy9zeXMvaW5jbHVkZS9saWJjLmgKKysrIGIvL3N5cy9pbmNsdWRlL2xpYmMu aApAQCAtNzcsNiArNzcsMTggQEAKIGV4dGVybglsb25nCXJ1bmVzdHJsZW4oUnVuZSopOwog ZXh0ZXJuCVJ1bmUqCXJ1bmVzdHJzdHIoUnVuZSosIFJ1bmUqKTsKIAorZXh0ZXJuCWludAly dW5lY29tcChSdW5lKiwgUnVuZSosIGludCk7CitleHRlcm4JaW50CXJ1bmVkZWNvbXAoUnVu ZSosIFJ1bmUqLCBpbnQpOworZXh0ZXJuCWludAl1dGZjb21wKGNoYXIqLCBjaGFyKiwgaW50 KTsKK2V4dGVybglpbnQJdXRmZGVjb21wKGNoYXIqLCBjaGFyKiwgaW50KTsKK2V4dGVybglj aGFyKglmdWxsdXRmbm9ybShjaGFyKixpbnQpOworZXh0ZXJuCVJ1bmUqCWZ1bGxydW5lbm9y bShSdW5lKixpbnQpOworCitleHRlcm4JUnVuZSoJcnVuZXdicmVhayhSdW5lKik7CitleHRl cm4JY2hhcioJdXRmd2JyZWFrKGNoYXIqKTsKK2V4dGVybglSdW5lKglydW5lZ2JyZWFrKFJ1 bmUqKTsKK2V4dGVybgljaGFyKgl1dGZnYnJlYWsoY2hhciopOworCiBleHRlcm4JUnVuZQl0 b2xvd2VycnVuZShSdW5lKTsKIGV4dGVybglSdW5lCXRvdGl0bGVydW5lKFJ1bmUpOwogZXh0 ZXJuCVJ1bmUJdG91cHBlcnJ1bmUoUnVuZSk7Ci0tLSBhLy9zeXMvbWFuLzIvaXNhbHBoYXJ1 bmUKKysrIGIvL3N5cy9tYW4vMi9pc2FscGhhcnVuZQpAQCAtNDgsNyArNDgsMTEgQEAKIC5Q UAogVGhlIGNhc2UtY29udmVyc2lvbiByb3V0aW5lcyByZXR1cm4gdGhlIGNoYXJhY3RlciB1 bmNoYW5nZWQgaWYgaXQgaGFzIG5vIGNhc2UuCiAuU0ggU09VUkNFCi0uQiAvc3lzL3NyYy9s aWJjL3BvcnQvcnVuZXR5cGUuYworLkIgL3N5cy9zcmMvbGliYy9wb3J0L21rcnVuZXR5cGUu YworLmJyCisuQiAvc3lzL3NyYy9saWJjL3BvcnQvcnVuZWlzdHlwZS5jCisuYnIKKy5CIC9z eXMvc3JjL2xpYmMvcG9ydC9ydW5ldG90eXBlLmMKIC5TSCAiU0VFIEFMU08KIC5JUiBjdHlw ZSAoMikgLAogLklSICJUaGUgVW5pY29kZSBTdGFuZGFyZCIgLgotLS0gL2Rldi9udWxsCisr KyBiLy9zeXMvbWFuLzIvcnVuZWNvbXAKQEAgLTEsMCArMSwxMTUgQEAKKy5USCBSVU5FQ09N UCAyCisuU0ggTkFNRQorcnVuZWNvbXAsIHJ1bmVkZWNvbXAsIGZ1bGxydW5lbm9ybSwgcnVu ZWdicmVhaywgcnVuZXdicmVhaywgdXRmY29tcCwgdXRmZGVjb21wLCBmdWxsdXRmbm9ybSwg dXRmZ2JyZWFrLCB1dGZ3YnJlYWsgXC0gbXVsdGktcnVuZSBncmFwaGVtZXMKKy5TSCBTWU5P UFNJUworLnRhIFx3J1xmTGNoYXIqeHgndQorLkIgI2luY2x1ZGUgPHUuaD4KKy5icgorLkIg I2luY2x1ZGUgPGxpYmMuaD4KKy5QUAorLkIKK2ludAlydW5lY29tcChSdW5lICpkc3QsIFJ1 bmUgKnNyYywgaW50IG1heCkKKy5QUAorLkIKK2ludAlydW5lZGVjb21wKFJ1bmUgKmRzdCwg UnVuZSAqc3JjLCBpbnQgbWF4KQorLlBQCisuQgorUnVuZSoJZnVsbHJ1bmVub3JtKFJ1bmUg KnMsIGludCBuKQorLlBQCisuQgorUnVuZSoJcnVuZWdicmVhayhSdW5lICpzKQorLlBQCisu QgorUnVuZSoJcnVuZXdicmVhayhSdW5lICpzKQorLlBQCisuQgoraW50CXV0ZmNvbXAoY2hh ciAqZHN0LCBjaGFyICpzcmMsIGludCBtYXgpCisuUFAKKy5CCitpbnQJdXRmZGVjb21wKGNo YXIgKmRzdCwgY2hhciAqc3JjLCBpbnQgbWF4KQorLlBQCisuQgorY2hhcioJZnVsbHV0Zm5v cm0oY2hhciAqcywgaW50IG4pCisuUFAKKy5CCitjaGFyKgl1dGZnYnJlYWsoY2hhciAqcykK Ky5QUAorLkIKK2NoYXIqCXV0ZndicmVhayhjaGFyICpzKQorLlNIIERFU0NSSVBUSU9OCitU aGVzZSByb3V0aW5lcyBoZWxwIGluIGhhbmRsaW5nCitncmFwaGVtZXMgdGhhdCBtYXkgc3Bh biBtdWx0aXBsZSBydW5lcy4KKy5QUAorLklSIFJ1bmVjb21wICwKKy5JUiBydW5lZGVjb21w ICwKKy5JUiB1dGZjb21wICwKK2FuZAorLkkgdXRmZGVjb21wCitwZXJmb3JtIFVuaWNvZGXC riBub3JtYWxpemF0aW9uIG9uCisuSVIgc3JjICwKK3N0b3JpbmcgdGhlIHJlc3VsdCBpbgor LklSIGRzdCAuCitObyBtb3JlIHRoYW4KKy5JIG1heAorZWxlbWVudHMgd2lsbCBiZSB3cml0 dGVuLCBhbmQgdGhlIHJlc3VsdGluZyBzdHJpbmcKK3dpbGwgYWx3YXlzIGJlIG51bGwgdGVy bWluYXRlZC4gVGhlIHJldHVybiB2YWx1ZQoraXMgYWx3YXlzIHRoZSB0b3RhbCBudW1iZXIg b2YgZWxlbWVudHMgcmVxdWlyZWQgdG8KK3N0b3JlIHRoZSB0cmFuc2Zvcm1hdGlvbi4gSWYg dGhpcyB2YWx1ZSBpcyBsYXJnZXIKK3RoYW4gdGhlIHN1cHBsaWVkCisuSSBtYXgKK3RoZSBj YWxsZXIgY2FuIGFzc3VtZSB0aGUgcmVzdWx0IGhhcyBiZWVuIHRydW5jYXRlZC4KKy5JIFJ1 bmVjb21wCithbmQKKy5JIHV0ZmNvbXAKK3BlcmZvcm0gTkZDIG5vcm1hbGl6YXRpb24gd2hp bGUKKy5JIHJ1bmVkZWNvbXAKK2FuZAorLkkgdXRmZGVjb21wCitwZXJmb3JtIE5GRCBub3Jt YWxpemF0aW9uLgorLlBQCisuSVIgRnVsbHJ1bmVub3JtICwKK2FuZAorLkkgZnVsbHV0Zm5v cm0KK2RldGVybWluZSBpZiBlbm91Z2ggZWxlbWVudHMgYXJlIHByZXNlbnQgaW4KKy5JIHMK K3RvIHBlcmZvcm0gbm9ybWFsaXphdGlvbi4gSWYgZW5vdWdoIGFyZSBwcmVzZW50LAorYSBw b2ludGVyIGlzIHJldHVybmVkIHRvIHRoZSBmaXJzdCBlbGVtZW50IHRoYXQgYmVnaW5zCit0 aGUgbmV4dCBjb250ZXh0LiBPdGhlcndpc2UKKy5JIHMKK2lzIHJldHVybmVkLiBObyBtb3Jl IHRoZW4KKy5JIG4KK2VsZW1lbnRzIHdpbGwgYmUgcmVhZC4KKy5QUAorLkkgUnVuZWdicmVh aworYW5kCisuSSB1dGZnYnJlYWsKK3NlYXJjaAorLkIgcworZm9yIHRoZSBuZXh0IGdyYXBo ZW1lIGJyZWFrIG9wcG9ydHVuaXR5LgorSWYgbm9uZSBpcyBmb3VuZCBiZWZvcmUgdGhlIGVu ZCBvZiB0aGUgc3RyaW5nLAorLkkgcworaXMgcmV0dXJuZWQuCisuUFAKKy5JIFJ1bmV3YnJl YWsKK2FuZAorLkkgdXRmd2JyZWFrCitzZWFyY2gKKy5CIHMKK2ZvciB0aGUgbmV4dCB3b3Jk IGJyZWFrIG9wcG9ydHVuaXR5LgorSWYgbm9uZSBpcyBmb3VuZCBiZWZvcmUgdGhlIGVuZCBv ZiB0aGUgc3RyaW5nLAorLkkgcworaXMgcmV0dXJuZWQuCisuU0ggU09VUkNFCisuQiAvc3lz L3NyYy9saWJjL3BvcnQvbWtydW5ldHlwZS5jCisuYnIKKy5CIC9zeXMvc3JjL2xpYmMvcG9y dC9ydW5lbm9ybS5jCisuYnIKKy5CIC9zeXMvc3JjL2xpYmMvcG9ydC9ydW5lYnJlYWsuYwor LlNIIFNFRSBBTFNPCitVbmljb2Rlwq4gU3RhbmRhcmQgQW5uZXggIzE1CisuYnIKK1VuaWNv ZGXCriBTdGFuZGFyZCBBbm5leCAjMjkKKy5icgorLklSIHJ1bmUgKDIpLAorLklSIHV0ZiAo NiksCisuSVIgdGNzICgxKQotLS0gYS8vc3lzL3NyYy9saWJjL3BvcnQvbWtmaWxlCisrKyBi Ly9zeXMvc3JjL2xpYmMvcG9ydC9ta2ZpbGUKQEAgLTYyLDYgKzYyLDkgQEAKIAlyYW5kLmNc CiAJcmVhZG4uY1wKIAlydW5lLmNcCisJcnVuZWJyZWFrLmNcCisJcnVuZWlzdHlwZS5jXAor CXJ1bmVub3JtLmNcCiAJcnVuZXN0cmNhdC5jXAogCXJ1bmVzdHJjaHIuY1wKIAlydW5lc3Ry Y21wLmNcCkBAIC03NCw3ICs3Nyw3IEBACiAJcnVuZXN0cnJjaHIuY1wKIAlydW5lc3RybGVu LmNcCiAJcnVuZXN0cnN0ci5jXAotCXJ1bmV0eXBlLmNcCisJcnVuZXRvdHlwZS5jXAogCXNp bi5jXAogCXNpbmguY1wKIAlzcXJ0LmNcCkBAIC0xMjcsMyArMTMwLDI2IEBACiA8L3N5cy9z cmMvY21kL21rc3lzbGliCiAKIHByb2ZpbGUuJE86IC9zeXMvaW5jbHVkZS90b3MuaAorCity dW5lbm9ybS4kTzoJcnVuZW5vcm1kYXRhIHJ1bmVub3JtLmMKK3J1bmV0b3R5cGUuJE86CXJ1 bmV0b3R5cGVkYXRhIHJ1bmV0b3R5cGUuYworcnVuZWlzdHlwZS4kTzoJcnVuZWlzdHlwZWRh dGEgcnVuZWlzdHlwZS5jCitydW5lYnJlYWsuJE86CXJ1bmVicmVha2RhdGEgcnVuZWJyZWFr LmMKKworVUNEPVwKKwkvbGliL3VjZC9Xb3JkQnJlYWtQcm9wZXJ0eS50eHRcCisJL2xpYi91 Y2QvR3JhcGhlbWVCcmVha1Byb3BlcnR5LnR4dFwKKwkvbGliL3VjZC9lbW9qaS1kYXRhLnR4 dFwKKwkvbGliL3VjZC9Db21wb3NpdGlvbkV4Y2x1c2lvbnMudHh0XAorCS9saWIvdWNkL1Vu aWNvZGVEYXRhLnR4dFwKKworL2xpYi91Y2QvJToKKwljZCAvbGliL3VjZCAmJiBtayAkc3Rl bQorCitydW5lbm9ybWRhdGEgcnVuZXRvdHlwZWRhdGEgcnVuZWlzdHlwZWRhdGEgcnVuZWJy ZWFrZGF0YToJbWtydW5ldHlwZS5jICRVQ0QKKwlAeworCQlldmFsIGB7Z3JlcCAnXltBLVpd JyAvJGNwdXR5cGUvbWtmaWxlfQorCQkkQ0MgJENGTEFHUyAtbyBta3J1bmV0eXBlLiRPIG1r cnVuZXR5cGUuYworCQkkTEQgJExERkxBR1MgLW8gJE8ubWtydW5ldHlwZSBta3J1bmV0eXBl LiRPCisJCSRPLm1rcnVuZXR5cGUKKwl9Ci0tLSAvZGV2L251bGwKKysrIGIvL3N5cy9zcmMv bGliYy9wb3J0L21rcnVuZXR5cGUuYwpAQCAtMSwwICsxLDc0OCBAQAorI2luY2x1ZGUgPHUu aD4KKyNpbmNsdWRlIDxsaWJjLmg+CisjaW5jbHVkZSA8YmlvLmg+CisKK2VudW17CisJTlJV TkVTID0gMTw8MjEKK307CisKK3R5cGVkZWYgc3RydWN0IFBhcmFtIFBhcmFtOwordHlwZWRl ZiBzdHJ1Y3QgTHZsIEx2bDsKK3N0cnVjdCBMdmx7CisJaW50IGJpdHM7CisJaW50IG1heDsK KwlpbnQgbWFzazsKK307CitzdHJ1Y3QgUGFyYW17CisJTHZsIGlkeDE7CisJTHZsIGlkeDI7 CisJTHZsIGRhdGE7CisKKwlpbnQgcm91bmQxbWF4OworfTsKKworc3RhdGljIHZvaWQKK2Rl cml2ZShMdmwgKmwpCit7CisJbC0+bWF4ID0gMSA8PCBsLT5iaXRzOworCWwtPm1hc2sgPSBs LT5tYXggLSAxOworfQorCitzdGF0aWMgdm9pZAorcGFyYW0oUGFyYW0gKnAsIGludCBpZHgx LCBpbnQgaWR4MikKK3sKKworCWFzc2VydChpZHgxICsgaWR4MiA8IDIxKTsKKwlwLT5pZHgx LmJpdHMgPSBpZHgxOworCXAtPmlkeDIuYml0cyA9IGlkeDI7CisJcC0+ZGF0YS5iaXRzID0g MjEgLSBpZHgxIC0gaWR4MjsKKwlkZXJpdmUoJnAtPmlkeDEpOworCWRlcml2ZSgmcC0+aWR4 Mik7CisJZGVyaXZlKCZwLT5kYXRhKTsKKworCXAtPnJvdW5kMW1heCA9IE5SVU5FUy9wLT5k YXRhLm1heDsKK30KKworc3RhdGljIGludAorbGt1cChQYXJhbSAqcCwgaW50ICppZHgxLCBp bnQgKmlkeDIsIGludCAqZGF0YSwgaW50IHgpCit7CisJaW50IHksIHo7CisKKwl5ID0gKCgo eCk+PihwLT5kYXRhLmJpdHMrcC0+aWR4Mi5iaXRzKSkmcC0+aWR4MS5tYXNrKTsKKwl6ID0g KCgoeCk+PnAtPmRhdGEuYml0cykmcC0+aWR4Mi5tYXNrKTsKKwlyZXR1cm4gZGF0YVtpZHgy W2lkeDFbeV0gKyB6XSArICh4JnAtPmRhdGEubWFzayldOworfQorCitzdGF0aWMgaW50Citt a2FycnZhcihpbnQgZmQsIGNoYXIgKm5hbWUsIGludCAqZCwgaW50IGxlbikKK3sKKwlpbnQg aSwgc3o7CisJaW50IG1heCwgbWluOworCWNoYXIgKnQ7CisKKwltYXggPSBtaW4gPSAwOwor CWZvcihpID0gMDsgaSA8IGxlbjsgaSsrKXsKKwkJaWYoZFtpXSA+IG1heCkKKwkJCW1heCA9 IGRbaV07CisJCWlmKGRbaV0gPCBtaW4pCisJCQltaW4gPSBkW2ldOworCX0KKwlpZihtaW4g PT0gMCl7CisJCWlmKG1heCA8IDB4RkYpCisJCQl0ID0gInVjaGFyIiwgc3ogPSAxOworCQll bHNlIGlmKG1heCA8IDB4RkZGRikKKwkJCXQgPSAidXNob3J0Iiwgc3ogPSAyOworCQllbHNl CisJCQl0ID0gInVpbnQiLCBzeiA9IDQ7CisJfSBlbHNlIHsKKwkJaWYobWF4IDwgMTw8NykK KwkJCXQgPSAiY2hhciIsIHN6ID0gMTsKKwkJZWxzZSBpZihtYXggPCAxPDwxNSkKKwkJCXQg PSAic2hvcnQiLCBzeiA9IDI7CisJCWVsc2UKKwkJCXQgPSAiaW50Iiwgc3ogPSA0OworCX0K KwlpZihmZCA8IDApCisJCXJldHVybiBzeiAqIGxlbjsKKworCWZwcmludChmZCwgInN0YXRp Y1xuJXNcdCVzWyVkXSA9XG57XG5cdCIsIHQsIG5hbWUsIGxlbik7CisJZm9yKGkgPSAwOyBp IDwgbGVuOyBpKyspeworCQlmcHJpbnQoZmQsICIlZCwiLCBkW2ldKTsKKwkJaWYoKGkrMSkg JSAxNiA9PSAwKQorCQkJZnByaW50KGZkLCAiXG5cdCIpOworCX0KKwlmcHJpbnQoZmQsICJc bn07XG4iKTsKKworCXJldHVybiBzeiAqIGxlbjsKK30KKworc3RhdGljIGludAorbWtleGNl cHRhcnIoaW50IGZkLCBjaGFyICpuYW1lLCBpbnQgKmQsIGludCBuLCBpbnQgYWxsKQorewor CWludCBpOworCWZwcmludChmZCwgInN0YXRpY1xuUnVuZSAlc1tdWyVkXSA9XG57XG5cdCIs IG5hbWUsIGFsbCA/IDMgOiAyKTsKKwlmb3IoaSA9IDA7IGkgPCBuKjM7IGkgKz0gMyl7CisJ CWlmKGFsbCAmJiBkW2ldICE9IDApCisJCQlmcHJpbnQoZmQsICJ7MHglWCwgMHglWCwgMHgl WH0sIiwgZFtpXSwgZFtpKzFdLCBkW2krMl0pOworCQllbHNlIGlmKCFhbGwpCisJCQlmcHJp bnQoZmQsICJ7MHglWCwgMHglWH0sIiwgZFtpKzFdLCBkW2krMl0pOwkKKwkJaWYoKGkrMykg JSAoOCozKSA9PSAwKQorCQkJZnByaW50KGZkLCAiXG5cdCIpOworCX0KKwlmcHJpbnQoZmQs ICJcbn07XG4iKTsKKwlyZXR1cm4gbiAqIHNpemVvZihSdW5lKSAqIDI7Cit9CisKK3N0YXRp YyBpbnQKK2NvbXBhY3QoaW50ICpkYXRhLCBpbnQgKmlkeCwgaW50IG5pZHgsIGludCAqc3Jj LCBpbnQgY2h1bmtzaXplKQoreworCWludCBpLCBuLCBuZGF0YSwgYmVzdDsKKwlpbnQgKmRv dCwgKmxwLCAqcnA7CisKKwlkb3QgPSBzcmM7CisJbmRhdGEgPSAwOworCWlkeFswXSA9IDA7 CisJZm9yKGkgPSAxOyBpIDw9IG5pZHg7IGkrKyl7CisJCXJwID0gZG90ICsgY2h1bmtzaXpl OworCQlscCA9IHJwIC0gMTsKKworCQlmb3IoYmVzdCA9IDAsIG4gPSAwOyBpICE9IG5pZHgg JiYgbiA8IGNodW5rc2l6ZTsgbisrLCBscC0tKXsKKwkJCWlmKG1lbWNtcChscCwgcnAsIChu KzEpICogc2l6ZW9mIGRhdGFbMF0pID09IDApCisJCQkJYmVzdCA9IG4rMTsKKwkJfQorCQlt ZW1tb3ZlKGRhdGEgKyBuZGF0YSwgZG90LCAoY2h1bmtzaXplIC0gYmVzdCkgKiBzaXplb2Yg ZGF0YVswXSk7CisJCW5kYXRhICs9IChjaHVua3NpemUgLSBiZXN0KTsKKwkJaWR4W2ldID0g aWR4W2kgLSAxXSArIChjaHVua3NpemUgLSBiZXN0KTsKKwkJZG90ID0gcnA7CisJfQorCXJl dHVybiBuZGF0YTsKK30KKworCitzdGF0aWMgaW50Citta2xrdXAoaW50IGZkLCBjaGFyICps YWJlbCwgaW50ICptYXAsIFBhcmFtICpwKQoreworCXN0YXRpYyBpbnQgZGF0YVtOUlVORVNd OworCXN0YXRpYyBpbnQgaWR4MltOUlVORVNdOworCXN0YXRpYyBpbnQgaWR4MmRlc3RbTlJV TkVTXTsKKwlzdGF0aWMgaW50IGlkeDFbTlJVTkVTXTsKKwlpbnQgaSwgbmlkeDIsIG5kYXRh OworCWludCBzaXplOworCisJbmRhdGEgPSBjb21wYWN0KGRhdGEsIGlkeDIsIHAtPnJvdW5k MW1heCwgbWFwLCBwLT5kYXRhLm1heCk7CisJbmlkeDIgPSBjb21wYWN0KGlkeDJkZXN0LCBp ZHgxLCBwLT5pZHgxLm1heCwgaWR4MiwgcC0+aWR4Mi5tYXgpOworCisJaWYoZmQgPj0gMCl7 CisJCWZvcihpID0gMDsgaSA8IE5SVU5FUzsgaSsrKQorCQkJaWYobWFwW2ldICE9IGxrdXAo cCwgaWR4MSwgaWR4MmRlc3QsIGRhdGEsIGkpKQorCQkJCXN5c2ZhdGFsKCJtaXNtYXRjaCBp biAlcyBhdCAlZCAlZCAlZFxuIiwgbGFiZWwsIGksIG1hcFtpXSwgbGt1cChwLCBpZHgxLCBp ZHgyZGVzdCwgZGF0YSwgaSkpOworCX0KKworCXNpemUgPSBta2FycnZhcihmZCwgc21wcmlu dCgiXyVzZGF0YSIsIGxhYmVsKSwgZGF0YSwgbmRhdGEpOworCXNpemUgKz0gbWthcnJ2YXIo ZmQsIHNtcHJpbnQoIl8lc2lkeDIiLCBsYWJlbCksIGlkeDJkZXN0LCBuaWR4Mik7CisJc2l6 ZSArPSBta2FycnZhcihmZCwgc21wcmludCgiXyVzaWR4MSIsIGxhYmVsKSwgaWR4MSwgcC0+ aWR4MS5tYXgpOworCWlmKGZkID49IDApeworCQlmcHJpbnQoZmQsICJcbiIpOworCQlmcHJp bnQoZmQsICIjZGVmaW5lICVzaW5kZXgxKHgpICgoKHgpPj4oJWQrJWQpKSYweCVYKVxuIiwg bGFiZWwsIHAtPmRhdGEuYml0cywgcC0+aWR4Mi5iaXRzLCBwLT5pZHgxLm1hc2spOworCQlm cHJpbnQoZmQsICIjZGVmaW5lICVzaW5kZXgyKHgpICgoKHgpPj4lZCkmMHglWClcbiIsIGxh YmVsLCBwLT5kYXRhLmJpdHMsIHAtPmlkeDIubWFzayk7CisJCWZwcmludChmZCwgIiNkZWZp bmUgJXNvZmZzZXQoeCkgKCh4KSYweCVYKVxuIiwgbGFiZWwsIHAtPmRhdGEubWFzayk7CisJ CWZwcmludChmZCwgIiNkZWZpbmUgJXNsa3VwKHgpIChfJXNkYXRhW18lc2lkeDJbXyVzaWR4 MVslc2luZGV4MSh4KV0gKyAlc2luZGV4Mih4KV0gKyAlc29mZnNldCh4KV0gKVxuXG4iLAor CQkJbGFiZWwsIGxhYmVsLCBsYWJlbCwgbGFiZWwsIGxhYmVsLCBsYWJlbCwgbGFiZWwpOwor CX0KKwlyZXR1cm4gc2l6ZTsKK30KKworc3RhdGljIHZvaWQKK21rbGt1cG1hdHJpeChjaGFy ICpsYWJlbCwgaW50ICptYXAsIFBhcmFtICpwKQoreworCWludCBiZXN0c2l6ZSwgc2l6ZSwg YmVzdHgsIGJlc3R5OworCWludCB4LCB5OworCisJYmVzdHNpemUgPSBiZXN0eCA9IGJlc3R5 ID0gLTE7CisJZm9yKHggPSA0OyB4IDw9IDEyOyB4KyspCisJCWZvcih5PTQ7IHkgPD0gKDE5 IC0geCk7IHkrKyl7CisJCQlwYXJhbShwLCB4LCB5KTsKKwkJCXNpemUgPSBta2xrdXAoLTEs IGxhYmVsLCBtYXAsIHApOworCQkJaWYoYmVzdHNpemUgPT0gLTEgfHwgc2l6ZSA8IGJlc3Rz aXplKXsKKwkJCQliZXN0eCA9IHg7CisJCQkJYmVzdHkgPSB5OworCQkJCWJlc3RzaXplID0g c2l6ZTsKKwkJCX0KKwkJfQorCisJYXNzZXJ0KGJlc3RzaXplICE9IC0xKTsKKwlmcHJpbnQo MiwgImxhYmVsOiAlcyBiZXN0OiAlZCAlZCAoJWQpXG4iLCBsYWJlbCwgYmVzdHgsIGJlc3R5 LCBiZXN0c2l6ZSk7CisJcGFyYW0ocCwgYmVzdHgsIGJlc3R5KTsKK30KKworc3RhdGljIGlu dCBteWlzbWVyZ2VkW05SVU5FU107CitzdGF0aWMgaW50IG15dG91cHBlcltOUlVORVNdOwor c3RhdGljIGludCBteXRvbG93ZXJbTlJVTkVTXTsKK3N0YXRpYyBpbnQgbXl0b3RpdGxlW05S VU5FU107CitzdGF0aWMgaW50IG15YnJlYWtbTlJVTkVTXTsKKworZW51bXsgRFNUQVJUID0g MHhFRUVFIH07CitzdGF0aWMgaW50IG15ZGVjb21wW05SVU5FU107CitzdGF0aWMgaW50IG15 ZGVzcGVjaWFsWzI1NiozXTsKK3N0YXRpYyBpbnQgbnNwZWNpYWw7CitzdGF0aWMgaW50IG15 Y2NjW05SVU5FU107CisKK3R5cGVkZWYgc3RydWN0IEtWIEtWOworc3RydWN0IEtWeworCXVp bnQga2V5OworCXVpbnQgdmFsOworCXVzaG9ydCBuZXh0OworfTsKKworc3RhdGljIEtWIG15 cmVjb21wWzIwMDBdOworc3RhdGljIGludCBucmVjb21wOworCitzdGF0aWMgaW50IHJlY29t cGV4dFsyNTYqM107CitzdGF0aWMgaW50IG5yZWNvbXBleHQ7CisKK3N0YXRpYyB1aW50Cito YXNoKHVpbnQgeCkKK3sKKwl4IF49IHggPj4gMTY7CisJeCAqPSAweDIxZjBhYWFkOworCXgg Xj0geCA+PiAxNTsKKwl4ICo9IDB4ZDM1YTJkOTc7CisJeCBePSB4ID4+IDE1OworCXJldHVy biB4OworfQorCitzdGF0aWMgdm9pZAorbWtyZWNvbXAoaW50IGZkKQoreworCWludCBpOwor CUtWICpwOworCXN0YXRpYyBLViB2YWxzWzUxMl07CisJc3RhdGljIEtWIGNvbGxbMTAwMF07 CisJaW50IG92ZXI7CisJaW50IG1heGNoYWluOworCisJZm9yKGkgPSAwOyBpIDwgbmVsZW0o dmFscyk7IGkrKykKKwkJdmFsc1tpXSA9IChLVil7MCwgMCwgMH07CisJZm9yKGkgPSAwOyBp IDwgbmVsZW0oY29sbCk7IGkrKykKKwkJY29sbFtpXSA9IChLVil7MCwgMCwgMH07CisJb3Zl ciA9IDE7CisJZm9yKGkgPSAwOyBpIDwgbnJlY29tcDsgaSsrKXsKKwkJcCA9IHZhbHMgKyAo aGFzaChteXJlY29tcFtpXS5rZXkpICUgbmVsZW0odmFscykpOworCQltYXhjaGFpbiA9IDA7 CisJCXdoaWxlKHAtPmtleSAhPSAwKXsKKwkJCW1heGNoYWluKys7CisJCQlpZihwLT5uZXh0 ID09IDApeworCQkJCXAtPm5leHQgPSBvdmVyOworCQkJCXAgPSBjb2xsICsgb3ZlciAtIDE7 CisJCQkJb3ZlcisrOworCQkJfSBlbHNlCisJCQkJcCA9IGNvbGwgKyBwLT5uZXh0IC0gMTsK KwkJfQorCQlwLT5rZXkgPSBteXJlY29tcFtpXS5rZXk7CisJCXAtPnZhbCA9IG15cmVjb21w W2ldLnZhbDsKKwl9CisJZnByaW50KDIsICJyZWNvbXAgbWFwIFslZF1bJWRdOiAlZFxuIiwg bmVsZW0odmFscyksIG92ZXItMSwgKG5lbGVtKHZhbHMpICsgb3Zlci0xKSAqICg0KzIrMikp OworCWZwcmludChmZCwgInN0YXRpY1xudWludFx0X3JlY29tcGRhdGFbXSA9XG57XG5cdCIp OworCWZvcihwID0gdmFscywgaSA9IDA7OyBpKyspeworCQlhc3NlcnQocC0+dmFsIDwgMHhG RkZGKTsKKwkJYXNzZXJ0KHAtPm5leHQgPCAweEZGRkYpOworCQlmcHJpbnQoZmQsICIldWRV LCV1ZFUsIiwgcC0+a2V5LCBwLT52YWwgfCAocC0+bmV4dDw8MTYpKTsKKwkJaWYoKGkrMSkg JSA4ID09IDApCisJCQlmcHJpbnQoZmQsICJcblx0Iik7CisKKwkJaWYocCA9PSB2YWxzK25l bGVtKHZhbHMpLTEpCisJCQlwID0gY29sbDsKKwkJZWxzZSBpZihwID09IGNvbGwgKyBvdmVy IC0gMikKKwkJCWJyZWFrOworCQllbHNlCisJCQlwKys7CisJfQorCWZwcmludChmZCwgIlxu fTtcbiIpOworCWZwcmludChmZCwgInN0YXRpYyB1aW50ICpfcmVjb21wY29sbCA9IF9yZWNv bXBkYXRhKyVkKjI7XG4iLCBuZWxlbSh2YWxzKSk7Cit9CisKK3N0YXRpYyB2b2lkCitta3Rh Ymxlcyh2b2lkKQoreworCVBhcmFtIHA7CisJaW50IHRvZmQsIGlzZmQsIG5vcm1mZCwgYnJl YWtmZDsKKwlpbnQgc2l6ZTsKKworCXRvZmQgPSBjcmVhdGUoInJ1bmV0b3R5cGVkYXRhIiwg T1dSSVRFLCAwNjY0KTsKKwlpZih0b2ZkIDwgMCkKKwkJc3lzZmF0YWwoImNvdWxkIG5vdCBj cmVhdGUgcnVuZXRvdHlwZWRhdGE6ICVyIik7CisJcGFyYW0oJnAsIDEwLCA3KTsKKwlzaXpl ID0gbWtsa3VwKHRvZmQsICJ1cHBlciIsIG15dG91cHBlciwgJnApOworCWZwcmludCgyLCAi JXM6ICVkXG4iLCAidXBwZXIiLCBzaXplKTsKKworCXNpemUgPSBta2xrdXAodG9mZCwgImxv d2VyIiwgbXl0b2xvd2VyLCAmcCk7CisJZnByaW50KDIsICIlczogJWRcbiIsICJsb3dlciIs IHNpemUpOworCisJc2l6ZSA9IG1rbGt1cCh0b2ZkLCAidGl0bGUiLCBteXRvdGl0bGUsICZw KTsKKwlmcHJpbnQoMiwgIiVzOiAlZFxuIiwgInRpdGxlIiwgc2l6ZSk7CisJY2xvc2UodG9m ZCk7CisKKwlpc2ZkID0gY3JlYXRlKCJydW5laXN0eXBlZGF0YSIsIE9XUklURSwgMDY2NCk7 CisJaWYoaXNmZCA8IDApCisJCXN5c2ZhdGFsKCJjb3VsZCBub3QgY3JlYXRlIHJ1bmVpc3R5 cGVkYXRhOiAlciIpOworCXBhcmFtKCZwLCAxMSwgNik7CisJc2l6ZSA9IG1rbGt1cChpc2Zk LCAibWVyZ2VkIiwgbXlpc21lcmdlZCwgJnApOworCWZwcmludCgyLCAiJXM6ICVkXG4iLCAi bWVyZ2VkIiwgc2l6ZSk7CisJZnByaW50KGlzZmQsICJzdGF0aWNcbmVudW0ge1xuIik7CisJ ZnByaW50KGlzZmQsICJcdEwlcyA9ICVzLFxuIiwgInNwYWNlIiwgIjE8PDAiKTsKKwlmcHJp bnQoaXNmZCwgIlx0TCVzID0gJXMsXG4iLCAiYWxwaGEiLCAiMTw8MSIpOworCWZwcmludChp c2ZkLCAiXHRMJXMgPSAlcyxcbiIsICJkaWdpdCIsICIxPDwyIik7CisJZnByaW50KGlzZmQs ICJcdEwlcyA9ICVzLFxuIiwgInVwcGVyIiwgIjE8PDMiKTsKKwlmcHJpbnQoaXNmZCwgIlx0 TCVzID0gJXMsXG4iLCAibG93ZXIiLCAiMTw8NCIpOworCWZwcmludChpc2ZkLCAiXHRMJXMg PSAlcyxcbiIsICJ0aXRsZSIsICIxPDw1Iik7CisJZnByaW50KGlzZmQsICJ9O1xuIik7CisJ Y2xvc2UoaXNmZCk7CisKKwlub3JtZmQgPSBjcmVhdGUoInJ1bmVub3JtZGF0YSIsIE9XUklU RSwgMDY2NCk7CisJaWYobm9ybWZkIDwgMCkKKwkJc3lzZmF0YWwoImNvdWxkIG5vdCBjcmVh dGUgcnVuZW5vcm1kYXRhOiAlciIpOworCXBhcmFtKCZwLCAxMCwgNyk7CisJc2l6ZSA9IG1r bGt1cChub3JtZmQsICJkZWNvbXAiLCBteWRlY29tcCwgJnApOworCWZwcmludCgyLCAiJXM6 ICVkXG4iLCAiZGVjb21wIiwgc2l6ZSk7CisKKwlwYXJhbSgmcCwgOSwgNyk7CisJc2l6ZSA9 IG1rbGt1cChub3JtZmQsICJjY2MiLCBteWNjYywgJnApOworCWZwcmludCgyLCAiJXM6ICVk XG4iLCAiY2NjIiwgc2l6ZSk7CisKKwlta2V4Y2VwdGFycihub3JtZmQsICJfZGVjb21wZXhj ZXB0aW9ucyIsIG15ZGVzcGVjaWFsLCBuc3BlY2lhbCwgMCk7CisJbWtleGNlcHRhcnIobm9y bWZkLCAiX3JlY29tcGV4Y2VwdGlvbnMiLCByZWNvbXBleHQsIG5yZWNvbXBleHQsIDEpOwor CW1rcmVjb21wKG5vcm1mZCk7CisJY2xvc2Uobm9ybWZkKTsKKworCXBhcmFtKCZwLCAxMCwg Nik7CisJYnJlYWtmZCA9IGNyZWF0ZSgicnVuZWJyZWFrZGF0YSIsIE9XUklURSwgMDY0NCk7 CisJaWYoYnJlYWtmZCA8IDApCisJCXN5c2ZhdGFsKCJjb3VsZCBub3QgY3JlYXRlIHJ1bmVi cmVha2RhdGE6ICVyIik7CisJc2l6ZSA9IG1rbGt1cChicmVha2ZkLCAiYnJlYWsiLCBteWJy ZWFrLCAmcCk7CisJZnByaW50KDIsICIlczogJWRcbiIsICJicmVhayIsIHNpemUpOworfQor CitlbnVtIHsKKwlGSUVMRF9DT0RFLAorCUZJRUxEX05BTUUsCisJRklFTERfQ0FURUdPUlks CisJRklFTERfQ09NQklOSU5HLAorCUZJRUxEX0JJRElSLAorCUZJRUxEX0RFQ09NUCwKKwlG SUVMRF9ERUNJTUFMX0RJRywKKwlGSUVMRF9ESUcsCisJRklFTERfTlVNRVJJQ19WQUwsCisJ RklFTERfTUlSUk9SRUQsCisJRklFTERfVU5JQ09ERV8xX05BTUUsCisJRklFTERfQ09NTUVO VCwKKwlGSUVMRF9VUFBFUiwKKwlGSUVMRF9MT1dFUiwKKwlGSUVMRF9USVRMRSwKKwlORklF TERTLAorfTsKKworc3RhdGljIGludAorZ2V0dW5pY29kZWxpbmUoQmlvYnVmICppbiwgY2hh ciAqKmZpZWxkcykKK3sKKwljaGFyICpwOworCisJaWYoKHAgPSBCcmRsaW5lKGluLCAnXG4n KSkgPT0gbmlsKQorCQlyZXR1cm4gMDsKKworCXBbQmxpbmVsZW4oaW4pLTFdID0gJ1wwJzsK KworCWlmIChnZXRmaWVsZHMocCwgZmllbGRzLCBORklFTERTICsgMSwgMCwgIjsiKSAhPSBO RklFTERTKQorCQlzeXNmYXRhbCgiYmFkIG51bWJlciBvZiBmaWVsZHMiKTsKKworCXJldHVy biAxOworfQorCitzdGF0aWMgaW50Citlc3RydG91bChjaGFyICpzLCBpbnQgYmFzZSkKK3sK KwljaGFyICplcHI7CisJUnVuZSBjb2RlOworCisJY29kZSA9IHN0cnRvdWwocywgJmVwciwg YmFzZSk7CisJaWYocyA9PSBlcHIpCisJCXN5c2ZhdGFsKCJiYWQgY29kZSBwb2ludCBoZXgg c3RyaW5nIik7CisJcmV0dXJuIGNvZGU7Cit9CisKK2VudW0geworCU9USEVSLCAKKwlIZWJy ZXdfTGV0dGVyLCBOZXdsaW5lLCBFeHRlbmQsIEZvcm1hdCwKKwlLYXRha2FuYSwgQUxldHRl ciwgTWlkTGV0dGVyLCBNaWROdW0sCisJTWlkTnVtTGV0LCBOdW1lcmljLCBFeHRlbmROdW1M ZXQsIFdTZWdTcGFjZSwKKwlQUkVQRU5EID0gMHgxMCwgQ09OVFJPTCA9IDB4MjAsIEVYVEVO RCA9IDB4MzAsIFJFR0lPTiA9IDB4NDAsCisJTCA9IDB4NTAsIFYgPSAweDYwLCBUID0gMHg3 MCwgTFYgPSAweDgwLCBMVlQgPSAweDkwLCBTUEFDRU1LID0gMHhBMCwKKwlFTU9KSUVYID0g MHhCMCwKK307CisKK3N0YXRpYyB2b2lkCittYXJrYnJlYWsodm9pZCkKK3sKKwlCaW9idWYg KmI7CisJY2hhciAqcCwgKmRvdDsKKwlpbnQgaSwgcywgZTsKKwl1Y2hhciB2OworCisJYiA9 IEJvcGVuKCIvbGliL3VjZC9Xb3JkQnJlYWtQcm9wZXJ0eS50eHQiLCBPUkVBRCk7CisJaWYo YiA9PSBuaWwpCisJCXN5c2ZhdGFsKCJjb3VsZCBub3QgbG9hZCB3b3JkIGJyZWFrczogJXIi KTsKKworCXdoaWxlKChwID0gQnJkbGluZShiLCAnXG4nKSkgIT0gbmlsKXsKKwkJcFtCbGlu ZWxlbihiKS0xXSA9IDA7CisJCWlmKHBbMF0gPT0gMCB8fCBwWzBdID09ICcjJykKKwkJCWNv bnRpbnVlOworCQlpZigoZG90ID0gc3Ryc3RyKHAsICIuLiIpKSAhPSBuaWwpeworCQkJKmRv dCA9IDA7CisJCQlkb3QgKz0gMjsKKwkJCXMgPSBlc3RydG91bChwLCAxNik7CisJCQllID0g ZXN0cnRvdWwoZG90LCAxNik7CisJCX0gZWxzZSB7CisJCQlzID0gZSA9IGVzdHJ0b3VsKHAs IDE2KTsKKwkJCWRvdCA9IHA7CisJCX0KKwkJdiA9IDA7CisJCWlmKHN0cnN0cihkb3QsICJF eHRlbmROdW1MZXQiKSAhPSBuaWwpCisJCQl2ID0gRXh0ZW5kTnVtTGV0OworCQllbHNlIGlm KHN0cnN0cihkb3QsICJIZWJyZXdfTGV0dGVyIikgIT0gbmlsKQorCQkJdiA9IEhlYnJld19M ZXR0ZXI7CisJCWVsc2UgaWYoc3Ryc3RyKGRvdCwgIk5ld2xpbmUiKSAhPSBuaWwpCisJCQl2 ID0gTmV3bGluZTsKKwkJZWxzZSBpZihzdHJzdHIoZG90LCAiRXh0ZW5kIikgIT0gbmlsKQor CQkJdiA9IEV4dGVuZDsKKwkJZWxzZSBpZihzdHJzdHIoZG90LCAiRm9ybWF0IikgIT0gbmls KQorCQkJdiA9IEZvcm1hdDsKKwkJZWxzZSBpZihzdHJzdHIoZG90LCAiS2F0YWthbmEiKSAh PSBuaWwpCisJCQl2ID0gS2F0YWthbmE7CisJCWVsc2UgaWYoc3Ryc3RyKGRvdCwgIkFMZXR0 ZXIiKSAhPSBuaWwpCisJCQl2ID0gQUxldHRlcjsKKwkJZWxzZSBpZihzdHJzdHIoZG90LCAi TWlkTGV0dGVyIikgIT0gbmlsKQorCQkJdiA9IE1pZExldHRlcjsKKwkJZWxzZSBpZihzdHJz dHIoZG90LCAiTWlkTnVtIikgIT0gbmlsKQorCQkJdiA9IE1pZE51bTsKKwkJZWxzZSBpZihz dHJzdHIoZG90LCAiTnVtZXJpYyIpICE9IG5pbCkKKwkJCXYgPSBOdW1lcmljOworCQllbHNl IGlmKHN0cnN0cihkb3QsICJXU2VnU3BhY2UiKSAhPSBuaWwpCisJCQl2ID0gV1NlZ1NwYWNl OworCQlmb3IoaSA9IHM7IGkgPD0gZTsgaSsrKQorCQkJbXlicmVha1tpXSA9IHY7CisJfQor CUJ0ZXJtKGIpOworCWIgPSBCb3BlbigiL2xpYi91Y2QvR3JhcGhlbWVCcmVha1Byb3BlcnR5 LnR4dCIsIE9SRUFEKTsKKwlpZihiID09IG5pbCkKKwkJc3lzZmF0YWwoImNvdWxkIG5vdCBs b2FkIEdyYXBoZW1lIGJyZWFrczogJXIiKTsKKworCXdoaWxlKChwID0gQnJkbGluZShiLCAn XG4nKSkgIT0gbmlsKXsKKwkJcFtCbGluZWxlbihiKS0xXSA9IDA7CisJCWlmKHBbMF0gPT0g MCB8fCBwWzBdID09ICcjJykKKwkJCWNvbnRpbnVlOworCQlpZigoZG90ID0gc3Ryc3RyKHAs ICIuLiIpKSAhPSBuaWwpeworCQkJKmRvdCA9IDA7CisJCQlkb3QgKz0gMjsKKwkJCXMgPSBl c3RydG91bChwLCAxNik7CisJCQllID0gZXN0cnRvdWwoZG90LCAxNik7CisJCX0gZWxzZSB7 CisJCQlzID0gZSA9IGVzdHJ0b3VsKHAsIDE2KTsKKwkJCWRvdCA9IHA7CisJCX0KKwkJdiA9 IDA7CisJCWlmKHN0cnN0cihkb3QsICI7IFByZXBlbmQgIyIpICE9IG5pbCkKKwkJCXYgPSBQ UkVQRU5EOworCQllbHNlIGlmKHN0cnN0cihkb3QsICI7IENvbnRyb2wgIyIpICE9IG5pbCkK KwkJCXYgPSBDT05UUk9MOworCQllbHNlIGlmKHN0cnN0cihkb3QsICI7IEV4dGVuZCAjIikg IT0gbmlsKQorCQkJdiA9IEVYVEVORDsKKwkJZWxzZSBpZihzdHJzdHIoZG90LCAiOyBSZWdp b25hbF9JbmRpY2F0b3IgIyIpICE9IG5pbCkKKwkJCXYgPSBSRUdJT047CisJCWVsc2UgaWYo c3Ryc3RyKGRvdCwgIjsgU3BhY2luZ01hcmsgIyIpICE9IG5pbCkKKwkJCXYgPSBTUEFDRU1L OworCQllbHNlIGlmKHN0cnN0cihkb3QsICI7IEwgIyIpICE9IG5pbCkKKwkJCXYgPSBMOwor CQllbHNlIGlmKHN0cnN0cihkb3QsICI7IFYgIyIpICE9IG5pbCkKKwkJCXYgPSBWOworCQll bHNlIGlmKHN0cnN0cihkb3QsICI7IFQgIyIpICE9IG5pbCkKKwkJCXYgPSBUOworCQllbHNl IGlmKHN0cnN0cihkb3QsICI7IExWICMiKSAhPSBuaWwpCisJCQl2ID0gTFY7CisJCWVsc2Ug aWYoc3Ryc3RyKGRvdCwgIjsgTFZUICMiKSAhPSBuaWwpCisJCQl2ID0gTFZUOworCQlmb3Io aSA9IHM7IGkgPD0gZTsgaSsrKQorCQkJbXlicmVha1tpXSB8PSB2OworCX0KKwlCdGVybShi KTsKKworCWIgPSBCb3BlbigiL2xpYi91Y2QvZW1vamktZGF0YS50eHQiLCBPUkVBRCk7CisJ aWYoYiA9PSBuaWwpCisJCXN5c2ZhdGFsKCJjb3VsZCBub3QgbG9hZCBlbW9qaS1kYXRhOiAl ciIpOworCisJd2hpbGUoKHAgPSBCcmRsaW5lKGIsICdcbicpKSAhPSBuaWwpeworCQlwW0Js aW5lbGVuKGIpLTFdID0gMDsKKwkJaWYocFswXSA9PSAwIHx8IHBbMF0gPT0gJyMnKQorCQkJ Y29udGludWU7CisJCWlmKChkb3QgPSBzdHJzdHIocCwgIi4uIikpICE9IG5pbCl7CisJCQkq ZG90ID0gMDsKKwkJCWRvdCArPSAyOworCQkJcyA9IGVzdHJ0b3VsKHAsIDE2KTsKKwkJCWUg PSBlc3RydG91bChkb3QsIDE2KTsKKwkJfSBlbHNlIHsKKwkJCXMgPSBlID0gZXN0cnRvdWwo cCwgMTYpOworCQkJZG90ID0gcDsKKwkJfQorCQl2ID0gMDsKKwkJaWYoc3Ryc3RyKGRvdCwg IjsgRXh0ZW5kZWRfUGljdG9ncmFwaGljIikgIT0gbmlsKQorCQkJdiA9IEVNT0pJRVg7CisJ CWZvcihpID0gczsgaSA8PSBlOyBpKyspCisJCQlteWJyZWFrW2ldIHw9IHY7CisJfQorCUJ0 ZXJtKGIpOworfQorCitzdGF0aWMgdm9pZAorbWFya2V4Y2x1c2lvbnModm9pZCkKK3sKKwlC aW9idWYgKmI7CisJY2hhciAqcDsKKwlpbnQgaTsKKwl1aW50IHg7CisKKwliID0gQm9wZW4o Ii9saWIvdWNkL0NvbXBvc2l0aW9uRXhjbHVzaW9ucy50eHQiLCBPUkVBRCk7CisJaWYoYiA9 PSBuaWwpCisJCXN5c2ZhdGFsKCJjb3VsZCBub3QgbG9hZCBjb21wb3NpdGlvbiBleGNsdXNp b25zOiAlciIpOworCisJd2hpbGUoKHAgPSBCcmRsaW5lKGIsICdcbicpKSAhPSBuaWwpewor CQlwW0JsaW5lbGVuKGIpLTFdID0gMDsKKwkJaWYocFswXSA9PSAwIHx8IHBbMF0gPT0gJyMn KQorCQkJY29udGludWU7CisJCXggPSBlc3RydG91bChwLCAxNik7CisJCWZvcihpID0gMDsg aSA8IG5yZWNvbXA7IGkrKyl7CisJCQlpZihteXJlY29tcFtpXS52YWwgPT0geCl7CisJCQkJ bXlyZWNvbXBbaV0udmFsID0gMDsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCQlpZihpID09 IG5yZWNvbXApeworCQkJZm9yKGkgPSAwOyBpIDwgbnJlY29tcGV4dDsgaSsrKXsKKwkJCQlp ZihyZWNvbXBleHRbaSozXSA9PSB4KXsKKwkJCQkJcmVjb21wZXh0W2kqM10gPSAwOworCQkJ CQlicmVhazsKKwkJCQl9CisJCQl9CisJCX0KKwl9CisJQnRlcm0oYik7Cit9CisKK3ZvaWQK K21haW4oaW50LCBjaGFyKQoreworCXN0YXRpYyBjaGFyIG15aXNzcGFjZVtOUlVORVNdOwor CXN0YXRpYyBjaGFyIG15aXNhbHBoYVtOUlVORVNdOworCXN0YXRpYyBjaGFyIG15aXNkaWdp dFtOUlVORVNdOworCXN0YXRpYyBjaGFyIG15aXN1cHBlcltOUlVORVNdOworCXN0YXRpYyBj aGFyIG15aXNsb3dlcltOUlVORVNdOworCXN0YXRpYyBjaGFyIG15aXN0aXRsZVtOUlVORVNd OworCUJpb2J1ZiAqaW47CisJY2hhciAqZmllbGRzW05GSUVMRFMgKyAxXSwgKmZpZWxkczJb TkZJRUxEUyArIDFdOworCWNoYXIgKnAsICpkOworCWludCBpLCBjb2RlLCBsYXN0OworCWlu dCBkZWNvbXBbMl0sICppcDsKKworCWluID0gQm9wZW4oIi9saWIvdWNkL1VuaWNvZGVEYXRh LnR4dCIsIE9SRUFEKTsKKwlpZihpbiA9PSBuaWwpCisJCXN5c2ZhdGFsKCJjYW4ndCBvcGVu IFVuaWNvZGVEYXRhLnR4dDogJXIiKTsKKworCWZvcihpID0gMDsgaSA8IE5SVU5FUzsgaSsr KXsKKwkJbXl0b3VwcGVyW2ldID0gLTE7CisJCW15dG9sb3dlcltpXSA9IC0xOworCQlteXRv dGl0bGVbaV0gPSAtMTsKKwkJbXlkZWNvbXBbaV0gPSAwOworCQlteWNjY1tpXSA9IDA7CisJ CW15YnJlYWtbaV0gPSAwOworCX0KKworCW15aXNzcGFjZVsnXHQnXSA9IDE7CisJbXlpc3Nw YWNlWydcbiddID0gMTsKKwlteWlzc3BhY2VbJ1xyJ10gPSAxOworCW15aXNzcGFjZVsnXGYn XSA9IDE7CisJbXlpc3NwYWNlWydcdiddID0gMTsKKwlteWlzc3BhY2VbMHg4NV0gPSAxOwkv KiBjb250cm9sIGNoYXIsICJuZXh0IGxpbmUiICovCisJbXlpc3NwYWNlWzB4ZmVmZl0gPSAx OwkvKiB6ZXJvLXdpZHRoIG5vbi1icmVhayBzcGFjZSAqLworCisJbGFzdCA9IC0xOworCW5z cGVjaWFsID0gbnJlY29tcCA9IG5yZWNvbXBleHQgPSAgMDsKKwl3aGlsZShnZXR1bmljb2Rl bGluZShpbiwgZmllbGRzKSl7CisJCWNvZGUgPSBlc3RydG91bChmaWVsZHNbRklFTERfQ09E RV0sIDE2KTsKKwkJaWYgKGNvZGUgPj0gTlJVTkVTKQorCQkJc3lzZmF0YWwoImNvZGUtcG9p bnQgdmFsdWUgdG9vIGJpZzogJXgiLCBjb2RlKTsKKwkJaWYoY29kZSA8PSBsYXN0KQorCQkJ c3lzZmF0YWwoImJhZCBjb2RlIHNlcXVlbmNlOiAleCB0aGVuICV4IiwgbGFzdCwgY29kZSk7 CisJCWxhc3QgPSBjb2RlOworCisJCXAgPSBmaWVsZHNbRklFTERfQ0FURUdPUlldOworCQlp ZihzdHJzdHIoZmllbGRzW0ZJRUxEX05BTUVdLCAiLCBGaXJzdD4iKSAhPSBuaWwpeworCQkJ aWYoIWdldHVuaWNvZGVsaW5lKGluLCBmaWVsZHMyKSkKKwkJCQlzeXNmYXRhbCgicmFuZ2Ug c3RhcnQgYXQgZW9mIik7CisJCQlpZiAoc3Ryc3RyKGZpZWxkczJbRklFTERfTkFNRV0sICIs IExhc3Q+IikgPT0gbmlsKQorCQkJCXN5c2ZhdGFsKCJyYW5nZSBzdGFydCBub3QgZm9sbG93 ZWQgYnkgcmFuZ2UgZW5kIik7CisJCQlsYXN0ID0gZXN0cnRvdWwoZmllbGRzMltGSUVMRF9D T0RFXSwgMTYpOworCQkJaWYobGFzdCA8PSBjb2RlKQorCQkJCXN5c2ZhdGFsKCJyYW5nZSBv dXQgb2Ygc2VxdWVuY2U6ICV4IHRoZW4gJXgiLCBjb2RlLCBsYXN0KTsKKwkJCWlmKHN0cmNt cChwLCBmaWVsZHMyW0ZJRUxEX0NBVEVHT1JZXSkgIT0gMCkKKwkJCQlzeXNmYXRhbCgicmFu Z2Ugd2l0aCBtaXNtYXRjaGVkIGNhdGVnb3J5Iik7CisJCX0KKworCQlkID0gZmllbGRzW0ZJ RUxEX0RFQ09NUF07CisJCWlmKHN0cmxlbihkKSA+IDAgJiYgc3Ryc3RyKGQsICI8IikgPT0g bmlsKXsKKwkJCWRlY29tcFswXSA9IGVzdHJ0b3VsKGQsIDE2KTsKKwkJCWQgPSBzdHJzdHIo ZCwgIiAiKTsKKwkJCWlmKGQgPT0gbmlsKXsKKwkJCQkvKiBzaW5nbGV0b24gcmVjb21wb3Np dGlvbnMgYXJlIHZlcmJvZGVuICovCisJCQkJZGVjb21wWzFdID0gMDsKKwkJCQlpZihkZWNv bXBbMF0gPiAweEZGRkYpeworCQkJCQlpcCA9IG15ZGVzcGVjaWFsICsgbnNwZWNpYWwqMzsK KwkJCQkJaXBbMF0gPSBjb2RlOworCQkJCQlpcFsxXSA9IGRlY29tcFswXTsKKwkJCQkJaXBb Ml0gPSAwOworCQkJCQlteWRlY29tcFtjb2RlXSA9IChEU1RBUlQrbnNwZWNpYWwpPDwxNjsK KwkJCQkJbnNwZWNpYWwrKzsKKwkJCQl9IGVsc2UKKwkJCQkJbXlkZWNvbXBbY29kZV0gPSBk ZWNvbXBbMF08PDE2OworCQkJfSBlbHNlIHsKKwkJCQlkKys7CisJCQkJZGVjb21wWzFdID0g ZXN0cnRvdWwoZCwgMTYpOworCQkJCWlmKGRlY29tcFswXSA+IDB4RkZGRiB8fCBkZWNvbXBb MV0gPiAweEZGRkYpeworCQkJCQlpcCA9IG15ZGVzcGVjaWFsICsgbnNwZWNpYWwqMzsKKwkJ CQkJaXBbMF0gPSBjb2RlOworCQkJCQlpcFsxXSA9IGRlY29tcFswXTsKKwkJCQkJaXBbMl0g PSBkZWNvbXBbMV07CisJCQkJCW15ZGVjb21wW2NvZGVdID0gKERTVEFSVCtuc3BlY2lhbCk8 PDE2OworCQkJCQluc3BlY2lhbCsrOworCQkJCQlpcCA9IHJlY29tcGV4dCArIG5yZWNvbXBl eHQqMzsKKwkJCQkJaXBbMF0gPSBjb2RlOworCQkJCQlpcFsxXSA9IGRlY29tcFswXTsKKwkJ CQkJaXBbMl0gPSBkZWNvbXBbMV07CisJCQkJCW5yZWNvbXBleHQrKzsKKwkJCQl9IGVsc2Ug eworCQkJCQlteWRlY29tcFtjb2RlXSA9IGRlY29tcFswXTw8MTYgfCBkZWNvbXBbMV07CisJ CQkJCW15cmVjb21wW25yZWNvbXArK10gPSAoS1Ype2RlY29tcFswXTw8MTYgfCBkZWNvbXBb MV0sIGNvZGUsIDB9OworCQkJCX0KKwkJCX0KKwkJfQorCisJCWZvciAoOyBjb2RlIDw9IGxh c3Q7IGNvZGUrKyl7CisJCQlpZihwWzBdID09ICdMJykKKwkJCQlteWlzYWxwaGFbY29kZV0g PSAxOworCQkJaWYocFswXSA9PSAnWicpCisJCQkJbXlpc3NwYWNlW2NvZGVdID0gMTsKKwor CQkJaWYoc3RyY21wKHAsICJMdSIpID09IDApCisJCQkJbXlpc3VwcGVyW2NvZGVdID0gMTsK KwkJCWlmKHN0cmNtcChwLCAiTGwiKSA9PSAwKQorCQkJCW15aXNsb3dlcltjb2RlXSA9IDE7 CisKKwkJCWlmKHN0cmNtcChwLCAiTHQiKSA9PSAwKQorCQkJCW15aXN0aXRsZVtjb2RlXSA9 IDE7CisKKwkJCWlmKHN0cmNtcChwLCAiTmQiKSA9PSAwKQorCQkJCW15aXNkaWdpdFtjb2Rl XSA9IDE7CisKKwkJCWlmKGZpZWxkc1tGSUVMRF9VUFBFUl1bMF0gIT0gJ1wwJykKKwkJCQlt eXRvdXBwZXJbY29kZV0gPSBlc3RydG91bChmaWVsZHNbRklFTERfVVBQRVJdLCAxNik7CisK KwkJCWlmKGZpZWxkc1tGSUVMRF9MT1dFUl1bMF0gIT0gJ1wwJykKKwkJCQlteXRvbG93ZXJb Y29kZV0gPSBlc3RydG91bChmaWVsZHNbRklFTERfTE9XRVJdLCAxNik7CisKKwkJCWlmKGZp ZWxkc1tGSUVMRF9USVRMRV1bMF0gIT0gJ1wwJykKKwkJCQlteXRvdGl0bGVbY29kZV0gPSBl c3RydG91bChmaWVsZHNbRklFTERfVElUTEVdLCAxNik7CisKKwkJCW15Y2NjW2NvZGVdID0g ZXN0cnRvdWwoZmllbGRzW0ZJRUxEX0NPTUJJTklOR10sIDEwKTsKKwkJfQorCX0KKworCUJ0 ZXJtKGluKTsKKwltYXJrZXhjbHVzaW9ucygpOworCisJLyoKKwkgKiBhY2NvcmRpbmcgdG8g c3RhbmRhcmQsIGlmIHRvdGl0bGUoeCkgaXMgbm90IGRlZmluZWQgaW4gdWNkCisJICogYnV0 IHRvdXBwZXIoeCkgaXMsIHRoZW4gdG90aXRsZSBpcyBkZWZpbmVkIHRvIGJlIHRvdXBwZXIo eCkKKwkgKi8KKwlmb3IoaSA9IDA7IGkgPCBOUlVORVM7IGkrKyl7CisJCWlmKG15dG90aXRs ZVtpXSA9PSAtMQorCQkmJiBteXRvdXBwZXJbaV0gIT0gLTEKKwkJJiYgIW15aXN0aXRsZVtp XSkKKwkJCW15dG90aXRsZVtpXSA9IG15dG91cHBlcltpXTsKKwl9CisKKwkvKgorCSAqIEEg Y291cGxlIGNvcnJlY3Rpb25zOgorCSAqIGlzKih0byooeCkpIHNob3VsZCBiZSB0cnVlLgor CSAqIHJlc3RvcmUgdW5kZWZpbmVkIHRyYW5zZm9ybWF0aW9ucy4KKwkgKiBzdG9yZSBvZmZz ZXQgaW5zdGVhZCBvZiB2YWx1ZSwgbWFrZXMgdGhlbSBzcGFyc2UuCisJICovCisJZm9yKGkg PSAwOyBpIDwgTlJVTkVTOyBpKyspeworCQlpZihteXRvdXBwZXJbaV0gIT0gLTEpCisJCQlt eWlzdXBwZXJbbXl0b3VwcGVyW2ldXSA9IDE7CisJCWVsc2UKKwkJCW15dG91cHBlcltpXSA9 IGk7CisKKwkJaWYobXl0b2xvd2VyW2ldICE9IC0xKQorCQkJbXlpc2xvd2VyW215dG9sb3dl cltpXV0gPSAxOworCQllbHNlCisJCQlteXRvbG93ZXJbaV0gPSBpOworCisJCWlmKG15dG90 aXRsZVtpXSAhPSAtMSkKKwkJCW15aXN0aXRsZVtteXRvdGl0bGVbaV1dID0gMTsKKwkJZWxz ZQorCQkJbXl0b3RpdGxlW2ldID0gaTsKKworCQlteXRvdXBwZXJbaV0gPSBteXRvdXBwZXJb aV0gLSBpOworCQlteXRvbG93ZXJbaV0gPSBteXRvbG93ZXJbaV0gLSBpOworCQlteXRvdGl0 bGVbaV0gPSBteXRvdGl0bGVbaV0gLSBpOworCX0KKworCXVjaGFyIGI7CisJZm9yKGkgPSAw OyBpIDwgTlJVTkVTOyBpKyspeworCQliID0gMDsKKwkJaWYobXlpc3NwYWNlW2ldKQorCQkJ YiB8PSAxPDwwOworCQlpZihteWlzYWxwaGFbaV0pCisJCQliIHw9IDE8PDE7CisJCWlmKG15 aXNkaWdpdFtpXSkKKwkJCWIgfD0gMTw8MjsKKwkJaWYobXlpc3VwcGVyW2ldKQorCQkJYiB8 PSAxPDwzOworCQlpZihteWlzbG93ZXJbaV0pCisJCQliIHw9IDE8PDQ7CisJCWlmKG15aXN0 aXRsZVtpXSkKKwkJCWIgfD0gMTw8NTsKKworCQlteWlzbWVyZ2VkW2ldID0gYjsKKwl9CisK KwltYXJrYnJlYWsoKTsKKwlta3RhYmxlcygpOworCWV4aXRzKG5pbCk7Cit9Ci0tLSAvZGV2 L251bGwKKysrIGIvL3N5cy9zcmMvbGliYy9wb3J0L3J1bmVicmVhay5jCkBAIC0xLDAgKzEs MjkzIEBACisjaW5jbHVkZSA8dS5oPgorI2luY2x1ZGUgPGxpYmMuaD4KKworI2luY2x1ZGUg InJ1bmVicmVha2RhdGEiCisKK2VudW0geworCU9USEVSLCAKKwlIZWJyZXdfTGV0dGVyLCBO ZXdsaW5lLCBFeHRlbmQsIEZvcm1hdCwKKwlLYXRha2FuYSwgQUxldHRlciwgTWlkTGV0dGVy LCBNaWROdW0sCisJTWlkTnVtTGV0LCBOdW1lcmljLCBFeHRlbmROdW1MZXQsIFdTZWdTcGFj ZSwKKwlQUkVQRU5EID0gMHgxMCwgQ09OVFJPTCA9IDB4MjAsIEVYVEVORCA9IDB4MzAsIFJF R0lPTiA9IDB4NDAsCisJTCA9IDB4NTAsIFYgPSAweDYwLCBUID0gMHg3MCwgTFYgPSAweDgw LCBMVlQgPSAweDkwLCBTUEFDRU1LID0gMHhBMCwKKwlFTU9KSUVYID0gMHhCMCwKKworCVpX SiA9IDB4MjAwRFUsCisJTElORVRBQiA9IDB4QiwKK307CisKKyNkZWZpbmUgSVMoeCwgeSkg KCh4JjB4ZikgPT0geSkKKyNkZWZpbmUgSVNHKHgsIHkpICgoeCYweGYwKSA9PSB5KQorCitS dW5lKgorcnVuZWdicmVhayhSdW5lICpzKQoreworCVJ1bmUgbCwgcjsKKwl1Y2hhciBsdCwg cnQ7CisJUnVuZSAqcDsKKworCXAgPSBzOworCWlmKChsID0gKnArKykgPT0gMCkKKwkJcmV0 dXJuIHM7CisJaWYoKHIgPSAqcCkgPT0gMCkKKwkJcmV0dXJuIHM7CisJbHQgPSBicmVha2xr dXAobCk7CisJcnQgPSBicmVha2xrdXAocik7CisJaWYobCA9PSAnXHInICYmIHIgPT0gJ1xu JykKKwkJZ290byBEb25lOworCWlmKElTRyhsdCwgQ09OVFJPTCkgfHwgbCA9PSAnXHInIHx8 IGwgPT0gJ1xuJykKKwkJcmV0dXJuIHA7CisJaWYoSVNHKHJ0LCBDT05UUk9MKSB8fCByID09 ICdccicgfHwgciA9PSAnXG4nKQorCQlyZXR1cm4gcDsKKwlpZihJU0cobHQsIEwpICYmIChJ U0cocnQsIEwpIHx8IElTRyhydCwgVikgfHwgSVNHKHJ0LCBMVikgfHwgSVNHKHJ0LCBMVlQp KSkKKwkJZ290byBEb25lOworCWlmKChJU0cobHQsIExWKSB8fCBJU0cobHQsIFYpKSAmJiAo SVNHKHJ0LCBWKSB8fCBJU0cocnQsIFQpKSkKKwkJZ290byBEb25lOworCWlmKChJU0cobHQs IExWVCkgfHwgSVNHKGx0LCBUKSkgJiYgKElTRyhydCwgVCkgfHwgSVNHKHJ0LCBUKSkpCisJ CWdvdG8gRG9uZTsKKwlpZihJU0cocnQsIFNQQUNFTUspIHx8IElTRyhsdCwgUFJFUEVORCkp CisJCWdvdG8gRG9uZTsKKwlpZihJU0cobHQsIEVNT0pJRVgpICYmIChJU0cocnQsIEVYVEVO RCkgfHwgciA9PSBaV0opKXsKKwkJd2hpbGUoSVNHKHJ0LCBFWFRFTkQpKXsKKwkJCXArKzsK KwkJCWlmKChyID0gKnApID09IDApCisJCQkJcmV0dXJuIHM7CisJCQlydCA9IGJyZWFrbGt1 cChyKTsKKwkJfQorCQlpZihyICE9IFpXSikKKwkJCXJldHVybiBwOworCQlwKys7CisJCWlm KChyID0gKnApID09IDApCisJCQlyZXR1cm4gczsKKwkJcnQgPSBicmVha2xrdXAocik7CisJ CWlmKElTRyhydCwgRU1PSklFWCkpCisJCQlnb3RvIERvbmU7CisJCXJldHVybiBwOworCX0K KwlpZihJU0cocnQsIEVYVEVORCkgfHwgciA9PSBaV0opCisJCWdvdG8gRG9uZTsKKwlpZihJ U0cobHQsIFJFR0lPTikgJiYgSVNHKHJ0LCBSRUdJT04pKQorCQlnb3RvIERvbmU7CisKKwly ZXR1cm4gcDsKKworRG9uZToKKwlpZihwWzFdID09IDApCisJCXJldHVybiBzOworCXJldHVy biBwICsgMTsKK30KKworY2hhcioKK3V0ZmdicmVhayhjaGFyICpzKQoreworCVJ1bmUgbCwg cjsKKwl1Y2hhciBsdCwgcnQ7CisJY2hhciAqcDsKKworCXAgPSBzOworCXAgKz0gY2hhcnRv cnVuZSgmbCwgcCk7CisJaWYobCA9PSAwKQorCQlyZXR1cm4gczsKKwljaGFydG9ydW5lKCZy LCBwKTsKKwlpZihyID09IDApCisJCXJldHVybiBzOworCWx0ID0gYnJlYWtsa3VwKGwpOwor CXJ0ID0gYnJlYWtsa3VwKHIpOworCWlmKGwgPT0gJ1xyJyAmJiByID09ICdcbicpCisJCWdv dG8gRG9uZTsKKwlpZihJU0cobHQsIENPTlRST0wpIHx8IGwgPT0gJ1xyJyB8fCBsID09ICdc bicpCisJCXJldHVybiBwOworCWlmKElTRyhydCwgQ09OVFJPTCkgfHwgciA9PSAnXHInIHx8 IHIgPT0gJ1xuJykKKwkJcmV0dXJuIHA7CisJaWYoSVNHKGx0LCBMKSAmJiAoSVNHKHJ0LCBM KSB8fCBJU0cocnQsIFYpIHx8IElTRyhydCwgTFYpIHx8IElTRyhydCwgTFZUKSkpCisJCWdv dG8gRG9uZTsKKwlpZigoSVNHKGx0LCBMVikgfHwgSVNHKGx0LCBWKSkgJiYgKElTRyhydCwg VikgfHwgSVNHKHJ0LCBUKSkpCisJCWdvdG8gRG9uZTsKKwlpZigoSVNHKGx0LCBMVlQpIHx8 IElTRyhsdCwgVCkpICYmIChJU0cocnQsIFQpIHx8IElTRyhydCwgVCkpKQorCQlnb3RvIERv bmU7CisJaWYoSVNHKHJ0LCBTUEFDRU1LKSB8fCBJU0cobHQsIFBSRVBFTkQpKQorCQlnb3Rv IERvbmU7CisJaWYoSVNHKGx0LCBFTU9KSUVYKSAmJiAoSVNHKHJ0LCBFWFRFTkQpIHx8IHIg PT0gWldKKSl7CisJCXdoaWxlKElTRyhydCwgRVhURU5EKSl7CisJCQlwICs9IGNoYXJ0b3J1 bmUoJnIsIHApOworCQkJY2hhcnRvcnVuZSgmciwgcCk7CisJCQlpZihyID09IDApCisJCQkJ cmV0dXJuIHM7CisJCQlydCA9IGJyZWFrbGt1cChyKTsKKwkJfQorCQlpZihyICE9IFpXSikK KwkJCXJldHVybiBwOworCisJCXAgKz0gY2hhcnRvcnVuZSgmciwgcCk7CisJCWNoYXJ0b3J1 bmUoJnIsIHApOworCQlpZihyID09IDApCisJCQlyZXR1cm4gczsKKwkJcnQgPSBicmVha2xr dXAocik7CisJCWlmKElTRyhydCwgRU1PSklFWCkpCisJCQlnb3RvIERvbmU7CisJCXJldHVy biBwOworCX0KKwlpZihJU0cocnQsIEVYVEVORCkgfHwgciA9PSBaV0opCisJCWdvdG8gRG9u ZTsKKwlpZihJU0cobHQsIFJFR0lPTikgJiYgSVNHKHJ0LCBSRUdJT04pKQorCQlnb3RvIERv bmU7CisKKwlyZXR1cm4gcDsKKworRG9uZToKKwlwICs9IGNoYXJ0b3J1bmUoJnIsIHApOwor CWNoYXJ0b3J1bmUoJnIsIHApOworCWlmKHIgPT0gMCkKKwkJcmV0dXJuIHM7CisJcmV0dXJu IHA7Cit9CisKKyNkZWZpbmUgQUgoeCkgKElTKHgsIEFMZXR0ZXIpIHx8IElTKHgsIEhlYnJl d19MZXR0ZXIpKQorI2RlZmluZSBNTkxRKHgpIChJUyh4LCBNaWROdW1MZXQpIHx8IHggPT0g J1wnJykKKworUnVuZSoKK3J1bmV3YnJlYWsoUnVuZSAqcykKK3sKKwlSdW5lIGwsIHI7CisJ dWNoYXIgbHQsIHJ0OworCVJ1bmUgKnA7CisKKwlwID0gczsKKwlpZigobCA9ICpwKyspID09 IDApCisJCXJldHVybiBzOworCWlmKChyID0gKnApID09IDApCisJCXJldHVybiBzOworCWx0 ID0gYnJlYWtsa3VwKGwpOworCXJ0ID0gYnJlYWtsa3VwKHIpOworCWlmKGwgPT0gJ1xyJyAm JiByID09ICdcbicpCisJCWdvdG8gRG9uZTsKKwlpZihsID09ICdccicgfHwgbCA9PSAnXG4n IHx8IGwgPT0gTElORVRBQikKKwkJcmV0dXJuIHA7CisJaWYociA9PSAnXHInIHx8IHIgPT0g J1xuJyB8fCBsID09IExJTkVUQUIpCisJCXJldHVybiBwOworCWlmKElTKGx0LCBXU2VnU3Bh Y2UpICYmIElTKHJ0LCBXU2VnU3BhY2UpKQorCQlnb3RvIERvbmU7CisJaWYoSVMocnQsIEZv cm1hdCkgfHwgSVMocnQsIEV4dGVuZCkpCisJCWdvdG8gRG9uZTsKKwlpZihBSChsdCkpewor CQlpZihBSChydCkpCisJCQlnb3RvIERvbmU7CisJCWlmKChJUyhydCwgTWlkTGV0dGVyKSB8 fCBNTkxRKHJ0KSkgJiYgcFsxXSAhPSAwICYmIEFIKGJyZWFrbGt1cChwWzFdKSkpCisJCQln b3RvIERvbmU7CisJCWlmKElTKGx0LCBIZWJyZXdfTGV0dGVyKSAmJiByID09ICdcJycpCisJ CQlnb3RvIERvbmU7CisJCWlmKElTKGx0LCBIZWJyZXdfTGV0dGVyKSAmJiByID09ICciJyAm JiBwWzFdICE9IDAgJiYgSVMoYnJlYWtsa3VwKHBbMV0pLCBIZWJyZXdfTGV0dGVyKSkKKwkJ CWdvdG8gRG9uZTsKKwkJaWYoSVMocnQsIE51bWVyaWMpKQorCQkJZ290byBEb25lOworCX0K KwlpZihJUyhsdCwgTnVtZXJpYykgJiYgKEFIKHJ0KSB8fCBJUyhydCwgTnVtZXJpYykpKQor CQlnb3RvIERvbmU7CisJaWYoSVMobHQsIE51bWVyaWMpICYmIChJUyhydCwgTWlkTnVtKSB8 fCBNTkxRKHJ0KSkgJiYgcFsxXSAhPSAwICYmIElTKGJyZWFrbGt1cChwWzFdKSwgTnVtZXJp YykpCisJCWdvdG8gRG9uZTsKKwlpZihJUyhsdCwgS2F0YWthbmEpICYmIElTKHJ0LCBLYXRh a2FuYSkpCisJCWdvdG8gRG9uZTsKKwlpZihBSChsdCkgfHwgSVMobHQsIE51bWVyaWMpIHx8 IElTKGx0LCBLYXRha2FuYSkgfHwgSVMobHQsIEV4dGVuZE51bUxldCkpCisJCWlmKElTKHJ0 LCBFeHRlbmROdW1MZXQpKQorCQkJZ290byBEb25lOworCWlmKElTKGx0LCBFeHRlbmROdW1M ZXQpICYmIChBSChydCkgfHwgSVMocnQsIE51bWVyaWMpIHx8IElTKHJ0LCBLYXRha2FuYSkp KQorCQlnb3RvIERvbmU7CisJaWYoSVNHKGx0LCBSRUdJT04pKXsKKwkJaWYoSVNHKHJ0LCBS RUdJT04pKQorCQkJZ290byBEb25lOworCQlpZihyICE9IFpXSikKKwkJCXJldHVybiBwOwor CQlwKys7CisJCWlmKChyID0gKnApID09IDApCisJCQlyZXR1cm4gczsKKwkJcnQgPSBicmVh a2xrdXAocik7CisJCWlmKElTRyhydCwgUkVHSU9OKSkKKwkJCWdvdG8gRG9uZTsKKwl9CisK KwlyZXR1cm4gcDsKKworRG9uZToKKwlpZihwWzFdID09IDApCisJCXJldHVybiBzOworCXJl dHVybiBwICsgMTsKK30KKworY2hhcioKK3V0ZndicmVhayhjaGFyICpzKQoreworCVJ1bmUg bCwgcjsKKwlSdW5lIHBlZWs7CisJdWNoYXIgbHQsIHJ0OworCWNoYXIgKnA7CisKKwlwID0g czsKKwlwICs9IGNoYXJ0b3J1bmUoJmwsIHApOworCWlmKGwgPT0gMCkKKwkJcmV0dXJuIHM7 CisJY2hhcnRvcnVuZSgmcGVlaywgcCtjaGFydG9ydW5lKCZyLCBwKSk7CisJaWYociA9PSAw KQorCQlyZXR1cm4gczsKKwlsdCA9IGJyZWFrbGt1cChsKTsKKwlydCA9IGJyZWFrbGt1cChy KTsKKwlpZihsID09ICdccicgJiYgciA9PSAnXG4nKQorCQlnb3RvIERvbmU7CisJaWYobCA9 PSAnXHInIHx8IGwgPT0gJ1xuJyB8fCBsID09IExJTkVUQUIpCisJCXJldHVybiBwOworCWlm KHIgPT0gJ1xyJyB8fCByID09ICdcbicgfHwgbCA9PSBMSU5FVEFCKQorCQlyZXR1cm4gcDsK KwlpZihJUyhsdCwgV1NlZ1NwYWNlKSAmJiBJUyhydCwgV1NlZ1NwYWNlKSkKKwkJZ290byBE b25lOworCWlmKElTKHJ0LCBGb3JtYXQpIHx8IElTKHJ0LCBFeHRlbmQpKQorCQlnb3RvIERv bmU7CisJaWYoQUgobHQpKXsKKwkJaWYoQUgocnQpKQorCQkJZ290byBEb25lOworCQlpZihJ UyhydCwgTWlkTGV0dGVyKSB8fCBNTkxRKHJ0KSkKKwkJaWYocGVlayAhPSAwICYmIEFIKGJy ZWFrbGt1cChwZWVrKSkpCisJCQlnb3RvIERvbmU7CisKKwkJaWYoSVMobHQsIEhlYnJld19M ZXR0ZXIpICYmIHIgPT0gJ1wnJykKKwkJCWdvdG8gRG9uZTsKKworCQlpZihJUyhsdCwgSGVi cmV3X0xldHRlcikgJiYgciA9PSAnIicpCisJCWlmKHBlZWsgIT0gMCAmJiBJUyhicmVha2xr dXAocGVlayksIEhlYnJld19MZXR0ZXIpKQorCQkJZ290byBEb25lOworCisJCWlmKElTKHJ0 LCBOdW1lcmljKSkKKwkJCWdvdG8gRG9uZTsKKwl9CisJaWYoSVMobHQsIE51bWVyaWMpICYm IChBSChydCkgfHwgSVMocnQsIE51bWVyaWMpKSkKKwkJZ290byBEb25lOworCWlmKElTKGx0 LCBOdW1lcmljKSAmJiAoSVMocnQsIE1pZE51bSkgfHwgTU5MUShydCkpICYmIHBlZWsgIT0g MCAmJiBJUyhicmVha2xrdXAocGVlayksIE51bWVyaWMpKQorCQlnb3RvIERvbmU7CisJaWYo SVMobHQsIEthdGFrYW5hKSAmJiBJUyhydCwgS2F0YWthbmEpKQorCQlnb3RvIERvbmU7CisJ aWYoQUgobHQpIHx8IElTKGx0LCBOdW1lcmljKSB8fCBJUyhsdCwgS2F0YWthbmEpIHx8IElT KGx0LCBFeHRlbmROdW1MZXQpKQorCQlpZihJUyhydCwgRXh0ZW5kTnVtTGV0KSkKKwkJCWdv dG8gRG9uZTsKKwlpZihJUyhsdCwgRXh0ZW5kTnVtTGV0KSAmJiAoQUgocnQpIHx8IElTKHJ0 LCBOdW1lcmljKSB8fCBJUyhydCwgS2F0YWthbmEpKSkKKwkJZ290byBEb25lOworCWlmKElT RyhsdCwgUkVHSU9OKSl7CisJCWlmKElTRyhydCwgUkVHSU9OKSkKKwkJCWdvdG8gRG9uZTsK KwkJaWYociAhPSBaV0opCisJCQlyZXR1cm4gcDsKKwkJcCArPSBjaGFydG9ydW5lKCZyLCBw KTsKKwkJY2hhcnRvcnVuZSgmciwgcCk7CisJCWlmKHIgPT0gMCkKKwkJCXJldHVybiBzOwor CQlydCA9IGJyZWFrbGt1cChyKTsKKwkJaWYoSVNHKHJ0LCBSRUdJT04pKQorCQkJZ290byBE b25lOworCX0KKworCXJldHVybiBwOworCitEb25lOgorCXAgKz0gY2hhcnRvcnVuZSgmciwg cCk7CisJY2hhcnRvcnVuZSgmciwgcCk7CisJaWYociA9PSAwKQorCQlyZXR1cm4gczsKKwly ZXR1cm4gcDsKK30KLS0tIC9kZXYvbnVsbAorKysgYi8vc3lzL3NyYy9saWJjL3BvcnQvcnVu ZWlzdHlwZS5jCkBAIC0xLDAgKzEsNDAgQEAKKyNpbmNsdWRlIDx1Lmg+CisjaW5jbHVkZSA8 bGliYy5oPgorCisjaW5jbHVkZSAicnVuZWlzdHlwZWRhdGEiCisKK2ludAoraXNzcGFjZXJ1 bmUoUnVuZSBjKQoreworCXJldHVybiAobWVyZ2VkbGt1cChjKSAmIExzcGFjZSkgPT0gTHNw YWNlOworfQorCitpbnQKK2lzYWxwaGFydW5lKFJ1bmUgYykKK3sKKwlyZXR1cm4gKG1lcmdl ZGxrdXAoYykgJiBMYWxwaGEpID09IExhbHBoYTsKK30KKworaW50Citpc2RpZ2l0cnVuZShS dW5lIGMpCit7CisJcmV0dXJuIChtZXJnZWRsa3VwKGMpICYgTGRpZ2l0KSA9PSBMZGlnaXQ7 Cit9CisKK2ludAoraXN1cHBlcnJ1bmUoUnVuZSBjKQoreworCXJldHVybiAobWVyZ2VkbGt1 cChjKSAmIEx1cHBlcikgPT0gTHVwcGVyOworfQorCitpbnQKK2lzbG93ZXJydW5lKFJ1bmUg YykKK3sKKwlyZXR1cm4gKG1lcmdlZGxrdXAoYykgJiBMbG93ZXIpID09IExsb3dlcjsKK30K KworaW50Citpc3RpdGxlcnVuZShSdW5lIGMpCit7CisJcmV0dXJuIChtZXJnZWRsa3VwKGMp ICYgTHRpdGxlKSA9PSBMdGl0bGU7Cit9Ci0tLSAvZGV2L251bGwKKysrIGIvL3N5cy9zcmMv bGliYy9wb3J0L3J1bmVub3JtLmMKQEAgLTEsMCArMSwzMzQgQEAKKyNpbmNsdWRlIDx1Lmg+ CisjaW5jbHVkZSA8bGliYy5oPgorCisjaW5jbHVkZSAicnVuZW5vcm1kYXRhIgorCisvL1Vu aWNvZGUgU3RhbmRhcmQ6IFNlY3Rpb24gMy4xMiBDb25qb2luaW5nIEphbW8gQmVoYXZpb3IK K2VudW0geworCVNCYXNlID0gMHhBQzAwLAorCUxCYXNlID0gMHgxMTAwLAorCVZCYXNlID0g MHgxMTYxLAorCVRCYXNlID0gMHgxMUE3LAorCisJTENvdW50ID0gMTksCisJVkNvdW50ID0g MjEsCisJVENvdW50ID0gMjgsCisJTkNvdW50ID0gVkNvdW50ICogVENvdW50LAorCVNDb3Vu dCA9IExDb3VudCAqIE5Db3VudCwKKworCUxMYXN0ID0gTEJhc2UgKyBMQ291bnQgLSAxLAor CVNMYXN0ID0gU0Jhc2UgKyBTQ291bnQgLSAxLAorCVZMYXN0ID0gVkJhc2UgKyBWQ291bnQg LSAxLAorCVRMYXN0ID0gVEJhc2UgKyBUQ291bnQgLSAxLAorfTsKKworc3RhdGljIHZvaWQK K19ydW5lZGVjb21wKFJ1bmUgZHN0WzJdLCBSdW5lIGMpCit7CisJdWludCB4OworCisJaWYo YyA+PSBTQmFzZSAmJiBjIDw9IFNMYXN0KXsKKwkJYyAtPSBTQmFzZTsKKwkJeCA9IGMgJSBU Q291bnQ7CisJCWlmKHgpeworCQkJZHN0WzBdID0gU0Jhc2UgKyAoKGMgLyBUQ291bnQpICog VENvdW50KTsKKwkJCWRzdFsxXSA9IFRCYXNlICsgeDsKKwkJCXJldHVybjsKKwkJfQorCQlk c3RbMF0gPSBMQmFzZSArIChjIC8gTkNvdW50KTsKKwkJZHN0WzFdID0gVkJhc2UgKyAoKGMg JSBOQ291bnQpIC8gVENvdW50KTsKKwkJcmV0dXJuOworCX0KKwl4ID0gZGVjb21wbGt1cChj KTsKKwlpZigoeCAmIDB4RkZGRikgIT0gMCl7CisJCWRzdFswXSA9IHg+PjE2OworCQlkc3Rb MV0gPSB4ICYgMHhGRkZGOworCQlyZXR1cm47CisJfQorCXggPj49IDE2OworCWlmKHggPj0g MHhFRUVFICYmIHggPDB4RjhGRil7CisJCW1lbW1vdmUoZHN0LCBfZGVjb21wZXhjZXB0aW9u c1t4IC0gMHhFRUVFXSwgc2l6ZW9mKFJ1bmUpKjIpOworCQlyZXR1cm47CisJfQorCWRzdFsw XSA9IHg7CisJZHN0WzFdID0gMDsKK30KKworc3RhdGljIFJ1bmUKK19ydW5lcmVjb21wKFJ1 bmUgclsyXSkKK3sKKwl1aW50IHgsIHksICpwLCBuZXh0OworCisJaWYoclswXSA+PSBMQmFz ZSAmJiByWzBdIDw9IExMYXN0KXsKKwkJaWYoclsxXSA8IFZCYXNlIHx8IHJbMV0gPiBWTGFz dCkKKwkJCXJldHVybiAwOworCQl4ID0gKHJbMF0gLSBMQmFzZSkgKiBOQ291bnQgKyAoclsx XSAtIFZCYXNlKSAqIFRDb3VudDsKKwkJcmV0dXJuIFNCYXNlICsgeDsKKwl9CisJaWYoclsw XSA+PSBTQmFzZSAmJiByWzBdIDw9IFNMYXN0ICYmIChyWzBdIC0gU0Jhc2UpICUgVENvdW50 ID09IDApeworCQlpZihyWzFdID4gVEJhc2UgJiYgclsxXSA8PSBUTGFzdCkKKwkJCXJldHVy biByWzBdICsgKHJbMV0gLSBUQmFzZSk7CisJCXJldHVybiAwOworCX0KKwlpZihyWzBdID4g MHhGRkZGIHx8IHJbMV0gPiAweEZGRkYpeworCQlmb3IoeCA9IDA7IHggPCBuZWxlbShfcmVj b21wZXhjZXB0aW9ucyk7IHgrKykKKwkJCWlmKHJbMF0gPT0gX3JlY29tcGV4Y2VwdGlvbnNb eF1bMV0gJiYgclsxXSA9PSBfcmVjb21wZXhjZXB0aW9uc1t4XVsyXSkKKwkJCQlyZXR1cm4g IF9yZWNvbXBleGNlcHRpb25zW3hdWzBdOworCQlyZXR1cm4gMDsKKwl9CisJeSA9IHggPSBy WzBdPDwxNiB8IHJbMV07CisJeCBePSB4ID4+IDE2OworCXggKj0gMHgyMWYwYWFhZDsKKwl4 IF49IHggPj4gMTU7CisJeCAqPSAweGQzNWEyZDk3OworCXggXj0geCA+PiAxNTsKKwlwID0g X3JlY29tcGRhdGEgKyAoeCU1MTIpKjI7CisJd2hpbGUocFswXSAhPSB5KXsKKwkJbmV4dCA9 IHBbMV0+PjE2OworCQlpZighbmV4dCkKKwkJCXJldHVybiAwOworCQlwID0gX3JlY29tcGNv bGwgKyAobmV4dC0xKSoyOworCX0KKwlyZXR1cm4gcFsxXSAmIDB4RkZGRjsKK30KKworc3Rh dGljIHZvaWQKK3J1bmVjY2Nzb3J0KFJ1bmUgKmEsIGludCBsZW4pCit7CisJUnVuZSByOwor CWludCBpOworCWludCBmYWlsOworCisJZG8geworCQlmYWlsID0gMDsKKwkJZm9yKGkgPSAw OyBpIDwgbGVuIC0gMTsgaSsrKXsKKwkJCWlmKGNjY2xrdXAoYVtpXSkgPiBjY2Nsa3VwKGFb aSsxXSkgPiAwKXsKKwkJCQlyID0gYVtpXTsKKwkJCQlhW2ldID0gYVtpKzFdOworCQkJCWFb aSArIDFdID0gcjsKKwkJCQlmYWlsID0gMTsKKwkJCX0KKwkJfQorCX0gd2hpbGUoZmFpbCk7 Cit9CisKK2NoYXIqCitmdWxsdXRmbm9ybShjaGFyICpzLCBpbnQgbikKK3sKKwlSdW5lIHIs IHBlZWs7CisJY2hhciAqcCwgKnAyOworCisJcCA9IHM7CisJaWYoZnVsbHJ1bmUocCwgbikg PT0gMCkKKwkJcmV0dXJuIHM7CisKKwlwICs9IGNoYXJ0b3J1bmUoJnIsIHApOworCW4gLT0g KHAgLSBzKTsKKworCWlmKChyID49IExCYXNlICYmIHIgPD0gTExhc3QpIHx8IChyID49IFNC YXNlICYmIHIgPD0gU0xhc3QpKXsKKwkJZG8geworCQkJaWYoZnVsbHJ1bmUocCwgbikgPT0g MCkKKwkJCQlyZXR1cm4gczsKKwkJCXAyID0gcCArIGNoYXJ0b3J1bmUoJnBlZWssIHApOwor CQkJbiAtPSAocDIgLSBwKTsKKwkJCXAgPSBwMjsKKwkJfSB3aGlsZShuID4gMCAmJiAocGVl ayA+PSBWQmFzZSAmJiBwZWVrIDw9IFZMYXN0KSB8fCAocGVlayA+IFRCYXNlICYmIHBlZWsg PD0gVExhc3QpKTsKKwkJaWYobiA8PSAwKQorCQkJcmV0dXJuIHM7CisJCXJldHVybiBwOwor CX0KKworCWRvIHsKKwkJaWYoZnVsbHJ1bmUocCwgbikgPT0gMCkKKwkJCXJldHVybiBzOwor CQlwMiA9IHAgKyBjaGFydG9ydW5lKCZwZWVrLCBwKTsKKwkJbiAtPSAocDIgLSBwKTsKKwkJ cCA9IHAyOworCQlpZihjY2Nsa3VwKHBlZWspID09IDApCisJCQlyZXR1cm4gcDsKKwl9IHdo aWxlKG4gPiAwKTsKKworCXJldHVybiBzOworfQorCitSdW5lKgorZnVsbHJ1bmVub3JtKFJ1 bmUgKnIsIGludCBuKQoreworCVJ1bmUgKmUsICpwOworCisJcCA9IHI7CisJZSA9IHAgKyBu OworCisJaWYoKCpwID49IExCYXNlICYmICpwIDw9IExMYXN0KSB8fCAoKnAgPj0gU0Jhc2Ug JiYgKnAgPD0gU0xhc3QpKXsKKwkJcCsrOworCQl3aGlsZShwIDwgZSAmJiAoKnAgPj0gVkJh c2UgJiYgKnAgPD0gVkxhc3QpIHx8ICgqcCA+IFRCYXNlICYmICpwIDw9IFRMYXN0KSkKKwkJ CXArKzsKKworCQlpZihwID49IGUpCisJCQlyZXR1cm4gcjsKKwkJcmV0dXJuIHA7CisJfQor CisJZm9yKDsgcCA8IGUgJiYgcCArIDEgPCBlOyBwKyspCisJCWlmKGNjY2xrdXAocFsxXSkg PT0gMCkKKwkJCXJldHVybiBwICsgMTsKKworCXJldHVybiByOworfQorCitzdGF0aWMgaW50 CitydW5lbm9ybShSdW5lICpkc3QsIFJ1bmUgKnNyYywgY2hhciAqc2RzdCwgY2hhciAqc3Ny YywgaW50IG1heCwgaW50IGNvbXBvc2UpCit7CisJUnVuZSBjLCByWzJdLCBfc3RhY2tbMzJd OworCVJ1bmUgKnAsICpzdGFjaywgKnNwLCAqdHA7CisJY2hhciAqc3RycCwgKnN0cnN0b3A7 CisJUnVuZSAqcnAsICpycnA7CisJUnVuZSAqc3RvcDsKKwlSdW5lIHBlZWs7CisJaW50IHcs IHcyLCBzaXplOworCWludCBtb2RlOworCisJaWYoc3JjKXsKKwkJbW9kZSA9IDE7CisJCXAg PSBzcmM7CisJCXN0b3AgPSBkc3QgKyAobWF4IC0gMSk7CisJCXN0cnAgPSAiIjsKKwkJc3Ry c3RvcCA9IG5pbDsKKwl9IGVsc2UgeworCQltb2RlID0gMDsKKwkJcCA9IEwiIjsKKwkJc3Rv cCA9IG5pbDsKKwkJc3RycCA9IHNzcmM7CisJCXN0cnN0b3AgPSBzZHN0ICsgKG1heCAtIDEp OworCX0KKworCXN0YWNrID0gX3N0YWNrICsgbmVsZW0oX3N0YWNrKS8yOworCXNpemUgPSAw OworCXcgPSB3MiA9IDA7CisJd2hpbGUoKnN0cnAgfHwgKnApeworCQlpZihtb2RlKQorCQkJ YyA9ICpwOworCQllbHNlCisJCQl3ID0gY2hhcnRvcnVuZSgmYywgc3RycCk7CisKKwkJc3Ag PSBzdGFjayAtIDE7CisJCXRwID0gc3RhY2s7CisJCV9ydW5lZGVjb21wKHIsIGMpOworCQl3 aGlsZShyWzBdICE9IDApeworCQkJYyA9IHJbMF07CisJCQlpZihyWzFdICE9IDApeworCQkJ CSpzcC0tID0gclsxXTsKKwkJCQlpZihzcCA9PSBfc3RhY2spCisJCQkJCWJyZWFrOworCQkJ fQorCQkJX3J1bmVkZWNvbXAociwgYyk7CisJCX0KKworCQkqc3AgPSBjOworCQlpZihtb2Rl KQorCQkJcGVlayA9IHBbMV07CisJCWVsc2UKKwkJCXcyID0gY2hhcnRvcnVuZSgmcGVlaywg c3RycCt3KTsKKworCQlpZigoKnNwID49IExCYXNlICYmICpzcCA8PSBMTGFzdCkgfHwgKCpz cCA+PSBTQmFzZSAmJiAqc3AgPD0gU0xhc3QpKXsKKwkJCXdoaWxlKHBlZWsgIT0gMCAmJiAo cGVlayA+PSBWQmFzZSAmJiBwZWVrIDw9IFZMYXN0KSB8fCAocGVlayA+IFRCYXNlICYmIHBl ZWsgPD0gVExhc3QpKXsKKwkJCQkqdHArKyA9IHBlZWs7CisJCQkJaWYobW9kZSl7CisJCQkJ CXArKzsKKwkJCQkJcGVlayA9IHBbMV07CisJCQkJfSBlbHNlIHsKKwkJCQkJc3RycCArPSB3 OworCQkJCQl3ID0gdzI7CisJCQkJCXcyID0gY2hhcnRvcnVuZSgmcGVlaywgc3RycCt3KTsK KwkJCQl9CisJCQkJaWYodHAgPT0gX3N0YWNrICsgbmVsZW0oX3N0YWNrKSkKKwkJCQkJYnJl YWs7CisJCQl9CisJCX0KKwkJd2hpbGUocGVlayAhPSAwICYmIGNjY2xrdXAocGVlaykgIT0g MCl7CisJCQlfcnVuZWRlY29tcChyLCBwZWVrKTsKKwkJCWlmKHJbMV0gIT0gMCl7CisJCQkJ aWYodHArMSA+PSBfc3RhY2sgKyBuZWxlbShfc3RhY2spKQorCQkJCQlicmVhazsKKwkJCQkq dHArKyA9IHJbMF07CisJCQkJKnRwKysgPSByWzFdOworCQkJfSBlbHNlIGlmKHJbMF0gIT0g MCkKKwkJCQkqdHArKyA9IHJbMF07CisJCQllbHNlCisJCQkJKnRwKysgPSBwZWVrOworCisJ CQlpZihtb2RlKXsKKwkJCQlwKys7CisJCQkJcGVlayA9IHBbMV07CisJCQl9IGVsc2Ugewor CQkJCXN0cnAgKz0gdzsKKwkJCQl3ID0gdzI7CisJCQkJdzIgPSBjaGFydG9ydW5lKCZwZWVr LCBzdHJwK3cpOworCQkJfQorCQkJaWYodHAgPT0gX3N0YWNrICsgbmVsZW0oX3N0YWNrKSkK KwkJCQlicmVhazsKKwkJfQorCQlydW5lY2Njc29ydChzcCwgdHAgLSBzcCk7CisKKwkJaWYo Y29tcG9zZSAmJiBjY2Nsa3VwKCpzcCkgPT0gMCl7CisJCQlmb3IocnAgPSBzcCArIDE7IHJw IDwgdHA7IHJwKyspeworCQkJCXJbMF0gPSAqc3A7CisJCQkJclsxXSA9ICpycDsKKwkJCQlj ID0gX3J1bmVyZWNvbXAocik7CisJCQkJaWYoYyAhPSAwKXsKKwkJCQkJKnNwID0gYzsKKwkJ CQkJZm9yKHJycCA9IHJwOyBycnAgPiBzcDsgcnJwLS0pCisJCQkJCQkqcnJwID0gcnJwWy0x XTsKKwkJCQkJc3ArKzsKKwkJCQl9IGVsc2Ugd2hpbGUocnAgKyAxIDwgdHAgJiYgY2NjbGt1 cCgqcnApID09IGNjY2xrdXAoKihycCsxKSkpCisJCQkJCXJwKys7CisJCQl9CisJCX0KKwor CQlmb3IoOyBzcCA8IHRwOyBzcCsrKXsKKwkJCWlmKG1vZGUpeworCQkJCWlmKGRzdCA8IHN0 b3ApCisJCQkJCSpkc3QrKyA9ICpzcDsKKwkJCQlzaXplKys7CisJCQl9IGVsc2UgeworCQkJ CXcyID0gcnVuZWxlbigqc3ApOworCQkJCWlmKHNkc3QrdzIgPCBzdHJzdG9wKQorCQkJCQlz ZHN0ICs9IHJ1bmV0b2NoYXIoc2RzdCwgc3ApOworCQkJCXNpemUgKz0gdzI7CisJCQl9CisJ CX0KKwkJaWYobW9kZSkKKwkJCXArKzsKKwkJZWxzZQorCQkJc3RycCArPSB3OworCX0KKwlp Zihtb2RlKQorCQkqZHN0ID0gMDsKKwllbHNlCisJCSpzZHN0ID0gMDsKKwlyZXR1cm4gc2l6 ZTsKK30KKworaW50CitydW5lY29tcChSdW5lICpkc3QsIFJ1bmUgKnNyYywgaW50IG1heCkK K3sKKwlyZXR1cm4gcnVuZW5vcm0oZHN0LCBzcmMsIG5pbCwgbmlsLCBtYXgsIDEpOworfQor CitpbnQKK3J1bmVkZWNvbXAoUnVuZSAqZHN0LCBSdW5lICpzcmMsIGludCBtYXgpCit7CisJ cmV0dXJuIHJ1bmVub3JtKGRzdCwgc3JjLCBuaWwsIG5pbCwgbWF4LCAwKTsKK30KKworaW50 Cit1dGZjb21wKGNoYXIgKmRzdCwgY2hhciAqc3JjLCBpbnQgbWF4KQoreworCXJldHVybiBy dW5lbm9ybShuaWwsIG5pbCwgZHN0LCBzcmMsIG1heCwgMSk7Cit9CisKK2ludAordXRmZGVj b21wKGNoYXIgKmRzdCwgY2hhciAqc3JjLCBpbnQgbWF4KQoreworCXJldHVybiBydW5lbm9y bShuaWwsIG5pbCwgZHN0LCBzcmMsIG1heCwgMCk7CQorfQotLS0gL2Rldi9udWxsCisrKyBi Ly9zeXMvc3JjL2xpYmMvcG9ydC9ydW5ldG90eXBlLmMKQEAgLTEsMCArMSwyMiBAQAorI2lu Y2x1ZGUgPHUuaD4KKyNpbmNsdWRlIDxsaWJjLmg+CisKKyNpbmNsdWRlICJydW5ldG90eXBl ZGF0YSIKKworUnVuZQordG91cHBlcnJ1bmUoUnVuZSBjKQoreworCXJldHVybiBjICsgdXBw ZXJsa3VwKGMpOworfQorCitSdW5lCit0b2xvd2VycnVuZShSdW5lIGMpCit7CisJcmV0dXJu IGMgKyBsb3dlcmxrdXAoYyk7Cit9CisKK1J1bmUKK3RvdGl0bGVydW5lKFJ1bmUgYykKK3sK KwlyZXR1cm4gYyArIHRpdGxlbGt1cChjKTsKK30KLS0tIGEvL3N5cy9zcmMvbGliYy9wb3J0 L3J1bmV0eXBlLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxMTgxICsxLDAgQEAKLSNpbmNsdWRl CTx1Lmg+Ci0jaW5jbHVkZQk8bGliYy5oPgotCi0vKgotICogYWxwaGEgcmFuZ2VzIC0KLSAq CW9ubHkgY292ZXJzIHJhbmdlcyBub3QgaW4gbG93ZXJ8fHVwcGVyCi0gKi8KLXN0YXRpYwot UnVuZQlfYWxwaGEyW10gPQotewotCTB4MDBkOCwJMHgwMGY2LAkvKiDDmCAtIMO2ICovCi0J MHgwMGY4LAkweDAxZjUsCS8qIMO4IC0gx7UgKi8KLQkweDAyNTAsCTB4MDJhOCwJLyogyZAg LSDKqCAqLwotCTB4MDM4ZSwJMHgwM2ExLAkvKiDOjiAtIM6hICovCi0JMHgwM2EzLAkweDAz Y2UsCS8qIM6jIC0gz44gKi8KLQkweDAzZDAsCTB4MDNkNiwJLyogz5AgLSDPliAqLwotCTB4 MDNlMiwJMHgwM2YzLAkvKiDPoiAtIM+zICovCi0JMHgwNDkwLAkweDA0YzQsCS8qINKQIC0g 04QgKi8KLQkweDA1NjEsCTB4MDU4NywJLyog1aEgLSDWhyAqLwotCTB4MDVkMCwJMHgwNWVh LAkvKiDXkCAtINeqICovCi0JMHgwNWYwLAkweDA1ZjIsCS8qINewIC0g17IgKi8KLQkweDA2 MjEsCTB4MDYzYSwJLyog2KEgLSDYuiAqLwotCTB4MDY0MCwJMHgwNjRhLAkvKiDZgCAtINmK ICovCi0JMHgwNjcxLAkweDA2YjcsCS8qINmxIC0g2rcgKi8KLQkweDA2YmEsCTB4MDZiZSwJ Lyog2rogLSDaviAqLwotCTB4MDZjMCwJMHgwNmNlLAkvKiDbgCAtINuOICovCi0JMHgwNmQw LAkweDA2ZDMsCS8qINuQIC0g25MgKi8KLQkweDA5MDUsCTB4MDkzOSwJLyog4KSFIC0g4KS5 ICovCi0JMHgwOTU4LAkweDA5NjEsCS8qIOClmCAtIOCloSAqLwotCTB4MDk4NSwJMHgwOThj LAkvKiDgpoUgLSDgpowgKi8KLQkweDA5OGYsCTB4MDk5MCwJLyog4KaPIC0g4KaQICovCi0J MHgwOTkzLAkweDA5YTgsCS8qIOCmkyAtIOCmqCAqLwotCTB4MDlhYSwJMHgwOWIwLAkvKiDg pqogLSDgprAgKi8KLQkweDA5YjYsCTB4MDliOSwJLyog4Ka2IC0g4Ka5ICovCi0JMHgwOWRj LAkweDA5ZGQsCS8qIOCnnCAtIOCnnSAqLwotCTB4MDlkZiwJMHgwOWUxLAkvKiDgp58gLSDg p6EgKi8KLQkweDA5ZjAsCTB4MDlmMSwJLyog4KewIC0g4KexICovCi0JMHgwYTA1LAkweDBh MGEsCS8qIOCohSAtIOCoiiAqLwotCTB4MGEwZiwJMHgwYTEwLAkvKiDgqI8gLSDgqJAgKi8K LQkweDBhMTMsCTB4MGEyOCwJLyog4KiTIC0g4KioICovCi0JMHgwYTJhLAkweDBhMzAsCS8q IOCoqiAtIOCosCAqLwotCTB4MGEzMiwJMHgwYTMzLAkvKiDgqLIgLSDgqLMgKi8KLQkweDBh MzUsCTB4MGEzNiwJLyog4Ki1IC0g4Ki2ICovCi0JMHgwYTM4LAkweDBhMzksCS8qIOCouCAt IOCouSAqLwotCTB4MGE1OSwJMHgwYTVjLAkvKiDgqZkgLSDgqZwgKi8KLQkweDBhODUsCTB4 MGE4YiwJLyog4KqFIC0g4KqLICovCi0JMHgwYThmLAkweDBhOTEsCS8qIOCqjyAtIOCqkSAq LwotCTB4MGE5MywJMHgwYWE4LAkvKiDgqpMgLSDgqqggKi8KLQkweDBhYWEsCTB4MGFiMCwJ Lyog4KqqIC0g4KqwICovCi0JMHgwYWIyLAkweDBhYjMsCS8qIOCqsiAtIOCqsyAqLwotCTB4 MGFiNSwJMHgwYWI5LAkvKiDgqrUgLSDgqrkgKi8KLQkweDBiMDUsCTB4MGIwYywJLyog4KyF IC0g4KyMICovCi0JMHgwYjBmLAkweDBiMTAsCS8qIOCsjyAtIOCskCAqLwotCTB4MGIxMywJ MHgwYjI4LAkvKiDgrJMgLSDgrKggKi8KLQkweDBiMmEsCTB4MGIzMCwJLyog4KyqIC0g4Kyw ICovCi0JMHgwYjMyLAkweDBiMzMsCS8qIOCssiAtIOCssyAqLwotCTB4MGIzNiwJMHgwYjM5 LAkvKiDgrLYgLSDgrLkgKi8KLQkweDBiNWMsCTB4MGI1ZCwJLyog4K2cIC0g4K2dICovCi0J MHgwYjVmLAkweDBiNjEsCS8qIOCtnyAtIOCtoSAqLwotCTB4MGI4NSwJMHgwYjhhLAkvKiDg roUgLSDgroogKi8KLQkweDBiOGUsCTB4MGI5MCwJLyog4K6OIC0g4K6QICovCi0JMHgwYjky LAkweDBiOTUsCS8qIOCukiAtIOCulSAqLwotCTB4MGI5OSwJMHgwYjlhLAkvKiDgrpkgLSDg rpogKi8KLQkweDBiOWUsCTB4MGI5ZiwJLyog4K6eIC0g4K6fICovCi0JMHgwYmEzLAkweDBi YTQsCS8qIOCuoyAtIOCupCAqLwotCTB4MGJhOCwJMHgwYmFhLAkvKiDgrqggLSDgrqogKi8K LQkweDBiYWUsCTB4MGJiNSwJLyog4K6uIC0g4K61ICovCi0JMHgwYmI3LAkweDBiYjksCS8q IOCutyAtIOCuuSAqLwotCTB4MGMwNSwJMHgwYzBjLAkvKiDgsIUgLSDgsIwgKi8KLQkweDBj MGUsCTB4MGMxMCwJLyog4LCOIC0g4LCQICovCi0JMHgwYzEyLAkweDBjMjgsCS8qIOCwkiAt IOCwqCAqLwotCTB4MGMyYSwJMHgwYzMzLAkvKiDgsKogLSDgsLMgKi8KLQkweDBjMzUsCTB4 MGMzOSwJLyog4LC1IC0g4LC5ICovCi0JMHgwYzYwLAkweDBjNjEsCS8qIOCxoCAtIOCxoSAq LwotCTB4MGM4NSwJMHgwYzhjLAkvKiDgsoUgLSDgsowgKi8KLQkweDBjOGUsCTB4MGM5MCwJ Lyog4LKOIC0g4LKQICovCi0JMHgwYzkyLAkweDBjYTgsCS8qIOCykiAtIOCyqCAqLwotCTB4 MGNhYSwJMHgwY2IzLAkvKiDgsqogLSDgsrMgKi8KLQkweDBjYjUsCTB4MGNiOSwJLyog4LK1 IC0g4LK5ICovCi0JMHgwY2UwLAkweDBjZTEsCS8qIOCzoCAtIOCzoSAqLwotCTB4MGQwNSwJ MHgwZDBjLAkvKiDgtIUgLSDgtIwgKi8KLQkweDBkMGUsCTB4MGQxMCwJLyog4LSOIC0g4LSQ ICovCi0JMHgwZDEyLAkweDBkMjgsCS8qIOC0kiAtIOC0qCAqLwotCTB4MGQyYSwJMHgwZDM5 LAkvKiDgtKogLSDgtLkgKi8KLQkweDBkNjAsCTB4MGQ2MSwJLyog4LWgIC0g4LWhICovCi0J MHgwZTAxLAkweDBlMzAsCS8qIOC4gSAtIOC4sCAqLwotCTB4MGUzMiwJMHgwZTMzLAkvKiDg uLIgLSDguLMgKi8KLQkweDBlNDAsCTB4MGU0NiwJLyog4LmAIC0g4LmGICovCi0JMHgwZTVh LAkweDBlNWIsCS8qIOC5miAtIOC5myAqLwotCTB4MGU4MSwJMHgwZTgyLAkvKiDguoEgLSDg uoIgKi8KLQkweDBlODcsCTB4MGU4OCwJLyog4LqHIC0g4LqIICovCi0JMHgwZTk0LAkweDBl OTcsCS8qIOC6lCAtIOC6lyAqLwotCTB4MGU5OSwJMHgwZTlmLAkvKiDgupkgLSDgup8gKi8K LQkweDBlYTEsCTB4MGVhMywJLyog4LqhIC0g4LqjICovCi0JMHgwZWFhLAkweDBlYWIsCS8q IOC6qiAtIOC6qyAqLwotCTB4MGVhZCwJMHgwZWFlLAkvKiDguq0gLSDguq4gKi8KLQkweDBl YjIsCTB4MGViMywJLyog4LqyIC0g4LqzICovCi0JMHgwZWMwLAkweDBlYzQsCS8qIOC7gCAt IOC7hCAqLwotCTB4MGVkYywJMHgwZWRkLAkvKiDgu5wgLSDgu50gKi8KLQkweDBmMTgsCTB4 MGYxOSwJLyog4LyYIC0g4LyZICovCi0JMHgwZjQwLAkweDBmNDcsCS8qIOC9gCAtIOC9hyAq LwotCTB4MGY0OSwJMHgwZjY5LAkvKiDgvYkgLSDgvakgKi8KLQkweDEwZDAsCTB4MTBmNiwJ Lyog4YOQIC0g4YO2ICovCi0JMHgxMTAwLAkweDExNTksCS8qIOGEgCAtIOGFmSAqLwotCTB4 MTE1ZiwJMHgxMWEyLAkvKiDhhZ8gLSDhhqIgKi8KLQkweDExYTgsCTB4MTFmOSwJLyog4Yao IC0g4Ye5ICovCi0JMHgxZTAwLAkweDFlOWIsCS8qIOG4gCAtIOG6myAqLwotCTB4MWY1MCwJ MHgxZjU3LAkvKiDhvZAgLSDhvZcgKi8KLQkweDFmODAsCTB4MWZiNCwJLyog4b6AIC0g4b60 ICovCi0JMHgxZmI2LAkweDFmYmMsCS8qIOG+tiAtIOG+vCAqLwotCTB4MWZjMiwJMHgxZmM0 LAkvKiDhv4IgLSDhv4QgKi8KLQkweDFmYzYsCTB4MWZjYywJLyog4b+GIC0g4b+MICovCi0J MHgxZmQwLAkweDFmZDMsCS8qIOG/kCAtIOG/kyAqLwotCTB4MWZkNiwJMHgxZmRiLAkvKiDh v5YgLSDhv5sgKi8KLQkweDFmZTAsCTB4MWZlYywJLyog4b+gIC0g4b+sICovCi0JMHgxZmYy LAkweDFmZjQsCS8qIOG/siAtIOG/tCAqLwotCTB4MWZmNiwJMHgxZmZjLAkvKiDhv7YgLSDh v7wgKi8KLQkweDIxMGEsCTB4MjExMywJLyog4oSKIC0g4oSTICovCi0JMHgyMTE1LAkweDIx MWQsCS8qIOKElSAtIOKEnSAqLwotCTB4MjEyMCwJMHgyMTIyLAkvKiDihKAgLSDihKIgKi8K LQkweDIxMmEsCTB4MjEzMSwJLyog4oSqIC0g4oSxICovCi0JMHgyMTMzLAkweDIxMzgsCS8q IOKEsyAtIOKEuCAqLwotCTB4MzA0MSwJMHgzMDk0LAkvKiDjgYEgLSDjgpQgKi8KLQkweDMw YTEsCTB4MzBmYSwJLyog44KhIC0g44O6ICovCi0JMHgzMTA1LAkweDMxMmMsCS8qIOOEhSAt IOOErCAqLwotCTB4MzEzMSwJMHgzMThlLAkvKiDjhLEgLSDjho4gKi8KLQkweDMxOTIsCTB4 MzE5ZiwJLyog44aSIC0g44afICovCi0JMHgzMjYwLAkweDMyN2IsCS8qIOOJoCAtIOOJuyAq LwotCTB4MzI4YSwJMHgzMmIwLAkvKiDjioogLSDjirAgKi8KLQkweDMyZDAsCTB4MzJmZSwJ Lyog44uQIC0g44u+ICovCi0JMHgzMzAwLAkweDMzNTcsCS8qIOOMgCAtIOONlyAqLwotCTB4 MzM3MSwJMHgzMzc2LAkvKiDjjbEgLSDjjbYgKi8KLQkweDMzN2IsCTB4MzM5NCwJLyog4427 IC0g446UICovCi0JMHgzMzk5LAkweDMzOWUsCS8qIOOOmSAtIOOOniAqLwotCTB4MzNhOSwJ MHgzM2FkLAkvKiDjjqkgLSDjjq0gKi8KLQkweDMzYjAsCTB4MzNjMSwJLyog446wIC0g44+B ICovCi0JMHgzM2MzLAkweDMzYzUsCS8qIOOPgyAtIOOPhSAqLwotCTB4MzNjNywJMHgzM2Q3 LAkvKiDjj4cgLSDjj5cgKi8KLQkweDMzZDksCTB4MzNkZCwJLyog44+ZIC0g44+dICovCi0J MHg0ZTAwLAkweDlmZmYsCS8qIOS4gCAtIOm/vyAqLwotCTB4YWMwMCwJMHhkN2EzLAkvKiDq sIAgLSDtnqMgKi8KLQkweGY5MDAsCTB4ZmIwNiwJLyog76SAIC0g76yGICovCi0JMHhmYjEz LAkweGZiMTcsCS8qIO+skyAtIO+slyAqLwotCTB4ZmIxZiwJMHhmYjI4LAkvKiDvrJ8gLSDv rKggKi8KLQkweGZiMmEsCTB4ZmIzNiwJLyog76yqIC0g76y2ICovCi0JMHhmYjM4LAkweGZi M2MsCS8qIO+suCAtIO+svCAqLwotCTB4ZmI0MCwJMHhmYjQxLAkvKiDvrYAgLSDvrYEgKi8K LQkweGZiNDMsCTB4ZmI0NCwJLyog762DIC0g762EICovCi0JMHhmYjQ2LAkweGZiYjEsCS8q IO+thiAtIO+usSAqLwotCTB4ZmJkMywJMHhmZDNkLAkvKiDvr5MgLSDvtL0gKi8KLQkweGZk NTAsCTB4ZmQ4ZiwJLyog77WQIC0g77aPICovCi0JMHhmZDkyLAkweGZkYzcsCS8qIO+2kiAt IO+3hyAqLwotCTB4ZmRmMCwJMHhmZGY5LAkvKiDvt7AgLSDvt7kgKi8KLQkweGZlNzAsCTB4 ZmU3MiwJLyog77mwIC0g77myICovCi0JMHhmZTc2LAkweGZlZmMsCS8qIO+5tiAtIO+7vCAq LwotCTB4ZmY2NiwJMHhmZjZmLAkvKiDvvaYgLSDvva8gKi8KLQkweGZmNzEsCTB4ZmY5ZCwJ Lyog772xIC0g776dICovCi0JMHhmZmEwLAkweGZmYmUsCS8qIO++oCAtIO++viAqLwotCTB4 ZmZjMiwJMHhmZmM3LAkvKiDvv4IgLSDvv4cgKi8KLQkweGZmY2EsCTB4ZmZjZiwJLyog77+K IC0g77+PICovCi0JMHhmZmQyLAkweGZmZDcsCS8qIO+/kiAtIO+/lyAqLwotCTB4ZmZkYSwJ MHhmZmRjLAkvKiDvv5ogLSDvv5wgKi8KLX07Ci0KLS8qCi0gKiBhbHBoYSBzaW5nbGV0cyAt Ci0gKglvbmx5IGNvdmVycyByYW5nZXMgbm90IGluIGxvd2VyfHx1cHBlcgotICovCi1zdGF0 aWMKLVJ1bmUJX2FscGhhMVtdID0KLXsKLQkweDAwYWEsCS8qIMKqICovCi0JMHgwMGI1LAkv KiDCtSAqLwotCTB4MDBiYSwJLyogwrogKi8KLQkweDAzZGEsCS8qIM+aICovCi0JMHgwM2Rj LAkvKiDPnCAqLwotCTB4MDNkZSwJLyogz54gKi8KLQkweDAzZTAsCS8qIM+gICovCi0JMHgw NmQ1LAkvKiDblSAqLwotCTB4MDliMiwJLyog4KayICovCi0JMHgwYTVlLAkvKiDgqZ4gKi8K LQkweDBhOGQsCS8qIOCqjSAqLwotCTB4MGFlMCwJLyog4KugICovCi0JMHgwYjljLAkvKiDg rpwgKi8KLQkweDBjZGUsCS8qIOCzniAqLwotCTB4MGU0ZiwJLyog4LmPICovCi0JMHgwZTg0 LAkvKiDguoQgKi8KLQkweDBlOGEsCS8qIOC6iiAqLwotCTB4MGU4ZCwJLyog4LqNICovCi0J MHgwZWE1LAkvKiDguqUgKi8KLQkweDBlYTcsCS8qIOC6pyAqLwotCTB4MGViMCwJLyog4Lqw ICovCi0JMHgwZWJkLAkvKiDgur0gKi8KLQkweDFmYmUsCS8qIOG+viAqLwotCTB4MjA3ZiwJ Lyog4oG/ICovCi0JMHgyMGE4LAkvKiDigqggKi8KLQkweDIxMDIsCS8qIOKEgiAqLwotCTB4 MjEwNywJLyog4oSHICovCi0JMHgyMTI0LAkvKiDihKQgKi8KLQkweDIxMjYsCS8qIOKEpiAq LwotCTB4MjEyOCwJLyog4oSoICovCi0JMHhmYjNlLAkvKiDvrL4gKi8KLQkweGZlNzQsCS8q IO+5tCAqLwotfTsKLQotLyoKLSAqIHNwYWNlIHJhbmdlcwotICovCi1zdGF0aWMKLVJ1bmUJ X3NwYWNlMltdID0KLXsKLQkweDAwMDksCTB4MDAwYSwJLyogdGFiIGFuZCBuZXdsaW5lICov Ci0JMHgwMDIwLAkweDAwMjAsCS8qIHNwYWNlICovCi0JMHgwMDg1LCAweDAwODUsCi0JMHgw MGEwLAkweDAwYTAsCS8qIMKgICovCi0JMHgxNjgwLCAweDE2ODAsCi0JMHgxODBlLCAweDE4 MGUsCi0JMHgyMDAwLAkweDIwMGIsCS8qIOKAgCAtIOKAiyAqLwotCTB4MjAyOCwJMHgyMDI5 LAkvKiDigKggLSDigKkgKi8KLQkweDIwMmYsIDB4MjAyZiwKLQkweDIwNWYsIDB4MjA1ZiwK LQkweDMwMDAsCTB4MzAwMCwJLyog44CAICovCi0JMHhmZWZmLAkweGZlZmYsCS8qIO+7vyAq LwotfTsKLQotLyoKLSAqIGxvd2VyIGNhc2UgcmFuZ2VzCi0gKgkzcmQgY29sIGlzIGNvbnZl cnNpb24gZXhjZXNzIDUwMAotICovCi1zdGF0aWMKLVJ1bmUJX3RvdXBwZXIyW10gPQotewot CTB4MDA2MSwJMHgwMDdhLCA0NjgsCS8qIGEteiBBLVogKi8KLQkweDAwZTAsCTB4MDBmNiwg NDY4LAkvKiDDoC3DtiDDgC3DliAqLwotCTB4MDBmOCwJMHgwMGZlLCA0NjgsCS8qIMO4LcO+ IMOYLcOeICovCi0JMHgwMjU2LAkweDAyNTcsIDI5NSwJLyogyZYtyZcgxoktxoogKi8KLQkw eDAyNTgsCTB4MDI1OSwgMjk4LAkvKiDJmC3JmSDGji3GjyAqLwotCTB4MDI4YSwJMHgwMjhi LCAyODMsCS8qIMqKLcqLIMaxLcayICovCi0JMHgwM2FkLAkweDAzYWYsIDQ2MywJLyogzq0t zq8gzogtzoogKi8KLQkweDAzYjEsCTB4MDNjMSwgNDY4LAkvKiDOsS3PgSDOkS3OoSAqLwot CTB4MDNjMywJMHgwM2NiLCA0NjgsCS8qIM+DLc+LIM6jLc6rICovCi0JMHgwM2NkLAkweDAz Y2UsIDQzNywJLyogz40tz44gzo4tzo8gKi8KLQkweDA0MzAsCTB4MDQ0ZiwgNDY4LAkvKiDQ sC3RjyDQkC3QryAqLwotCTB4MDQ1MSwJMHgwNDVjLCA0MjAsCS8qINGRLdGcINCBLdCMICov Ci0JMHgwNDVlLAkweDA0NWYsIDQyMCwJLyog0Z4t0Z8g0I4t0I8gKi8KLQkweDA1NjEsCTB4 MDU4NiwgNDUyLAkvKiDVoS3WhiDUsS3VliAqLwotCTB4MWYwMCwJMHgxZjA3LCA1MDgsCS8q IOG8gC3hvIcg4byILeG8jyAqLwotCTB4MWYxMCwJMHgxZjE1LCA1MDgsCS8qIOG8kC3hvJUg 4byYLeG8nSAqLwotCTB4MWYyMCwJMHgxZjI3LCA1MDgsCS8qIOG8oC3hvKcg4byoLeG8ryAq LwotCTB4MWYzMCwJMHgxZjM3LCA1MDgsCS8qIOG8sC3hvLcg4by4LeG8vyAqLwotCTB4MWY0 MCwJMHgxZjQ1LCA1MDgsCS8qIOG9gC3hvYUg4b2ILeG9jSAqLwotCTB4MWY2MCwJMHgxZjY3 LCA1MDgsCS8qIOG9oC3hvacg4b2oLeG9ryAqLwotCTB4MWY3MCwJMHgxZjcxLCA1NzQsCS8q IOG9sC3hvbEg4b66LeG+uyAqLwotCTB4MWY3MiwJMHgxZjc1LCA1ODYsCS8qIOG9si3hvbUg 4b+ILeG/iyAqLwotCTB4MWY3NiwJMHgxZjc3LCA2MDAsCS8qIOG9ti3hvbcg4b+aLeG/myAq LwotCTB4MWY3OCwJMHgxZjc5LCA2MjgsCS8qIOG9uC3hvbkg4b+4LeG/uSAqLwotCTB4MWY3 YSwJMHgxZjdiLCA2MTIsCS8qIOG9ui3hvbsg4b+qLeG/qyAqLwotCTB4MWY3YywJMHgxZjdk LCA2MjYsCS8qIOG9vC3hvb0g4b+6LeG/uyAqLwotCTB4MWY4MCwJMHgxZjg3LCA1MDgsCS8q IOG+gC3hvocg4b6ILeG+jyAqLwotCTB4MWY5MCwJMHgxZjk3LCA1MDgsCS8qIOG+kC3hvpcg 4b6YLeG+nyAqLwotCTB4MWZhMCwJMHgxZmE3LCA1MDgsCS8qIOG+oC3hvqcg4b6oLeG+ryAq LwotCTB4MWZiMCwJMHgxZmIxLCA1MDgsCS8qIOG+sC3hvrEg4b64LeG+uSAqLwotCTB4MWZk MCwJMHgxZmQxLCA1MDgsCS8qIOG/kC3hv5Eg4b+YLeG/mSAqLwotCTB4MWZlMCwJMHgxZmUx LCA1MDgsCS8qIOG/oC3hv6Eg4b+oLeG/qSAqLwotCTB4MjE3MCwJMHgyMTdmLCA0ODQsCS8q IOKFsC3ihb8g4oWgLeKFryAqLwotCTB4MjRkMCwJMHgyNGU5LCA0NzQsCS8qIOKTkC3ik6kg 4pK2LeKTjyAqLwotCTB4ZmY0MSwJMHhmZjVhLCA0NjgsCS8qIO+9gS3vvZog77yhLe+8uiAq LwotfTsKLQotLyoKLSAqIGxvd2VyIGNhc2Ugc2luZ2xldHMKLSAqCTJuZCBjb2wgaXMgY29u dmVyc2lvbiBleGNlc3MgNTAwCi0gKi8KLXN0YXRpYwotUnVuZQlfdG91cHBlcjFbXSA9Ci17 Ci0JMHgwMGZmLCA2MjEsCS8qIMO/IMW4ICovCi0JMHgwMTAxLCA0OTksCS8qIMSBIMSAICov Ci0JMHgwMTAzLCA0OTksCS8qIMSDIMSCICovCi0JMHgwMTA1LCA0OTksCS8qIMSFIMSEICov Ci0JMHgwMTA3LCA0OTksCS8qIMSHIMSGICovCi0JMHgwMTA5LCA0OTksCS8qIMSJIMSIICov Ci0JMHgwMTBiLCA0OTksCS8qIMSLIMSKICovCi0JMHgwMTBkLCA0OTksCS8qIMSNIMSMICov Ci0JMHgwMTBmLCA0OTksCS8qIMSPIMSOICovCi0JMHgwMTExLCA0OTksCS8qIMSRIMSQICov Ci0JMHgwMTEzLCA0OTksCS8qIMSTIMSSICovCi0JMHgwMTE1LCA0OTksCS8qIMSVIMSUICov Ci0JMHgwMTE3LCA0OTksCS8qIMSXIMSWICovCi0JMHgwMTE5LCA0OTksCS8qIMSZIMSYICov Ci0JMHgwMTFiLCA0OTksCS8qIMSbIMSaICovCi0JMHgwMTFkLCA0OTksCS8qIMSdIMScICov Ci0JMHgwMTFmLCA0OTksCS8qIMSfIMSeICovCi0JMHgwMTIxLCA0OTksCS8qIMShIMSgICov Ci0JMHgwMTIzLCA0OTksCS8qIMSjIMSiICovCi0JMHgwMTI1LCA0OTksCS8qIMSlIMSkICov Ci0JMHgwMTI3LCA0OTksCS8qIMSnIMSmICovCi0JMHgwMTI5LCA0OTksCS8qIMSpIMSoICov Ci0JMHgwMTJiLCA0OTksCS8qIMSrIMSqICovCi0JMHgwMTJkLCA0OTksCS8qIMStIMSsICov Ci0JMHgwMTJmLCA0OTksCS8qIMSvIMSuICovCi0JMHgwMTMxLCAyNjgsCS8qIMSxIEkgKi8K LQkweDAxMzMsIDQ5OSwJLyogxLMgxLIgKi8KLQkweDAxMzUsIDQ5OSwJLyogxLUgxLQgKi8K LQkweDAxMzcsIDQ5OSwJLyogxLcgxLYgKi8KLQkweDAxM2EsIDQ5OSwJLyogxLogxLkgKi8K LQkweDAxM2MsIDQ5OSwJLyogxLwgxLsgKi8KLQkweDAxM2UsIDQ5OSwJLyogxL4gxL0gKi8K LQkweDAxNDAsIDQ5OSwJLyogxYAgxL8gKi8KLQkweDAxNDIsIDQ5OSwJLyogxYIgxYEgKi8K LQkweDAxNDQsIDQ5OSwJLyogxYQgxYMgKi8KLQkweDAxNDYsIDQ5OSwJLyogxYYgxYUgKi8K LQkweDAxNDgsIDQ5OSwJLyogxYggxYcgKi8KLQkweDAxNGIsIDQ5OSwJLyogxYsgxYogKi8K LQkweDAxNGQsIDQ5OSwJLyogxY0gxYwgKi8KLQkweDAxNGYsIDQ5OSwJLyogxY8gxY4gKi8K LQkweDAxNTEsIDQ5OSwJLyogxZEgxZAgKi8KLQkweDAxNTMsIDQ5OSwJLyogxZMgxZIgKi8K LQkweDAxNTUsIDQ5OSwJLyogxZUgxZQgKi8KLQkweDAxNTcsIDQ5OSwJLyogxZcgxZYgKi8K LQkweDAxNTksIDQ5OSwJLyogxZkgxZggKi8KLQkweDAxNWIsIDQ5OSwJLyogxZsgxZogKi8K LQkweDAxNWQsIDQ5OSwJLyogxZ0gxZwgKi8KLQkweDAxNWYsIDQ5OSwJLyogxZ8gxZ4gKi8K LQkweDAxNjEsIDQ5OSwJLyogxaEgxaAgKi8KLQkweDAxNjMsIDQ5OSwJLyogxaMgxaIgKi8K LQkweDAxNjUsIDQ5OSwJLyogxaUgxaQgKi8KLQkweDAxNjcsIDQ5OSwJLyogxacgxaYgKi8K LQkweDAxNjksIDQ5OSwJLyogxakgxaggKi8KLQkweDAxNmIsIDQ5OSwJLyogxasgxaogKi8K LQkweDAxNmQsIDQ5OSwJLyogxa0gxawgKi8KLQkweDAxNmYsIDQ5OSwJLyogxa8gxa4gKi8K LQkweDAxNzEsIDQ5OSwJLyogxbEgxbAgKi8KLQkweDAxNzMsIDQ5OSwJLyogxbMgxbIgKi8K LQkweDAxNzUsIDQ5OSwJLyogxbUgxbQgKi8KLQkweDAxNzcsIDQ5OSwJLyogxbcgxbYgKi8K LQkweDAxN2EsIDQ5OSwJLyogxbogxbkgKi8KLQkweDAxN2MsIDQ5OSwJLyogxbwgxbsgKi8K LQkweDAxN2UsIDQ5OSwJLyogxb4gxb0gKi8KLQkweDAxN2YsIDIwMCwJLyogxb8gUyAqLwot CTB4MDE4MywgNDk5LAkvKiDGgyDGgiAqLwotCTB4MDE4NSwgNDk5LAkvKiDGhSDGhCAqLwot CTB4MDE4OCwgNDk5LAkvKiDGiCDGhyAqLwotCTB4MDE4YywgNDk5LAkvKiDGjCDGiyAqLwot CTB4MDE5MiwgNDk5LAkvKiDGkiDGkSAqLwotCTB4MDE5OSwgNDk5LAkvKiDGmSDGmCAqLwot CTB4MDFhMSwgNDk5LAkvKiDGoSDGoCAqLwotCTB4MDFhMywgNDk5LAkvKiDGoyDGoiAqLwot CTB4MDFhNSwgNDk5LAkvKiDGpSDGpCAqLwotCTB4MDFhOCwgNDk5LAkvKiDGqCDGpyAqLwot CTB4MDFhZCwgNDk5LAkvKiDGrSDGrCAqLwotCTB4MDFiMCwgNDk5LAkvKiDGsCDGryAqLwot CTB4MDFiNCwgNDk5LAkvKiDGtCDGsyAqLwotCTB4MDFiNiwgNDk5LAkvKiDGtiDGtSAqLwot CTB4MDFiOSwgNDk5LAkvKiDGuSDGuCAqLwotCTB4MDFiZCwgNDk5LAkvKiDGvSDGvCAqLwot CTB4MDFjNSwgNDk5LAkvKiDHhSDHhCAqLwotCTB4MDFjNiwgNDk4LAkvKiDHhiDHhCAqLwot CTB4MDFjOCwgNDk5LAkvKiDHiCDHhyAqLwotCTB4MDFjOSwgNDk4LAkvKiDHiSDHhyAqLwot CTB4MDFjYiwgNDk5LAkvKiDHiyDHiiAqLwotCTB4MDFjYywgNDk4LAkvKiDHjCDHiiAqLwot CTB4MDFjZSwgNDk5LAkvKiDHjiDHjSAqLwotCTB4MDFkMCwgNDk5LAkvKiDHkCDHjyAqLwot CTB4MDFkMiwgNDk5LAkvKiDHkiDHkSAqLwotCTB4MDFkNCwgNDk5LAkvKiDHlCDHkyAqLwot CTB4MDFkNiwgNDk5LAkvKiDHliDHlSAqLwotCTB4MDFkOCwgNDk5LAkvKiDHmCDHlyAqLwot CTB4MDFkYSwgNDk5LAkvKiDHmiDHmSAqLwotCTB4MDFkYywgNDk5LAkvKiDHnCDHmyAqLwot CTB4MDFkZiwgNDk5LAkvKiDHnyDHniAqLwotCTB4MDFlMSwgNDk5LAkvKiDHoSDHoCAqLwot CTB4MDFlMywgNDk5LAkvKiDHoyDHoiAqLwotCTB4MDFlNSwgNDk5LAkvKiDHpSDHpCAqLwot CTB4MDFlNywgNDk5LAkvKiDHpyDHpiAqLwotCTB4MDFlOSwgNDk5LAkvKiDHqSDHqCAqLwot CTB4MDFlYiwgNDk5LAkvKiDHqyDHqiAqLwotCTB4MDFlZCwgNDk5LAkvKiDHrSDHrCAqLwot CTB4MDFlZiwgNDk5LAkvKiDHryDHriAqLwotCTB4MDFmMiwgNDk5LAkvKiDHsiDHsSAqLwot CTB4MDFmMywgNDk4LAkvKiDHsyDHsSAqLwotCTB4MDFmNSwgNDk5LAkvKiDHtSDHtCAqLwot CTB4MDFmYiwgNDk5LAkvKiDHuyDHuiAqLwotCTB4MDFmZCwgNDk5LAkvKiDHvSDHvCAqLwot CTB4MDFmZiwgNDk5LAkvKiDHvyDHviAqLwotCTB4MDIwMSwgNDk5LAkvKiDIgSDIgCAqLwot CTB4MDIwMywgNDk5LAkvKiDIgyDIgiAqLwotCTB4MDIwNSwgNDk5LAkvKiDIhSDIhCAqLwot CTB4MDIwNywgNDk5LAkvKiDIhyDIhiAqLwotCTB4MDIwOSwgNDk5LAkvKiDIiSDIiCAqLwot CTB4MDIwYiwgNDk5LAkvKiDIiyDIiiAqLwotCTB4MDIwZCwgNDk5LAkvKiDIjSDIjCAqLwot CTB4MDIwZiwgNDk5LAkvKiDIjyDIjiAqLwotCTB4MDIxMSwgNDk5LAkvKiDIkSDIkCAqLwot CTB4MDIxMywgNDk5LAkvKiDIkyDIkiAqLwotCTB4MDIxNSwgNDk5LAkvKiDIlSDIlCAqLwot CTB4MDIxNywgNDk5LAkvKiDIlyDIliAqLwotCTB4MDI1MywgMjkwLAkvKiDJkyDGgSAqLwot CTB4MDI1NCwgMjk0LAkvKiDJlCDGhiAqLwotCTB4MDI1YiwgMjk3LAkvKiDJmyDGkCAqLwot CTB4MDI2MCwgMjk1LAkvKiDJoCDGkyAqLwotCTB4MDI2MywgMjkzLAkvKiDJoyDGlCAqLwot CTB4MDI2OCwgMjkxLAkvKiDJqCDGlyAqLwotCTB4MDI2OSwgMjg5LAkvKiDJqSDGliAqLwot CTB4MDI2ZiwgMjg5LAkvKiDJryDGnCAqLwotCTB4MDI3MiwgMjg3LAkvKiDJsiDGnSAqLwot CTB4MDI4MywgMjgyLAkvKiDKgyDGqSAqLwotCTB4MDI4OCwgMjgyLAkvKiDKiCDGriAqLwot CTB4MDI5MiwgMjgxLAkvKiDKkiDGtyAqLwotCTB4MDNhYywgNDYyLAkvKiDOrCDOhiAqLwot CTB4MDNjYywgNDM2LAkvKiDPjCDOjCAqLwotCTB4MDNkMCwgNDM4LAkvKiDPkCDOkiAqLwot CTB4MDNkMSwgNDQzLAkvKiDPkSDOmCAqLwotCTB4MDNkNSwgNDUzLAkvKiDPlSDOpiAqLwot CTB4MDNkNiwgNDQ2LAkvKiDPliDOoCAqLwotCTB4MDNlMywgNDk5LAkvKiDPoyDPoiAqLwot CTB4MDNlNSwgNDk5LAkvKiDPpSDPpCAqLwotCTB4MDNlNywgNDk5LAkvKiDPpyDPpiAqLwot CTB4MDNlOSwgNDk5LAkvKiDPqSDPqCAqLwotCTB4MDNlYiwgNDk5LAkvKiDPqyDPqiAqLwot CTB4MDNlZCwgNDk5LAkvKiDPrSDPrCAqLwotCTB4MDNlZiwgNDk5LAkvKiDPryDPriAqLwot CTB4MDNmMCwgNDE0LAkvKiDPsCDOmiAqLwotCTB4MDNmMSwgNDIwLAkvKiDPsSDOoSAqLwot CTB4MDQ2MSwgNDk5LAkvKiDRoSDRoCAqLwotCTB4MDQ2MywgNDk5LAkvKiDRoyDRoiAqLwot CTB4MDQ2NSwgNDk5LAkvKiDRpSDRpCAqLwotCTB4MDQ2NywgNDk5LAkvKiDRpyDRpiAqLwot CTB4MDQ2OSwgNDk5LAkvKiDRqSDRqCAqLwotCTB4MDQ2YiwgNDk5LAkvKiDRqyDRqiAqLwot CTB4MDQ2ZCwgNDk5LAkvKiDRrSDRrCAqLwotCTB4MDQ2ZiwgNDk5LAkvKiDRryDRriAqLwot CTB4MDQ3MSwgNDk5LAkvKiDRsSDRsCAqLwotCTB4MDQ3MywgNDk5LAkvKiDRsyDRsiAqLwot CTB4MDQ3NSwgNDk5LAkvKiDRtSDRtCAqLwotCTB4MDQ3NywgNDk5LAkvKiDRtyDRtiAqLwot CTB4MDQ3OSwgNDk5LAkvKiDRuSDRuCAqLwotCTB4MDQ3YiwgNDk5LAkvKiDRuyDRuiAqLwot CTB4MDQ3ZCwgNDk5LAkvKiDRvSDRvCAqLwotCTB4MDQ3ZiwgNDk5LAkvKiDRvyDRviAqLwot CTB4MDQ4MSwgNDk5LAkvKiDSgSDSgCAqLwotCTB4MDQ5MSwgNDk5LAkvKiDSkSDSkCAqLwot CTB4MDQ5MywgNDk5LAkvKiDSkyDSkiAqLwotCTB4MDQ5NSwgNDk5LAkvKiDSlSDSlCAqLwot CTB4MDQ5NywgNDk5LAkvKiDSlyDSliAqLwotCTB4MDQ5OSwgNDk5LAkvKiDSmSDSmCAqLwot CTB4MDQ5YiwgNDk5LAkvKiDSmyDSmiAqLwotCTB4MDQ5ZCwgNDk5LAkvKiDSnSDSnCAqLwot CTB4MDQ5ZiwgNDk5LAkvKiDSnyDSniAqLwotCTB4MDRhMSwgNDk5LAkvKiDSoSDSoCAqLwot CTB4MDRhMywgNDk5LAkvKiDSoyDSoiAqLwotCTB4MDRhNSwgNDk5LAkvKiDSpSDSpCAqLwot CTB4MDRhNywgNDk5LAkvKiDSpyDSpiAqLwotCTB4MDRhOSwgNDk5LAkvKiDSqSDSqCAqLwot CTB4MDRhYiwgNDk5LAkvKiDSqyDSqiAqLwotCTB4MDRhZCwgNDk5LAkvKiDSrSDSrCAqLwot CTB4MDRhZiwgNDk5LAkvKiDSryDSriAqLwotCTB4MDRiMSwgNDk5LAkvKiDSsSDSsCAqLwot CTB4MDRiMywgNDk5LAkvKiDSsyDSsiAqLwotCTB4MDRiNSwgNDk5LAkvKiDStSDStCAqLwot CTB4MDRiNywgNDk5LAkvKiDStyDStiAqLwotCTB4MDRiOSwgNDk5LAkvKiDSuSDSuCAqLwot CTB4MDRiYiwgNDk5LAkvKiDSuyDSuiAqLwotCTB4MDRiZCwgNDk5LAkvKiDSvSDSvCAqLwot CTB4MDRiZiwgNDk5LAkvKiDSvyDSviAqLwotCTB4MDRjMiwgNDk5LAkvKiDTgiDTgSAqLwot CTB4MDRjNCwgNDk5LAkvKiDThCDTgyAqLwotCTB4MDRjOCwgNDk5LAkvKiDTiCDThyAqLwot CTB4MDRjYywgNDk5LAkvKiDTjCDTiyAqLwotCTB4MDRkMSwgNDk5LAkvKiDTkSDTkCAqLwot CTB4MDRkMywgNDk5LAkvKiDTkyDTkiAqLwotCTB4MDRkNSwgNDk5LAkvKiDTlSDTlCAqLwot CTB4MDRkNywgNDk5LAkvKiDTlyDTliAqLwotCTB4MDRkOSwgNDk5LAkvKiDTmSDTmCAqLwot CTB4MDRkYiwgNDk5LAkvKiDTmyDTmiAqLwotCTB4MDRkZCwgNDk5LAkvKiDTnSDTnCAqLwot CTB4MDRkZiwgNDk5LAkvKiDTnyDTniAqLwotCTB4MDRlMSwgNDk5LAkvKiDToSDToCAqLwot CTB4MDRlMywgNDk5LAkvKiDToyDToiAqLwotCTB4MDRlNSwgNDk5LAkvKiDTpSDTpCAqLwot CTB4MDRlNywgNDk5LAkvKiDTpyDTpiAqLwotCTB4MDRlOSwgNDk5LAkvKiDTqSDTqCAqLwot CTB4MDRlYiwgNDk5LAkvKiDTqyDTqiAqLwotCTB4MDRlZiwgNDk5LAkvKiDTryDTriAqLwot CTB4MDRmMSwgNDk5LAkvKiDTsSDTsCAqLwotCTB4MDRmMywgNDk5LAkvKiDTsyDTsiAqLwot CTB4MDRmNSwgNDk5LAkvKiDTtSDTtCAqLwotCTB4MDRmOSwgNDk5LAkvKiDTuSDTuCAqLwot CTB4MWUwMSwgNDk5LAkvKiDhuIEg4biAICovCi0JMHgxZTAzLCA0OTksCS8qIOG4gyDhuIIg Ki8KLQkweDFlMDUsIDQ5OSwJLyog4biFIOG4hCAqLwotCTB4MWUwNywgNDk5LAkvKiDhuIcg 4biGICovCi0JMHgxZTA5LCA0OTksCS8qIOG4iSDhuIggKi8KLQkweDFlMGIsIDQ5OSwJLyog 4biLIOG4iiAqLwotCTB4MWUwZCwgNDk5LAkvKiDhuI0g4biMICovCi0JMHgxZTBmLCA0OTks CS8qIOG4jyDhuI4gKi8KLQkweDFlMTEsIDQ5OSwJLyog4biRIOG4kCAqLwotCTB4MWUxMywg NDk5LAkvKiDhuJMg4biSICovCi0JMHgxZTE1LCA0OTksCS8qIOG4lSDhuJQgKi8KLQkweDFl MTcsIDQ5OSwJLyog4biXIOG4liAqLwotCTB4MWUxOSwgNDk5LAkvKiDhuJkg4biYICovCi0J MHgxZTFiLCA0OTksCS8qIOG4myDhuJogKi8KLQkweDFlMWQsIDQ5OSwJLyog4bidIOG4nCAq LwotCTB4MWUxZiwgNDk5LAkvKiDhuJ8g4bieICovCi0JMHgxZTIxLCA0OTksCS8qIOG4oSDh uKAgKi8KLQkweDFlMjMsIDQ5OSwJLyog4bijIOG4oiAqLwotCTB4MWUyNSwgNDk5LAkvKiDh uKUg4bikICovCi0JMHgxZTI3LCA0OTksCS8qIOG4pyDhuKYgKi8KLQkweDFlMjksIDQ5OSwJ Lyog4bipIOG4qCAqLwotCTB4MWUyYiwgNDk5LAkvKiDhuKsg4biqICovCi0JMHgxZTJkLCA0 OTksCS8qIOG4rSDhuKwgKi8KLQkweDFlMmYsIDQ5OSwJLyog4bivIOG4riAqLwotCTB4MWUz MSwgNDk5LAkvKiDhuLEg4biwICovCi0JMHgxZTMzLCA0OTksCS8qIOG4syDhuLIgKi8KLQkw eDFlMzUsIDQ5OSwJLyog4bi1IOG4tCAqLwotCTB4MWUzNywgNDk5LAkvKiDhuLcg4bi2ICov Ci0JMHgxZTM5LCA0OTksCS8qIOG4uSDhuLggKi8KLQkweDFlM2IsIDQ5OSwJLyog4bi7IOG4 uiAqLwotCTB4MWUzZCwgNDk5LAkvKiDhuL0g4bi8ICovCi0JMHgxZTNmLCA0OTksCS8qIOG4 vyDhuL4gKi8KLQkweDFlNDEsIDQ5OSwJLyog4bmBIOG5gCAqLwotCTB4MWU0MywgNDk5LAkv KiDhuYMg4bmCICovCi0JMHgxZTQ1LCA0OTksCS8qIOG5hSDhuYQgKi8KLQkweDFlNDcsIDQ5 OSwJLyog4bmHIOG5hiAqLwotCTB4MWU0OSwgNDk5LAkvKiDhuYkg4bmIICovCi0JMHgxZTRi LCA0OTksCS8qIOG5iyDhuYogKi8KLQkweDFlNGQsIDQ5OSwJLyog4bmNIOG5jCAqLwotCTB4 MWU0ZiwgNDk5LAkvKiDhuY8g4bmOICovCi0JMHgxZTUxLCA0OTksCS8qIOG5kSDhuZAgKi8K LQkweDFlNTMsIDQ5OSwJLyog4bmTIOG5kiAqLwotCTB4MWU1NSwgNDk5LAkvKiDhuZUg4bmU ICovCi0JMHgxZTU3LCA0OTksCS8qIOG5lyDhuZYgKi8KLQkweDFlNTksIDQ5OSwJLyog4bmZ IOG5mCAqLwotCTB4MWU1YiwgNDk5LAkvKiDhuZsg4bmaICovCi0JMHgxZTVkLCA0OTksCS8q IOG5nSDhuZwgKi8KLQkweDFlNWYsIDQ5OSwJLyog4bmfIOG5niAqLwotCTB4MWU2MSwgNDk5 LAkvKiDhuaEg4bmgICovCi0JMHgxZTYzLCA0OTksCS8qIOG5oyDhuaIgKi8KLQkweDFlNjUs IDQ5OSwJLyog4bmlIOG5pCAqLwotCTB4MWU2NywgNDk5LAkvKiDhuacg4bmmICovCi0JMHgx ZTY5LCA0OTksCS8qIOG5qSDhuaggKi8KLQkweDFlNmIsIDQ5OSwJLyog4bmrIOG5qiAqLwot CTB4MWU2ZCwgNDk5LAkvKiDhua0g4bmsICovCi0JMHgxZTZmLCA0OTksCS8qIOG5ryDhua4g Ki8KLQkweDFlNzEsIDQ5OSwJLyog4bmxIOG5sCAqLwotCTB4MWU3MywgNDk5LAkvKiDhubMg 4bmyICovCi0JMHgxZTc1LCA0OTksCS8qIOG5tSDhubQgKi8KLQkweDFlNzcsIDQ5OSwJLyog 4bm3IOG5tiAqLwotCTB4MWU3OSwgNDk5LAkvKiDhubkg4bm4ICovCi0JMHgxZTdiLCA0OTks CS8qIOG5uyDhubogKi8KLQkweDFlN2QsIDQ5OSwJLyog4bm9IOG5vCAqLwotCTB4MWU3Ziwg NDk5LAkvKiDhub8g4bm+ICovCi0JMHgxZTgxLCA0OTksCS8qIOG6gSDhuoAgKi8KLQkweDFl ODMsIDQ5OSwJLyog4bqDIOG6giAqLwotCTB4MWU4NSwgNDk5LAkvKiDhuoUg4bqEICovCi0J MHgxZTg3LCA0OTksCS8qIOG6hyDhuoYgKi8KLQkweDFlODksIDQ5OSwJLyog4bqJIOG6iCAq LwotCTB4MWU4YiwgNDk5LAkvKiDhuosg4bqKICovCi0JMHgxZThkLCA0OTksCS8qIOG6jSDh uowgKi8KLQkweDFlOGYsIDQ5OSwJLyog4bqPIOG6jiAqLwotCTB4MWU5MSwgNDk5LAkvKiDh upEg4bqQICovCi0JMHgxZTkzLCA0OTksCS8qIOG6kyDhupIgKi8KLQkweDFlOTUsIDQ5OSwJ Lyog4bqVIOG6lCAqLwotCTB4MWVhMSwgNDk5LAkvKiDhuqEg4bqgICovCi0JMHgxZWEzLCA0 OTksCS8qIOG6oyDhuqIgKi8KLQkweDFlYTUsIDQ5OSwJLyog4bqlIOG6pCAqLwotCTB4MWVh NywgNDk5LAkvKiDhuqcg4bqmICovCi0JMHgxZWE5LCA0OTksCS8qIOG6qSDhuqggKi8KLQkw eDFlYWIsIDQ5OSwJLyog4bqrIOG6qiAqLwotCTB4MWVhZCwgNDk5LAkvKiDhuq0g4bqsICov Ci0JMHgxZWFmLCA0OTksCS8qIOG6ryDhuq4gKi8KLQkweDFlYjEsIDQ5OSwJLyog4bqxIOG6 sCAqLwotCTB4MWViMywgNDk5LAkvKiDhurMg4bqyICovCi0JMHgxZWI1LCA0OTksCS8qIOG6 tSDhurQgKi8KLQkweDFlYjcsIDQ5OSwJLyog4bq3IOG6tiAqLwotCTB4MWViOSwgNDk5LAkv KiDhurkg4bq4ICovCi0JMHgxZWJiLCA0OTksCS8qIOG6uyDhurogKi8KLQkweDFlYmQsIDQ5 OSwJLyog4bq9IOG6vCAqLwotCTB4MWViZiwgNDk5LAkvKiDhur8g4bq+ICovCi0JMHgxZWMx LCA0OTksCS8qIOG7gSDhu4AgKi8KLQkweDFlYzMsIDQ5OSwJLyog4buDIOG7giAqLwotCTB4 MWVjNSwgNDk5LAkvKiDhu4Ug4buEICovCi0JMHgxZWM3LCA0OTksCS8qIOG7hyDhu4YgKi8K LQkweDFlYzksIDQ5OSwJLyog4buJIOG7iCAqLwotCTB4MWVjYiwgNDk5LAkvKiDhu4sg4buK ICovCi0JMHgxZWNkLCA0OTksCS8qIOG7jSDhu4wgKi8KLQkweDFlY2YsIDQ5OSwJLyog4buP IOG7jiAqLwotCTB4MWVkMSwgNDk5LAkvKiDhu5Eg4buQICovCi0JMHgxZWQzLCA0OTksCS8q IOG7kyDhu5IgKi8KLQkweDFlZDUsIDQ5OSwJLyog4buVIOG7lCAqLwotCTB4MWVkNywgNDk5 LAkvKiDhu5cg4buWICovCi0JMHgxZWQ5LCA0OTksCS8qIOG7mSDhu5ggKi8KLQkweDFlZGIs IDQ5OSwJLyog4bubIOG7miAqLwotCTB4MWVkZCwgNDk5LAkvKiDhu50g4bucICovCi0JMHgx ZWRmLCA0OTksCS8qIOG7nyDhu54gKi8KLQkweDFlZTEsIDQ5OSwJLyog4buhIOG7oCAqLwot CTB4MWVlMywgNDk5LAkvKiDhu6Mg4buiICovCi0JMHgxZWU1LCA0OTksCS8qIOG7pSDhu6Qg Ki8KLQkweDFlZTcsIDQ5OSwJLyog4bunIOG7piAqLwotCTB4MWVlOSwgNDk5LAkvKiDhu6kg 4buoICovCi0JMHgxZWViLCA0OTksCS8qIOG7qyDhu6ogKi8KLQkweDFlZWQsIDQ5OSwJLyog 4butIOG7rCAqLwotCTB4MWVlZiwgNDk5LAkvKiDhu68g4buuICovCi0JMHgxZWYxLCA0OTks CS8qIOG7sSDhu7AgKi8KLQkweDFlZjMsIDQ5OSwJLyog4buzIOG7siAqLwotCTB4MWVmNSwg NDk5LAkvKiDhu7Ug4bu0ICovCi0JMHgxZWY3LCA0OTksCS8qIOG7tyDhu7YgKi8KLQkweDFl ZjksIDQ5OSwJLyog4bu5IOG7uCAqLwotCTB4MWY1MSwgNTA4LAkvKiDhvZEg4b2ZICovCi0J MHgxZjUzLCA1MDgsCS8qIOG9kyDhvZsgKi8KLQkweDFmNTUsIDUwOCwJLyog4b2VIOG9nSAq LwotCTB4MWY1NywgNTA4LAkvKiDhvZcg4b2fICovCi0JMHgxZmIzLCA1MDksCS8qIOG+syDh vrwgKi8KLQkweDFmYzMsIDUwOSwJLyog4b+DIOG/jCAqLwotCTB4MWZlNSwgNTA3LAkvKiDh v6Ug4b+sICovCi0JMHgxZmYzLCA1MDksCS8qIOG/syDhv7wgKi8KLX07Ci0KLXN0YXRpYyBS dW5lIF9faXNkaWdpdHJbXSA9IHsKLQkweDAwMzAsIDB4MDAzOSwKLQkweDA2NjAsIDB4MDY2 OSwKLQkweDA2ZjAsIDB4MDZmOSwKLQkweDA3YzAsIDB4MDdjOSwKLQkweDA5NjYsIDB4MDk2 ZiwKLQkweDA5ZTYsIDB4MDllZiwKLQkweDBhNjYsIDB4MGE2ZiwKLQkweDBhZTYsIDB4MGFl ZiwKLQkweDBiNjYsIDB4MGI2ZiwKLQkweDBiZTYsIDB4MGJlZiwKLQkweDBjNjYsIDB4MGM2 ZiwKLQkweDBjZTYsIDB4MGNlZiwKLQkweDBkNjYsIDB4MGQ2ZiwKLQkweDBlNTAsIDB4MGU1 OSwKLQkweDBlZDAsIDB4MGVkOSwKLQkweDBmMjAsIDB4MGYyOSwKLQkweDEwNDAsIDB4MTA0 OSwKLQkweDE3ZTAsIDB4MTdlOSwKLQkweDE4MTAsIDB4MTgxOSwKLQkweDE5NDYsIDB4MTk0 ZiwKLQkweDE5ZDAsIDB4MTlkOSwKLQkweDFiNTAsIDB4MWI1OSwKLQkweGZmMTAsIDB4ZmYx OSwKLQkweDEwNGEwLCAweDEwNGE5LAotCTB4MWQ3Y2UsIDB4MWQ3ZmYsCi19OwotCi0vKgot ICogdXBwZXIgY2FzZSByYW5nZXMKLSAqCTNyZCBjb2wgaXMgY29udmVyc2lvbiBleGNlc3Mg NTAwCi0gKi8KLXN0YXRpYwotUnVuZQlfdG9sb3dlcjJbXSA9Ci17Ci0JMHgwMDQxLAkweDAw NWEsIDUzMiwJLyogQS1aIGEteiAqLwotCTB4MDBjMCwJMHgwMGQ2LCA1MzIsCS8qIMOALcOW IMOgLcO2ICovCi0JMHgwMGQ4LAkweDAwZGUsIDUzMiwJLyogw5gtw54gw7gtw74gKi8KLQkw eDAxODksCTB4MDE4YSwgNzA1LAkvKiDGiS3GiiDJli3JlyAqLwotCTB4MDE4ZSwJMHgwMThm LCA3MDIsCS8qIMaOLcaPIMmYLcmZICovCi0JMHgwMWIxLAkweDAxYjIsIDcxNywJLyogxrEt xrIgyootyosgKi8KLQkweDAzODgsCTB4MDM4YSwgNTM3LAkvKiDOiC3OiiDOrS3OryAqLwot CTB4MDM4ZSwJMHgwMzhmLCA1NjMsCS8qIM6OLc6PIM+NLc+OICovCi0JMHgwMzkxLAkweDAz YTEsIDUzMiwJLyogzpEtzqEgzrEtz4EgKi8KLQkweDAzYTMsCTB4MDNhYiwgNTMyLAkvKiDO oy3OqyDPgy3PiyAqLwotCTB4MDQwMSwJMHgwNDBjLCA1ODAsCS8qINCBLdCMINGRLdGcICov Ci0JMHgwNDBlLAkweDA0MGYsIDU4MCwJLyog0I4t0I8g0Z4t0Z8gKi8KLQkweDA0MTAsCTB4 MDQyZiwgNTMyLAkvKiDQkC3QryDQsC3RjyAqLwotCTB4MDUzMSwJMHgwNTU2LCA1NDgsCS8q INSxLdWWINWhLdaGICovCi0JMHgxMGEwLAkweDEwYzUsIDU0OCwJLyog4YKgLeGDhSDhg5At 4YO1ICovCi0JMHgxZjA4LAkweDFmMGYsIDQ5MiwJLyog4byILeG8jyDhvIAt4byHICovCi0J MHgxZjE4LAkweDFmMWQsIDQ5MiwJLyog4byYLeG8nSDhvJAt4byVICovCi0JMHgxZjI4LAkw eDFmMmYsIDQ5MiwJLyog4byoLeG8ryDhvKAt4bynICovCi0JMHgxZjM4LAkweDFmM2YsIDQ5 MiwJLyog4by4LeG8vyDhvLAt4by3ICovCi0JMHgxZjQ4LAkweDFmNGQsIDQ5MiwJLyog4b2I LeG9jSDhvYAt4b2FICovCi0JMHgxZjY4LAkweDFmNmYsIDQ5MiwJLyog4b2oLeG9ryDhvaAt 4b2nICovCi0JMHgxZjg4LAkweDFmOGYsIDQ5MiwJLyog4b6ILeG+jyDhvoAt4b6HICovCi0J MHgxZjk4LAkweDFmOWYsIDQ5MiwJLyog4b6YLeG+nyDhvpAt4b6XICovCi0JMHgxZmE4LAkw eDFmYWYsIDQ5MiwJLyog4b6oLeG+ryDhvqAt4b6nICovCi0JMHgxZmI4LAkweDFmYjksIDQ5 MiwJLyog4b64LeG+uSDhvrAt4b6xICovCi0JMHgxZmJhLAkweDFmYmIsIDQyNiwJLyog4b66 LeG+uyDhvbAt4b2xICovCi0JMHgxZmM4LAkweDFmY2IsIDQxNCwJLyog4b+ILeG/iyDhvbIt 4b21ICovCi0JMHgxZmQ4LAkweDFmZDksIDQ5MiwJLyog4b+YLeG/mSDhv5At4b+RICovCi0J MHgxZmRhLAkweDFmZGIsIDQwMCwJLyog4b+aLeG/myDhvbYt4b23ICovCi0JMHgxZmU4LAkw eDFmZTksIDQ5MiwJLyog4b+oLeG/qSDhv6At4b+hICovCi0JMHgxZmVhLAkweDFmZWIsIDM4 OCwJLyog4b+qLeG/qyDhvbot4b27ICovCi0JMHgxZmY4LAkweDFmZjksIDM3MiwJLyog4b+4 LeG/uSDhvbgt4b25ICovCi0JMHgxZmZhLAkweDFmZmIsIDM3NCwJLyog4b+6LeG/uyDhvbwt 4b29ICovCi0JMHgyMTYwLAkweDIxNmYsIDUxNiwJLyog4oWgLeKFryDihbAt4oW/ICovCi0J MHgyNGI2LAkweDI0Y2YsIDUyNiwJLyog4pK2LeKTjyDik5At4pOpICovCi0JMHhmZjIxLAkw eGZmM2EsIDUzMiwJLyog77yhLe+8uiDvvYEt772aICovCi19OwotCi0vKgotICogdXBwZXIg Y2FzZSBzaW5nbGV0cwotICoJMm5kIGNvbCBpcyBjb252ZXJzaW9uIGV4Y2VzcyA1MDAKLSAq Lwotc3RhdGljCi1SdW5lCV90b2xvd2VyMVtdID0KLXsKLQkweDAxMDAsIDUwMSwJLyogxIAg xIEgKi8KLQkweDAxMDIsIDUwMSwJLyogxIIgxIMgKi8KLQkweDAxMDQsIDUwMSwJLyogxIQg xIUgKi8KLQkweDAxMDYsIDUwMSwJLyogxIYgxIcgKi8KLQkweDAxMDgsIDUwMSwJLyogxIgg xIkgKi8KLQkweDAxMGEsIDUwMSwJLyogxIogxIsgKi8KLQkweDAxMGMsIDUwMSwJLyogxIwg xI0gKi8KLQkweDAxMGUsIDUwMSwJLyogxI4gxI8gKi8KLQkweDAxMTAsIDUwMSwJLyogxJAg xJEgKi8KLQkweDAxMTIsIDUwMSwJLyogxJIgxJMgKi8KLQkweDAxMTQsIDUwMSwJLyogxJQg xJUgKi8KLQkweDAxMTYsIDUwMSwJLyogxJYgxJcgKi8KLQkweDAxMTgsIDUwMSwJLyogxJgg xJkgKi8KLQkweDAxMWEsIDUwMSwJLyogxJogxJsgKi8KLQkweDAxMWMsIDUwMSwJLyogxJwg xJ0gKi8KLQkweDAxMWUsIDUwMSwJLyogxJ4gxJ8gKi8KLQkweDAxMjAsIDUwMSwJLyogxKAg xKEgKi8KLQkweDAxMjIsIDUwMSwJLyogxKIgxKMgKi8KLQkweDAxMjQsIDUwMSwJLyogxKQg xKUgKi8KLQkweDAxMjYsIDUwMSwJLyogxKYgxKcgKi8KLQkweDAxMjgsIDUwMSwJLyogxKgg xKkgKi8KLQkweDAxMmEsIDUwMSwJLyogxKogxKsgKi8KLQkweDAxMmMsIDUwMSwJLyogxKwg xK0gKi8KLQkweDAxMmUsIDUwMSwJLyogxK4gxK8gKi8KLQkweDAxMzAsIDMwMSwJLyogxLAg aSAqLwotCTB4MDEzMiwgNTAxLAkvKiDEsiDEsyAqLwotCTB4MDEzNCwgNTAxLAkvKiDEtCDE tSAqLwotCTB4MDEzNiwgNTAxLAkvKiDEtiDEtyAqLwotCTB4MDEzOSwgNTAxLAkvKiDEuSDE uiAqLwotCTB4MDEzYiwgNTAxLAkvKiDEuyDEvCAqLwotCTB4MDEzZCwgNTAxLAkvKiDEvSDE viAqLwotCTB4MDEzZiwgNTAxLAkvKiDEvyDFgCAqLwotCTB4MDE0MSwgNTAxLAkvKiDFgSDF giAqLwotCTB4MDE0MywgNTAxLAkvKiDFgyDFhCAqLwotCTB4MDE0NSwgNTAxLAkvKiDFhSDF hiAqLwotCTB4MDE0NywgNTAxLAkvKiDFhyDFiCAqLwotCTB4MDE0YSwgNTAxLAkvKiDFiiDF iyAqLwotCTB4MDE0YywgNTAxLAkvKiDFjCDFjSAqLwotCTB4MDE0ZSwgNTAxLAkvKiDFjiDF jyAqLwotCTB4MDE1MCwgNTAxLAkvKiDFkCDFkSAqLwotCTB4MDE1MiwgNTAxLAkvKiDFkiDF kyAqLwotCTB4MDE1NCwgNTAxLAkvKiDFlCDFlSAqLwotCTB4MDE1NiwgNTAxLAkvKiDFliDF lyAqLwotCTB4MDE1OCwgNTAxLAkvKiDFmCDFmSAqLwotCTB4MDE1YSwgNTAxLAkvKiDFmiDF myAqLwotCTB4MDE1YywgNTAxLAkvKiDFnCDFnSAqLwotCTB4MDE1ZSwgNTAxLAkvKiDFniDF nyAqLwotCTB4MDE2MCwgNTAxLAkvKiDFoCDFoSAqLwotCTB4MDE2MiwgNTAxLAkvKiDFoiDF oyAqLwotCTB4MDE2NCwgNTAxLAkvKiDFpCDFpSAqLwotCTB4MDE2NiwgNTAxLAkvKiDFpiDF pyAqLwotCTB4MDE2OCwgNTAxLAkvKiDFqCDFqSAqLwotCTB4MDE2YSwgNTAxLAkvKiDFqiDF qyAqLwotCTB4MDE2YywgNTAxLAkvKiDFrCDFrSAqLwotCTB4MDE2ZSwgNTAxLAkvKiDFriDF ryAqLwotCTB4MDE3MCwgNTAxLAkvKiDFsCDFsSAqLwotCTB4MDE3MiwgNTAxLAkvKiDFsiDF syAqLwotCTB4MDE3NCwgNTAxLAkvKiDFtCDFtSAqLwotCTB4MDE3NiwgNTAxLAkvKiDFtiDF tyAqLwotCTB4MDE3OCwgMzc5LAkvKiDFuCDDvyAqLwotCTB4MDE3OSwgNTAxLAkvKiDFuSDF uiAqLwotCTB4MDE3YiwgNTAxLAkvKiDFuyDFvCAqLwotCTB4MDE3ZCwgNTAxLAkvKiDFvSDF viAqLwotCTB4MDE4MSwgNzEwLAkvKiDGgSDJkyAqLwotCTB4MDE4MiwgNTAxLAkvKiDGgiDG gyAqLwotCTB4MDE4NCwgNTAxLAkvKiDGhCDGhSAqLwotCTB4MDE4NiwgNzA2LAkvKiDGhiDJ lCAqLwotCTB4MDE4NywgNTAxLAkvKiDGhyDGiCAqLwotCTB4MDE4YiwgNTAxLAkvKiDGiyDG jCAqLwotCTB4MDE5MCwgNzAzLAkvKiDGkCDJmyAqLwotCTB4MDE5MSwgNTAxLAkvKiDGkSDG kiAqLwotCTB4MDE5MywgNzA1LAkvKiDGkyDJoCAqLwotCTB4MDE5NCwgNzA3LAkvKiDGlCDJ oyAqLwotCTB4MDE5NiwgNzExLAkvKiDGliDJqSAqLwotCTB4MDE5NywgNzA5LAkvKiDGlyDJ qCAqLwotCTB4MDE5OCwgNTAxLAkvKiDGmCDGmSAqLwotCTB4MDE5YywgNzExLAkvKiDGnCDJ ryAqLwotCTB4MDE5ZCwgNzEzLAkvKiDGnSDJsiAqLwotCTB4MDFhMCwgNTAxLAkvKiDGoCDG oSAqLwotCTB4MDFhMiwgNTAxLAkvKiDGoiDGoyAqLwotCTB4MDFhNCwgNTAxLAkvKiDGpCDG pSAqLwotCTB4MDFhNywgNTAxLAkvKiDGpyDGqCAqLwotCTB4MDFhOSwgNzE4LAkvKiDGqSDK gyAqLwotCTB4MDFhYywgNTAxLAkvKiDGrCDGrSAqLwotCTB4MDFhZSwgNzE4LAkvKiDGriDK iCAqLwotCTB4MDFhZiwgNTAxLAkvKiDGryDGsCAqLwotCTB4MDFiMywgNTAxLAkvKiDGsyDG tCAqLwotCTB4MDFiNSwgNTAxLAkvKiDGtSDGtiAqLwotCTB4MDFiNywgNzE5LAkvKiDGtyDK kiAqLwotCTB4MDFiOCwgNTAxLAkvKiDGuCDGuSAqLwotCTB4MDFiYywgNTAxLAkvKiDGvCDG vSAqLwotCTB4MDFjNCwgNTAyLAkvKiDHhCDHhiAqLwotCTB4MDFjNSwgNTAxLAkvKiDHhSDH hiAqLwotCTB4MDFjNywgNTAyLAkvKiDHhyDHiSAqLwotCTB4MDFjOCwgNTAxLAkvKiDHiCDH iSAqLwotCTB4MDFjYSwgNTAyLAkvKiDHiiDHjCAqLwotCTB4MDFjYiwgNTAxLAkvKiDHiyDH jCAqLwotCTB4MDFjZCwgNTAxLAkvKiDHjSDHjiAqLwotCTB4MDFjZiwgNTAxLAkvKiDHjyDH kCAqLwotCTB4MDFkMSwgNTAxLAkvKiDHkSDHkiAqLwotCTB4MDFkMywgNTAxLAkvKiDHkyDH lCAqLwotCTB4MDFkNSwgNTAxLAkvKiDHlSDHliAqLwotCTB4MDFkNywgNTAxLAkvKiDHlyDH mCAqLwotCTB4MDFkOSwgNTAxLAkvKiDHmSDHmiAqLwotCTB4MDFkYiwgNTAxLAkvKiDHmyDH nCAqLwotCTB4MDFkZSwgNTAxLAkvKiDHniDHnyAqLwotCTB4MDFlMCwgNTAxLAkvKiDHoCDH oSAqLwotCTB4MDFlMiwgNTAxLAkvKiDHoiDHoyAqLwotCTB4MDFlNCwgNTAxLAkvKiDHpCDH pSAqLwotCTB4MDFlNiwgNTAxLAkvKiDHpiDHpyAqLwotCTB4MDFlOCwgNTAxLAkvKiDHqCDH qSAqLwotCTB4MDFlYSwgNTAxLAkvKiDHqiDHqyAqLwotCTB4MDFlYywgNTAxLAkvKiDHrCDH rSAqLwotCTB4MDFlZSwgNTAxLAkvKiDHriDHryAqLwotCTB4MDFmMSwgNTAyLAkvKiDHsSDH syAqLwotCTB4MDFmMiwgNTAxLAkvKiDHsiDHsyAqLwotCTB4MDFmNCwgNTAxLAkvKiDHtCDH tSAqLwotCTB4MDFmYSwgNTAxLAkvKiDHuiDHuyAqLwotCTB4MDFmYywgNTAxLAkvKiDHvCDH vSAqLwotCTB4MDFmZSwgNTAxLAkvKiDHviDHvyAqLwotCTB4MDIwMCwgNTAxLAkvKiDIgCDI gSAqLwotCTB4MDIwMiwgNTAxLAkvKiDIgiDIgyAqLwotCTB4MDIwNCwgNTAxLAkvKiDIhCDI hSAqLwotCTB4MDIwNiwgNTAxLAkvKiDIhiDIhyAqLwotCTB4MDIwOCwgNTAxLAkvKiDIiCDI iSAqLwotCTB4MDIwYSwgNTAxLAkvKiDIiiDIiyAqLwotCTB4MDIwYywgNTAxLAkvKiDIjCDI jSAqLwotCTB4MDIwZSwgNTAxLAkvKiDIjiDIjyAqLwotCTB4MDIxMCwgNTAxLAkvKiDIkCDI kSAqLwotCTB4MDIxMiwgNTAxLAkvKiDIkiDIkyAqLwotCTB4MDIxNCwgNTAxLAkvKiDIlCDI lSAqLwotCTB4MDIxNiwgNTAxLAkvKiDIliDIlyAqLwotCTB4MDM4NiwgNTM4LAkvKiDOhiDO rCAqLwotCTB4MDM4YywgNTY0LAkvKiDOjCDPjCAqLwotCTB4MDNlMiwgNTAxLAkvKiDPoiDP oyAqLwotCTB4MDNlNCwgNTAxLAkvKiDPpCDPpSAqLwotCTB4MDNlNiwgNTAxLAkvKiDPpiDP pyAqLwotCTB4MDNlOCwgNTAxLAkvKiDPqCDPqSAqLwotCTB4MDNlYSwgNTAxLAkvKiDPqiDP qyAqLwotCTB4MDNlYywgNTAxLAkvKiDPrCDPrSAqLwotCTB4MDNlZSwgNTAxLAkvKiDPriDP ryAqLwotCTB4MDQ2MCwgNTAxLAkvKiDRoCDRoSAqLwotCTB4MDQ2MiwgNTAxLAkvKiDRoiDR oyAqLwotCTB4MDQ2NCwgNTAxLAkvKiDRpCDRpSAqLwotCTB4MDQ2NiwgNTAxLAkvKiDRpiDR pyAqLwotCTB4MDQ2OCwgNTAxLAkvKiDRqCDRqSAqLwotCTB4MDQ2YSwgNTAxLAkvKiDRqiDR qyAqLwotCTB4MDQ2YywgNTAxLAkvKiDRrCDRrSAqLwotCTB4MDQ2ZSwgNTAxLAkvKiDRriDR ryAqLwotCTB4MDQ3MCwgNTAxLAkvKiDRsCDRsSAqLwotCTB4MDQ3MiwgNTAxLAkvKiDRsiDR syAqLwotCTB4MDQ3NCwgNTAxLAkvKiDRtCDRtSAqLwotCTB4MDQ3NiwgNTAxLAkvKiDRtiDR tyAqLwotCTB4MDQ3OCwgNTAxLAkvKiDRuCDRuSAqLwotCTB4MDQ3YSwgNTAxLAkvKiDRuiDR uyAqLwotCTB4MDQ3YywgNTAxLAkvKiDRvCDRvSAqLwotCTB4MDQ3ZSwgNTAxLAkvKiDRviDR vyAqLwotCTB4MDQ4MCwgNTAxLAkvKiDSgCDSgSAqLwotCTB4MDQ5MCwgNTAxLAkvKiDSkCDS kSAqLwotCTB4MDQ5MiwgNTAxLAkvKiDSkiDSkyAqLwotCTB4MDQ5NCwgNTAxLAkvKiDSlCDS lSAqLwotCTB4MDQ5NiwgNTAxLAkvKiDSliDSlyAqLwotCTB4MDQ5OCwgNTAxLAkvKiDSmCDS mSAqLwotCTB4MDQ5YSwgNTAxLAkvKiDSmiDSmyAqLwotCTB4MDQ5YywgNTAxLAkvKiDSnCDS nSAqLwotCTB4MDQ5ZSwgNTAxLAkvKiDSniDSnyAqLwotCTB4MDRhMCwgNTAxLAkvKiDSoCDS oSAqLwotCTB4MDRhMiwgNTAxLAkvKiDSoiDSoyAqLwotCTB4MDRhNCwgNTAxLAkvKiDSpCDS pSAqLwotCTB4MDRhNiwgNTAxLAkvKiDSpiDSpyAqLwotCTB4MDRhOCwgNTAxLAkvKiDSqCDS qSAqLwotCTB4MDRhYSwgNTAxLAkvKiDSqiDSqyAqLwotCTB4MDRhYywgNTAxLAkvKiDSrCDS rSAqLwotCTB4MDRhZSwgNTAxLAkvKiDSriDSryAqLwotCTB4MDRiMCwgNTAxLAkvKiDSsCDS sSAqLwotCTB4MDRiMiwgNTAxLAkvKiDSsiDSsyAqLwotCTB4MDRiNCwgNTAxLAkvKiDStCDS tSAqLwotCTB4MDRiNiwgNTAxLAkvKiDStiDStyAqLwotCTB4MDRiOCwgNTAxLAkvKiDSuCDS uSAqLwotCTB4MDRiYSwgNTAxLAkvKiDSuiDSuyAqLwotCTB4MDRiYywgNTAxLAkvKiDSvCDS vSAqLwotCTB4MDRiZSwgNTAxLAkvKiDSviDSvyAqLwotCTB4MDRjMSwgNTAxLAkvKiDTgSDT giAqLwotCTB4MDRjMywgNTAxLAkvKiDTgyDThCAqLwotCTB4MDRjNywgNTAxLAkvKiDThyDT iCAqLwotCTB4MDRjYiwgNTAxLAkvKiDTiyDTjCAqLwotCTB4MDRkMCwgNTAxLAkvKiDTkCDT kSAqLwotCTB4MDRkMiwgNTAxLAkvKiDTkiDTkyAqLwotCTB4MDRkNCwgNTAxLAkvKiDTlCDT lSAqLwotCTB4MDRkNiwgNTAxLAkvKiDTliDTlyAqLwotCTB4MDRkOCwgNTAxLAkvKiDTmCDT mSAqLwotCTB4MDRkYSwgNTAxLAkvKiDTmiDTmyAqLwotCTB4MDRkYywgNTAxLAkvKiDTnCDT nSAqLwotCTB4MDRkZSwgNTAxLAkvKiDTniDTnyAqLwotCTB4MDRlMCwgNTAxLAkvKiDToCDT oSAqLwotCTB4MDRlMiwgNTAxLAkvKiDToiDToyAqLwotCTB4MDRlNCwgNTAxLAkvKiDTpCDT pSAqLwotCTB4MDRlNiwgNTAxLAkvKiDTpiDTpyAqLwotCTB4MDRlOCwgNTAxLAkvKiDTqCDT qSAqLwotCTB4MDRlYSwgNTAxLAkvKiDTqiDTqyAqLwotCTB4MDRlZSwgNTAxLAkvKiDTriDT ryAqLwotCTB4MDRmMCwgNTAxLAkvKiDTsCDTsSAqLwotCTB4MDRmMiwgNTAxLAkvKiDTsiDT syAqLwotCTB4MDRmNCwgNTAxLAkvKiDTtCDTtSAqLwotCTB4MDRmOCwgNTAxLAkvKiDTuCDT uSAqLwotCTB4MWUwMCwgNTAxLAkvKiDhuIAg4biBICovCi0JMHgxZTAyLCA1MDEsCS8qIOG4 giDhuIMgKi8KLQkweDFlMDQsIDUwMSwJLyog4biEIOG4hSAqLwotCTB4MWUwNiwgNTAxLAkv KiDhuIYg4biHICovCi0JMHgxZTA4LCA1MDEsCS8qIOG4iCDhuIkgKi8KLQkweDFlMGEsIDUw MSwJLyog4biKIOG4iyAqLwotCTB4MWUwYywgNTAxLAkvKiDhuIwg4biNICovCi0JMHgxZTBl LCA1MDEsCS8qIOG4jiDhuI8gKi8KLQkweDFlMTAsIDUwMSwJLyog4biQIOG4kSAqLwotCTB4 MWUxMiwgNTAxLAkvKiDhuJIg4biTICovCi0JMHgxZTE0LCA1MDEsCS8qIOG4lCDhuJUgKi8K LQkweDFlMTYsIDUwMSwJLyog4biWIOG4lyAqLwotCTB4MWUxOCwgNTAxLAkvKiDhuJgg4biZ ICovCi0JMHgxZTFhLCA1MDEsCS8qIOG4miDhuJsgKi8KLQkweDFlMWMsIDUwMSwJLyog4bic IOG4nSAqLwotCTB4MWUxZSwgNTAxLAkvKiDhuJ4g4bifICovCi0JMHgxZTIwLCA1MDEsCS8q IOG4oCDhuKEgKi8KLQkweDFlMjIsIDUwMSwJLyog4biiIOG4oyAqLwotCTB4MWUyNCwgNTAx LAkvKiDhuKQg4bilICovCi0JMHgxZTI2LCA1MDEsCS8qIOG4piDhuKcgKi8KLQkweDFlMjgs IDUwMSwJLyog4bioIOG4qSAqLwotCTB4MWUyYSwgNTAxLAkvKiDhuKog4birICovCi0JMHgx ZTJjLCA1MDEsCS8qIOG4rCDhuK0gKi8KLQkweDFlMmUsIDUwMSwJLyog4biuIOG4ryAqLwot CTB4MWUzMCwgNTAxLAkvKiDhuLAg4bixICovCi0JMHgxZTMyLCA1MDEsCS8qIOG4siDhuLMg Ki8KLQkweDFlMzQsIDUwMSwJLyog4bi0IOG4tSAqLwotCTB4MWUzNiwgNTAxLAkvKiDhuLYg 4bi3ICovCi0JMHgxZTM4LCA1MDEsCS8qIOG4uCDhuLkgKi8KLQkweDFlM2EsIDUwMSwJLyog 4bi6IOG4uyAqLwotCTB4MWUzYywgNTAxLAkvKiDhuLwg4bi9ICovCi0JMHgxZTNlLCA1MDEs CS8qIOG4viDhuL8gKi8KLQkweDFlNDAsIDUwMSwJLyog4bmAIOG5gSAqLwotCTB4MWU0Miwg NTAxLAkvKiDhuYIg4bmDICovCi0JMHgxZTQ0LCA1MDEsCS8qIOG5hCDhuYUgKi8KLQkweDFl NDYsIDUwMSwJLyog4bmGIOG5hyAqLwotCTB4MWU0OCwgNTAxLAkvKiDhuYgg4bmJICovCi0J MHgxZTRhLCA1MDEsCS8qIOG5iiDhuYsgKi8KLQkweDFlNGMsIDUwMSwJLyog4bmMIOG5jSAq LwotCTB4MWU0ZSwgNTAxLAkvKiDhuY4g4bmPICovCi0JMHgxZTUwLCA1MDEsCS8qIOG5kCDh uZEgKi8KLQkweDFlNTIsIDUwMSwJLyog4bmSIOG5kyAqLwotCTB4MWU1NCwgNTAxLAkvKiDh uZQg4bmVICovCi0JMHgxZTU2LCA1MDEsCS8qIOG5liDhuZcgKi8KLQkweDFlNTgsIDUwMSwJ Lyog4bmYIOG5mSAqLwotCTB4MWU1YSwgNTAxLAkvKiDhuZog4bmbICovCi0JMHgxZTVjLCA1 MDEsCS8qIOG5nCDhuZ0gKi8KLQkweDFlNWUsIDUwMSwJLyog4bmeIOG5nyAqLwotCTB4MWU2 MCwgNTAxLAkvKiDhuaAg4bmhICovCi0JMHgxZTYyLCA1MDEsCS8qIOG5oiDhuaMgKi8KLQkw eDFlNjQsIDUwMSwJLyog4bmkIOG5pSAqLwotCTB4MWU2NiwgNTAxLAkvKiDhuaYg4bmnICov Ci0JMHgxZTY4LCA1MDEsCS8qIOG5qCDhuakgKi8KLQkweDFlNmEsIDUwMSwJLyog4bmqIOG5 qyAqLwotCTB4MWU2YywgNTAxLAkvKiDhuawg4bmtICovCi0JMHgxZTZlLCA1MDEsCS8qIOG5 riDhua8gKi8KLQkweDFlNzAsIDUwMSwJLyog4bmwIOG5sSAqLwotCTB4MWU3MiwgNTAxLAkv KiDhubIg4bmzICovCi0JMHgxZTc0LCA1MDEsCS8qIOG5tCDhubUgKi8KLQkweDFlNzYsIDUw MSwJLyog4bm2IOG5tyAqLwotCTB4MWU3OCwgNTAxLAkvKiDhubgg4bm5ICovCi0JMHgxZTdh LCA1MDEsCS8qIOG5uiDhubsgKi8KLQkweDFlN2MsIDUwMSwJLyog4bm8IOG5vSAqLwotCTB4 MWU3ZSwgNTAxLAkvKiDhub4g4bm/ICovCi0JMHgxZTgwLCA1MDEsCS8qIOG6gCDhuoEgKi8K LQkweDFlODIsIDUwMSwJLyog4bqCIOG6gyAqLwotCTB4MWU4NCwgNTAxLAkvKiDhuoQg4bqF ICovCi0JMHgxZTg2LCA1MDEsCS8qIOG6hiDhuocgKi8KLQkweDFlODgsIDUwMSwJLyog4bqI IOG6iSAqLwotCTB4MWU4YSwgNTAxLAkvKiDhuoog4bqLICovCi0JMHgxZThjLCA1MDEsCS8q IOG6jCDhuo0gKi8KLQkweDFlOGUsIDUwMSwJLyog4bqOIOG6jyAqLwotCTB4MWU5MCwgNTAx LAkvKiDhupAg4bqRICovCi0JMHgxZTkyLCA1MDEsCS8qIOG6kiDhupMgKi8KLQkweDFlOTQs IDUwMSwJLyog4bqUIOG6lSAqLwotCTB4MWVhMCwgNTAxLAkvKiDhuqAg4bqhICovCi0JMHgx ZWEyLCA1MDEsCS8qIOG6oiDhuqMgKi8KLQkweDFlYTQsIDUwMSwJLyog4bqkIOG6pSAqLwot CTB4MWVhNiwgNTAxLAkvKiDhuqYg4bqnICovCi0JMHgxZWE4LCA1MDEsCS8qIOG6qCDhuqkg Ki8KLQkweDFlYWEsIDUwMSwJLyog4bqqIOG6qyAqLwotCTB4MWVhYywgNTAxLAkvKiDhuqwg 4bqtICovCi0JMHgxZWFlLCA1MDEsCS8qIOG6riDhuq8gKi8KLQkweDFlYjAsIDUwMSwJLyog 4bqwIOG6sSAqLwotCTB4MWViMiwgNTAxLAkvKiDhurIg4bqzICovCi0JMHgxZWI0LCA1MDEs CS8qIOG6tCDhurUgKi8KLQkweDFlYjYsIDUwMSwJLyog4bq2IOG6tyAqLwotCTB4MWViOCwg NTAxLAkvKiDhurgg4bq5ICovCi0JMHgxZWJhLCA1MDEsCS8qIOG6uiDhursgKi8KLQkweDFl YmMsIDUwMSwJLyog4bq8IOG6vSAqLwotCTB4MWViZSwgNTAxLAkvKiDhur4g4bq/ICovCi0J MHgxZWMwLCA1MDEsCS8qIOG7gCDhu4EgKi8KLQkweDFlYzIsIDUwMSwJLyog4buCIOG7gyAq LwotCTB4MWVjNCwgNTAxLAkvKiDhu4Qg4buFICovCi0JMHgxZWM2LCA1MDEsCS8qIOG7hiDh u4cgKi8KLQkweDFlYzgsIDUwMSwJLyog4buIIOG7iSAqLwotCTB4MWVjYSwgNTAxLAkvKiDh u4og4buLICovCi0JMHgxZWNjLCA1MDEsCS8qIOG7jCDhu40gKi8KLQkweDFlY2UsIDUwMSwJ Lyog4buOIOG7jyAqLwotCTB4MWVkMCwgNTAxLAkvKiDhu5Ag4buRICovCi0JMHgxZWQyLCA1 MDEsCS8qIOG7kiDhu5MgKi8KLQkweDFlZDQsIDUwMSwJLyog4buUIOG7lSAqLwotCTB4MWVk NiwgNTAxLAkvKiDhu5Yg4buXICovCi0JMHgxZWQ4LCA1MDEsCS8qIOG7mCDhu5kgKi8KLQkw eDFlZGEsIDUwMSwJLyog4buaIOG7myAqLwotCTB4MWVkYywgNTAxLAkvKiDhu5wg4budICov Ci0JMHgxZWRlLCA1MDEsCS8qIOG7niDhu58gKi8KLQkweDFlZTAsIDUwMSwJLyog4bugIOG7 oSAqLwotCTB4MWVlMiwgNTAxLAkvKiDhu6Ig4bujICovCi0JMHgxZWU0LCA1MDEsCS8qIOG7 pCDhu6UgKi8KLQkweDFlZTYsIDUwMSwJLyog4bumIOG7pyAqLwotCTB4MWVlOCwgNTAxLAkv KiDhu6gg4bupICovCi0JMHgxZWVhLCA1MDEsCS8qIOG7qiDhu6sgKi8KLQkweDFlZWMsIDUw MSwJLyog4busIOG7rSAqLwotCTB4MWVlZSwgNTAxLAkvKiDhu64g4buvICovCi0JMHgxZWYw LCA1MDEsCS8qIOG7sCDhu7EgKi8KLQkweDFlZjIsIDUwMSwJLyog4buyIOG7syAqLwotCTB4 MWVmNCwgNTAxLAkvKiDhu7Qg4bu1ICovCi0JMHgxZWY2LCA1MDEsCS8qIOG7tiDhu7cgKi8K LQkweDFlZjgsIDUwMSwJLyog4bu4IOG7uSAqLwotCTB4MWY1OSwgNDkyLAkvKiDhvZkg4b2R ICovCi0JMHgxZjViLCA0OTIsCS8qIOG9myDhvZMgKi8KLQkweDFmNWQsIDQ5MiwJLyog4b2d IOG9lSAqLwotCTB4MWY1ZiwgNDkyLAkvKiDhvZ8g4b2XICovCi0JMHgxZmJjLCA0OTEsCS8q IOG+vCDhvrMgKi8KLQkweDFmY2MsIDQ5MSwJLyog4b+MIOG/gyAqLwotCTB4MWZlYywgNDkz LAkvKiDhv6wg4b+lICovCi0JMHgxZmZjLCA0OTEsCS8qIOG/vCDhv7MgKi8KLX07Ci0KLS8q Ci0gKiB0aXRsZSBjaGFyYWN0ZXJzIGFyZSB0aG9zZSBiZXR3ZWVuCi0gKiB1cHBlciBhbmQg bG93ZXIgY2FzZS4gaWUgRFogRHogZHoKLSAqLwotc3RhdGljCi1SdW5lCV90b3RpdGxlMVtd ID0KLXsKLQkweDAxYzQsIDUwMSwJLyogx4Qgx4UgKi8KLQkweDAxYzYsIDQ5OSwJLyogx4Yg x4UgKi8KLQkweDAxYzcsIDUwMSwJLyogx4cgx4ggKi8KLQkweDAxYzksIDQ5OSwJLyogx4kg x4ggKi8KLQkweDAxY2EsIDUwMSwJLyogx4ogx4sgKi8KLQkweDAxY2MsIDQ5OSwJLyogx4wg x4sgKi8KLQkweDAxZjEsIDUwMSwJLyogx7Egx7IgKi8KLQkweDAxZjMsIDQ5OSwJLyogx7Mg x7IgKi8KLX07Ci0KLXN0YXRpYwotUnVuZSoKLWJzZWFyY2goUnVuZSBjLCBSdW5lICp0LCBp bnQgbiwgaW50IG5lKQotewotCVJ1bmUgKnA7Ci0JaW50IG07Ci0KLQl3aGlsZShuID4gMSkg ewotCQltID0gbi8yOwotCQlwID0gdCArIG0qbmU7Ci0JCWlmKGMgPj0gcFswXSkgewotCQkJ dCA9IHA7Ci0JCQluID0gbi1tOwotCQl9IGVsc2UKLQkJCW4gPSBtOwotCX0KLQlpZihuICYm IGMgPj0gdFswXSkKLQkJcmV0dXJuIHQ7Ci0JcmV0dXJuIDA7Ci19Ci0KLVJ1bmUKLXRvbG93 ZXJydW5lKFJ1bmUgYykKLXsKLQlSdW5lICpwOwotCi0JcCA9IGJzZWFyY2goYywgX3RvbG93 ZXIyLCBuZWxlbShfdG9sb3dlcjIpLzMsIDMpOwotCWlmKHAgJiYgYyA+PSBwWzBdICYmIGMg PD0gcFsxXSkKLQkJcmV0dXJuIGMgKyBwWzJdIC0gNTAwOwotCXAgPSBic2VhcmNoKGMsIF90 b2xvd2VyMSwgbmVsZW0oX3RvbG93ZXIxKS8yLCAyKTsKLQlpZihwICYmIGMgPT0gcFswXSkK LQkJcmV0dXJuIGMgKyBwWzFdIC0gNTAwOwotCXJldHVybiBjOwotfQotCi1SdW5lCi10b3Vw cGVycnVuZShSdW5lIGMpCi17Ci0JUnVuZSAqcDsKLQotCXAgPSBic2VhcmNoKGMsIF90b3Vw cGVyMiwgbmVsZW0oX3RvdXBwZXIyKS8zLCAzKTsKLQlpZihwICYmIGMgPj0gcFswXSAmJiBj IDw9IHBbMV0pCi0JCXJldHVybiBjICsgcFsyXSAtIDUwMDsKLQlwID0gYnNlYXJjaChjLCBf dG91cHBlcjEsIG5lbGVtKF90b3VwcGVyMSkvMiwgMik7Ci0JaWYocCAmJiBjID09IHBbMF0p Ci0JCXJldHVybiBjICsgcFsxXSAtIDUwMDsKLQlyZXR1cm4gYzsKLX0KLQotUnVuZQotdG90 aXRsZXJ1bmUoUnVuZSBjKQotewotCVJ1bmUgKnA7Ci0KLQlwID0gYnNlYXJjaChjLCBfdG90 aXRsZTEsIG5lbGVtKF90b3RpdGxlMSkvMiwgMik7Ci0JaWYocCAmJiBjID09IHBbMF0pCi0J CXJldHVybiBjICsgcFsxXSAtIDUwMDsKLQlyZXR1cm4gYzsKLX0KLQotaW50Ci1pc2xvd2Vy cnVuZShSdW5lIGMpCi17Ci0JUnVuZSAqcDsKLQotCXAgPSBic2VhcmNoKGMsIF90b3VwcGVy MiwgbmVsZW0oX3RvdXBwZXIyKS8zLCAzKTsKLQlpZihwICYmIGMgPj0gcFswXSAmJiBjIDw9 IHBbMV0pCi0JCXJldHVybiAxOwotCXAgPSBic2VhcmNoKGMsIF90b3VwcGVyMSwgbmVsZW0o X3RvdXBwZXIxKS8yLCAyKTsKLQlpZihwICYmIGMgPT0gcFswXSkKLQkJcmV0dXJuIDE7Ci0J cmV0dXJuIDA7Ci19Ci0KLWludAotaXN1cHBlcnJ1bmUoUnVuZSBjKQotewotCVJ1bmUgKnA7 Ci0KLQlwID0gYnNlYXJjaChjLCBfdG9sb3dlcjIsIG5lbGVtKF90b2xvd2VyMikvMywgMyk7 Ci0JaWYocCAmJiBjID49IHBbMF0gJiYgYyA8PSBwWzFdKQotCQlyZXR1cm4gMTsKLQlwID0g YnNlYXJjaChjLCBfdG9sb3dlcjEsIG5lbGVtKF90b2xvd2VyMSkvMiwgMik7Ci0JaWYocCAm JiBjID09IHBbMF0pCi0JCXJldHVybiAxOwotCXJldHVybiAwOwotfQotCi1pbnQKLWlzYWxw aGFydW5lKFJ1bmUgYykKLXsKLQlSdW5lICpwOwotCi0JaWYoaXN1cHBlcnJ1bmUoYykgfHwg aXNsb3dlcnJ1bmUoYykpCi0JCXJldHVybiAxOwotCXAgPSBic2VhcmNoKGMsIF9hbHBoYTIs IG5lbGVtKF9hbHBoYTIpLzIsIDIpOwotCWlmKHAgJiYgYyA+PSBwWzBdICYmIGMgPD0gcFsx XSkKLQkJcmV0dXJuIDE7Ci0JcCA9IGJzZWFyY2goYywgX2FscGhhMSwgbmVsZW0oX2FscGhh MSksIDEpOwotCWlmKHAgJiYgYyA9PSBwWzBdKQotCQlyZXR1cm4gMTsKLQlyZXR1cm4gMDsK LX0KLQotaW50Ci1pc3RpdGxlcnVuZShSdW5lIGMpCi17Ci0JcmV0dXJuIGlzdXBwZXJydW5l KGMpICYmIGlzbG93ZXJydW5lKGMpOwotfQotCi1pbnQKLWlzc3BhY2VydW5lKFJ1bmUgYykK LXsKLQlSdW5lICpwOwotCi0JcCA9IGJzZWFyY2goYywgX3NwYWNlMiwgbmVsZW0oX3NwYWNl MikvMiwgMik7Ci0JaWYocCAmJiBjID49IHBbMF0gJiYgYyA8PSBwWzFdKQotCQlyZXR1cm4g MTsKLQlyZXR1cm4gMDsKLX0KLQotaW50Ci1pc2RpZ2l0cnVuZShSdW5lIGMpCi17Ci0JUnVu ZSAqcDsKLQotCXAgPSBic2VhcmNoKGMsIF9faXNkaWdpdHIsIG5lbGVtKF9faXNkaWdpdHIp LzIsIDIpOwotCWlmKHAgJiYgYyA+PSBwWzBdICYmIGMgPD0gcFsxXSkKLQkJcmV0dXJuIDE7 Ci0JcmV0dXJuIDA7Ci19Ci0tLSBhLy9zeXMvc3JjL2xpYmMvdGVzdC9ta2ZpbGUKKysrIGIv L3N5cy9zcmMvbGliYy90ZXN0L21rZmlsZQpAQCAtMyw2ICszLDE0IEBACiBURVNUPVwKIAlk YXRlXAogCXBvd1wKKwlydW5lYnJlYWtcCisJcnVuZW5vcm1cCiAJc3RyY2hyXAogCiA8L3N5 cy9zcmMvY21kL21rdGVzdAorCisvbGliL3VjZC8lOgorCWNkIC9saWIvdWNkICYmIG1rICRz dGVtCisKK3J1bmVicmVhay50ZXN0OgkvbGliL3VjZC9HcmFwaGVtZUJyZWFrVGVzdC50eHQg L2xpYi91Y2QvV29yZEJyZWFrVGVzdC50eHQKK3J1bmVub3JtLnRlc3Q6IC9saWIvdWNkL05v cm1hbGl6YXRpb25UZXN0LnR4dAotLS0gL2Rldi9udWxsCisrKyBiLy9zeXMvc3JjL2xpYmMv dGVzdC9ydW5lYnJlYWsuYwpAQCAtMSwwICsxLDExMiBAQAorI2luY2x1ZGUgPHUuaD4KKyNp bmNsdWRlIDxsaWJjLmg+CisjaW5jbHVkZSA8YmlvLmg+CisKK3N0YXRpYyBpbnQKK2VzdHJ0 b3VsKGNoYXIgKnMpCit7CisJY2hhciAqZXByOworCVJ1bmUgY29kZTsKKworCWNvZGUgPSBz dHJ0b3VsKHMsICZlcHIsIDE2KTsKKwlpZihzID09IGVwcikKKwkJc3lzZmF0YWwoImJhZCBj b2RlIHBvaW50IGhleCBzdHJpbmciKTsKKwlyZXR1cm4gY29kZTsKK30KKworc3RhdGljIFJ1 bmUqCitjaGVjayhSdW5lICpyLCBSdW5lKiAoKmZuKShSdW5lKiksIGNoYXIqICgqZm4yKShj aGFyKikpCit7CisJUnVuZSAqcjIsICp0bXA7CisJY2hhciAqcCwgKnAyOworCisJcCA9IHNt cHJpbnQoIiVTIiwgcik7CisJcjIgPSBmbihyKTsKKwlwMiA9IGZuMihwKTsKKworCXRtcCA9 IHJ1bmVzbXByaW50KCIlLipzIiwgKGludCkocDItcCksIHApOworCWlmKG1lbWNtcChyLCB0 bXAsIHIyLXIpICE9IDApCisJCXByaW50KCJ1dGYgbWlzbXN0YWNoXG4iKTsKKwkKKwlmcmVl KHApOworCWZyZWUodG1wKTsKKwlyZXR1cm4gcjI7Cit9CisKK3N0YXRpYyB2b2lkCitydW4o Y2hhciAqZmlsZSwgUnVuZSogKCpmbikoUnVuZSopLCBjaGFyKiAoKmZuMikoY2hhciopKQor eworCUJpb2J1ZiAqYjsKKwljaGFyICpwLCAqZG90OworCWNoYXIgKnBpZWNlc1sxNl07CisJ aW50IGksIGosIG47CisJUnVuZSBzdGFja1sxNl0sIG9wc1sxNl07CisJaW50IG5zdGFjaywg bm9wczsKKwlSdW5lIHIsICpycCwgKnJwMjsKKwljaGFyICpsaW5lOworCisJYiA9IEJvcGVu KGZpbGUsIE9SRUFEKTsKKwlpZihiID09IG5pbCkKKwkJc3lzZmF0YWwoImNvdWxkIG5vdCBs b2FkIGNvbXBvc2l0aW9uIGV4Y2x1c2lvbnM6ICVyIik7CisKKwlmb3IoOyhwID0gQnJkbGlu ZShiLCAnXG4nKSkgIT0gbmlsOyBmcmVlKGxpbmUpKXsKKwkJcFtCbGluZWxlbihiKS0xXSA9 IDA7CisJCWxpbmUgPSBzdHJkdXAocCk7CisJCWlmKHBbMF0gPT0gMCB8fCBwWzBdID09ICcj JykKKwkJCWNvbnRpbnVlOworCQlpZigoZG90ID0gc3Ryc3RyKHAsICIjIikpICE9IG5pbCkK KwkJCSpkb3QgPSAwOworCQluID0gZ2V0ZmllbGRzKHAsIHBpZWNlcywgbmVsZW0ocGllY2Vz KSwgMCwgIiAiKTsKKwkJbnN0YWNrID0gbm9wcyA9IDA7CisJCWZvcihpID0gMDsgaSA8IG47 IGkrKyl7CisJCQljaGFydG9ydW5lKCZyLCBwaWVjZXNbaV0pOworCQkJaWYociAhPSBMJ8O3 JyAmJiByICE9IEwnw5cnKXsKKwkJCQlyID0gZXN0cnRvdWwocGllY2VzW2ldKTsKKwkJCQlz dGFja1tuc3RhY2srK10gPSByOworCQkJCXN0YWNrW25zdGFja10gPSAwOworCQkJfSBlbHNl IHsKKwkJCQlvcHNbbm9wcysrXSA9IHI7CisJCQkJb3BzW25vcHNdID0gMDsKKwkJCX0KKwkJ fQorCisJCXJwID0gc3RhY2s7CisJCWZvcihpID0gMTsgaSA8IG5vcHMtMTspeworCQkJcnAy ID0gY2hlY2socnAsIGZuLCBmbjIpOworCQkJc3dpdGNoKG9wc1tpXSl7CisJCQljYXNlIEwn w7cnOgorCQkJCWlmKHJwMiAhPSBycCsxKXsKKwkJCQkJcHJpbnQoImJyZWFrIGZhaWwgJVgg JVggfHwgJXNcbiIsIHJwWzBdLCBycFsxXSwgbGluZSk7CisJCQkJCWdvdG8gQnJlYWs7CisJ CQkJfQorCQkJCXJwKys7CisJCQkJaSsrOworCQkJCWJyZWFrOworCQkJY2FzZSBMJ8OXJzoK KwkJCQlpZihycDIgLSBycCA9PSAwKXsKKwkJCQkJZm9yKGogPSBpOyBqIDwgbm9wcyAtIDE7 IGorKykKKwkJCQkJCWlmKG9wc1tqXSAhPSAgTCfDlycpCisJCQkJCQkJcHJpbnQoInNraXBw ZWQgJWQgJWQgJXNcbiIsIGksIG5vcHMsIGxpbmUpOworCQkJCQlnb3RvIEJyZWFrOworCQkJ CX0KKwkJCQlmb3IoOyBycCA8IChycDItMSk7IHJwKyssIGkrKyl7CisJCQkJCWlmKG9wc1tp XSAhPSBMJ8OXJykKKwkJCQkJCXByaW50KCJza2lwcGVkICVkICVkICVzXG4iLCBpLCBub3Bz LCBsaW5lKTsKKwkJCQl9CisJCQkJcnAgPSBycDI7CisJCQkJaSsrOworCQkJCWJyZWFrOwor CQkJfQorCQl9CitCcmVhazoKKwkJOworCX0KK30KKwordm9pZAorbWFpbihpbnQsIGNoYXIp Cit7CisJcnVuKCIvbGliL3VjZC9HcmFwaGVtZUJyZWFrVGVzdC50eHQiLCBydW5lZ2JyZWFr LCB1dGZnYnJlYWspOworCXJ1bigiL2xpYi91Y2QvV29yZEJyZWFrVGVzdC50eHQiLCBydW5l d2JyZWFrLCB1dGZ3YnJlYWspOworCWV4aXRzKG5pbCk7Cit9Ci0tLSAvZGV2L251bGwKKysr IGIvL3N5cy9zcmMvbGliYy90ZXN0L3J1bmVub3JtLmMKQEAgLTEsMCArMSw5MiBAQAorI2lu Y2x1ZGUgPHUuaD4KKyNpbmNsdWRlIDxsaWJjLmg+CisjaW5jbHVkZSA8YmlvLmg+CisKK3N0 YXRpYyBpbnQKK2VzdHJ0b3VsKGNoYXIgKnMpCit7CisJY2hhciAqZXByOworCVJ1bmUgY29k ZTsKKworCWNvZGUgPSBzdHJ0b3VsKHMsICZlcHIsIDE2KTsKKwlpZihzID09IGVwcikKKwkJ c3lzZmF0YWwoImJhZCBjb2RlIHBvaW50IGhleCBzdHJpbmciKTsKKwlyZXR1cm4gY29kZTsK K30KKwordm9pZAorbWFpbihpbnQsIGNoYXIpCit7CisJUnVuZSBidWZmZXIxWzY0XTsKKwlS dW5lIGJ1ZmZlcjJbNjRdOworCWNoYXIgdXRmYnVmZjFbMTI4XTsKKwljaGFyIHV0ZmJ1ZmYy WzEyOF07CisJY2hhciBzcmN0bXBbMTI4XSwgdG1wMVsxMjhdLCB0bXAyWzEyOF07CisJY2hh ciAqZmllbGRzWzEwXTsKKwljaGFyICpydW5lc1szMl07CisJY2hhciAqcDsKKwlpbnQgbiwg bjI7CisJaW50IGk7CisJdWludCBmYWlsOworCUJpb2J1ZiAqYjsKKworCWIgPSBCb3Blbigi L2xpYi91Y2QvTm9ybWFsaXphdGlvblRlc3QudHh0IiwgT1JFQUQpOworCWlmKGIgPT0gbmls KQorCQlzeXNmYXRhbCgiY291bGQgbm90IGxvYWQgY29tcG9zaXRpb24gZXhjbHVzaW9uczog JXIiKTsKKworCXN0cnVjdCB7CisJCVJ1bmUgc3JjWzMyXTsKKwkJUnVuZSBuZmNbMzJdOwor CQlSdW5lIG5mZFszMl07CisJfSB0ZXN0OworCXdoaWxlKChwID0gQnJkbGluZShiLCAnXG4n KSkgIT0gbmlsKXsKKwkJcFtCbGluZWxlbihiKS0xXSA9IDA7CisJCWlmKHBbMF0gPT0gMCB8 fCBwWzBdID09ICcjJyB8fCBwWzBdID09ICdAJykKKwkJCWNvbnRpbnVlOworCQlnZXRmaWVs ZHMocCwgZmllbGRzLCA2ICsgMSwgMCwgIjsiKTsKKwkJbiA9IGdldGZpZWxkcyhmaWVsZHNb MF0sIHJ1bmVzLCBuZWxlbShydW5lcyksIDAsICIgIik7CisJCWZvcihpID0gMDsgaSA8IG47 IGkrKykKKwkJCXRlc3Quc3JjW2ldID0gZXN0cnRvdWwocnVuZXNbaV0pOworCQl0ZXN0LnNy Y1tpXSA9IDA7CisKKwkJbiA9IGdldGZpZWxkcyhmaWVsZHNbMV0sIHJ1bmVzLCBuZWxlbShy dW5lcyksIDAsICIgIik7CisJCWZvcihpID0gMDsgaSA8IG47IGkrKykKKwkJCXRlc3QubmZj W2ldID0gZXN0cnRvdWwocnVuZXNbaV0pOworCQl0ZXN0Lm5mY1tpXSA9IDA7CisKKwkJbiA9 IGdldGZpZWxkcyhmaWVsZHNbMl0sIHJ1bmVzLCBuZWxlbShydW5lcyksIDAsICIgIik7CisJ CWZvcihpID0gMDsgaSA8IG47IGkrKykKKwkJCXRlc3QubmZkW2ldID0gZXN0cnRvdWwocnVu ZXNbaV0pOworCQl0ZXN0Lm5mZFtpXSA9IDA7CisKKwkJbiA9IHJ1bmVjb21wKGJ1ZmZlcjEs IHRlc3Quc3JjLCBuZWxlbShidWZmZXIxKSk7CisJCW4yID0gcnVuZWRlY29tcChidWZmZXIy LCB0ZXN0LnNyYywgbmVsZW0oYnVmZmVyMikpOworCQlmYWlsID0gMDsKKworCQlpZihydW5l c3RyY21wKGJ1ZmZlcjEsIHRlc3QubmZjKSAhPSAwKQorCQkJZmFpbCB8PSAxPDwwOworCQlp ZihydW5lc3RyY21wKGJ1ZmZlcjIsIHRlc3QubmZkKSAhPSAwKQorCQkJZmFpbCB8PSAxPDwx OworCQlpZihmYWlsKQorCQkJcHJpbnQoIiVkICVkICVTICVTICVTICVTICVTXG4iLCBmYWls LCBpLCB0ZXN0LnNyYywgdGVzdC5uZmQsIHRlc3QubmZjLCBidWZmZXIyLCBidWZmZXIxKTsK KwkJYXNzZXJ0KG4gPT0gcnVuZXN0cmxlbih0ZXN0Lm5mYykpOworCQlhc3NlcnQobjIgPT0g cnVuZXN0cmxlbih0ZXN0Lm5mZCkpOworCisJCXNucHJpbnQoc3JjdG1wLCBzaXplb2YgdG1w MSwgIiVTIiwgdGVzdC5zcmMpOworCQlzbnByaW50KHRtcDEsIHNpemVvZiB0bXAxLCAiJVMi LCB0ZXN0Lm5mYyk7CisJCXNucHJpbnQodG1wMiwgc2l6ZW9mIHRtcDIsICIlUyIsIHRlc3Qu bmZkKTsKKworCQluID0gdXRmY29tcCh1dGZidWZmMSwgc3JjdG1wLCBuZWxlbSh1dGZidWZm MSkpOworCQluMiA9IHV0ZmRlY29tcCh1dGZidWZmMiwgc3JjdG1wLCBuZWxlbSh1dGZidWZm MikpOworCisJCWlmKHN0cmNtcCh1dGZidWZmMSwgdG1wMSkgIT0gMCkKKwkJCWZhaWwgfD0g MTw8MjsKKwkJaWYoc3RyY21wKHV0ZmJ1ZmYyLCB0bXAyKSAhPSAwKQorCQkJZmFpbCB8PSAx PDwzOworCQlpZihmYWlsKQorCQkJcHJpbnQoIiVkICVkICVzICVzICVzICVzICVzXG4iLCBm YWlsLCBpLCBzcmN0bXAsIHRtcDIsIHRtcDEsIHV0ZmJ1ZmYyLCB1dGZidWZmMSk7CisJCWFz c2VydChuID09IHN0cmxlbih0bXAxKSk7CisJCWFzc2VydChuMiA9PSBzdHJsZW4odG1wMikp OworCX0KKwlleGl0cyhuaWwpOworfQo= --upas-zvjieldmlifvvpzudqkmilbsnj-- --------------lqF0Pv7xuUKvjWZxQscTAop0--