From owner-freebsd-ports-bugs@FreeBSD.ORG Sun Mar 25 15:50:14 2007 Return-Path: X-Original-To: freebsd-ports-bugs@hub.freebsd.org Delivered-To: freebsd-ports-bugs@hub.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 0B32816A400 for ; Sun, 25 Mar 2007 15:50:14 +0000 (UTC) (envelope-from gnats@FreeBSD.org) Received: from freefall.freebsd.org (freefall.freebsd.org [69.147.83.40]) by mx1.freebsd.org (Postfix) with ESMTP id B43D013C4BA for ; Sun, 25 Mar 2007 15:50:08 +0000 (UTC) (envelope-from gnats@FreeBSD.org) Received: from freefall.freebsd.org (gnats@localhost [127.0.0.1]) by freefall.freebsd.org (8.13.4/8.13.4) with ESMTP id l2PFo8aI079716 for ; Sun, 25 Mar 2007 15:50:08 GMT (envelope-from gnats@freefall.freebsd.org) Received: (from gnats@localhost) by freefall.freebsd.org (8.13.4/8.13.4/Submit) id l2PFo8iD079715; Sun, 25 Mar 2007 15:50:08 GMT (envelope-from gnats) Date: Sun, 25 Mar 2007 15:50:08 GMT Message-Id: <200703251550.l2PFo8iD079715@freefall.freebsd.org> To: freebsd-ports-bugs@FreeBSD.org From: nemo Cc: Subject: Re: ports/110767: [UPDATE]java/jboss3:update to jboss3.2.8 X-BeenThere: freebsd-ports-bugs@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list Reply-To: nemo List-Id: Ports bug reports List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 25 Mar 2007 15:50:14 -0000 The following reply was made to PR ports/110767; it has been noted by GNATS. From: nemo To: bug-followup@FreeBSD.org, nemoliu@gmail.com, pav@freebsd.org Cc: Subject: Re: ports/110767: [UPDATE]java/jboss3:update to jboss3.2.8 Date: Sun, 25 Mar 2007 23:41:50 +0800 ------=_Part_225893_17557009.1174837310764 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit Content-Disposition: inline I rewrite the patch .this one should be better. such as: change USE_RC_SUBR value to jboss3.sh; use ant to build src; use SUB_FILES and SUB_LIST replace use sed manaully. I rewrite another patch in the same way. http://www.freebsd.org/cgi/query-pr.cgi?pr=ports/110768 ------=_Part_225893_17557009.1174837310764 Content-Type: text/plain; name=patch-jboss3.txt; charset=ANSI_X3.4-1968 Content-Transfer-Encoding: base64 X-Attachment-Id: f_ezpnm5j5 Content-Disposition: attachment; filename="patch-jboss3.txt" SW5kZXg6IE1ha2VmaWxlCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9ob21lL25jdnMvcG9ydHMvamF2 YS9qYm9zczMvTWFrZWZpbGUsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMzAKZGlmZiAtdSAtcjEu MzAgTWFrZWZpbGUKLS0tIE1ha2VmaWxlCTkgTWF5IDIwMDYgMDA6MTg6MDQgLTAwMDAJMS4zMAor KysgTWFrZWZpbGUJMjUgTWFyIDIwMDcgMTM6NTU6NTcgLTAwMDAKQEAgLTIsMTEgKzIsMTEgQEAK ICMgRGF0ZSBjcmVhdGVkOiAgICAgICAgICAgICAgICAgIDE2IEFwcmlsIDIwMDIKICMgV2hvbTog ICAgICAgICAgICAgICAgICAgICAgICAgIEVybnN0IGRlIEhhYW4gPHpuZXJkQEZyZWVCU0Qub3Jn PgogIwotIyAkRnJlZUJTRDogcG9ydHMvamF2YS9qYm9zczMvTWFrZWZpbGUsdiAxLjMwIDIwMDYv MDUvMDkgMDA6MTg6MDQgZWR3aW4gRXhwICQKKyMgJEZyZWVCU0QkCiAjCiAKIFBPUlROQU1FPQkk e0FQUF9USVRMRTpMfQotUE9SVFZFUlNJT049CTMuMi43CitQT1JUVkVSU0lPTj0JMy4yLjguU1Ax CiBDQVRFR09SSUVTPQlqYXZhIGRldmVsCiBNQVNURVJfU0lURVM9CSR7TUFTVEVSX1NJVEVfU09V UkNFRk9SR0V9CiBNQVNURVJfU0lURV9TVUJESVI9CSR7UE9SVE5BTUV9CkBAIC0xNSwxNCArMTUs MTUgQEAKIE1BSU5UQUlORVI9CWpvbmNAY2hlbi5vcmcubnoKIENPTU1FTlQ9CUpCb3NzIDMueCwg YW4gb3Blbi1zb3VyY2UgSjJFRSBhcHBsaWNhdGlvbiBzZXJ2ZXIKIAotQlVJTERfREVQRU5EUz0J YW50OiR7UE9SVFNESVJ9L2RldmVsL2FwYWNoZS1hbnQKLQogTEFURVNUX0xJTks9CWpib3NzMwog VVNFX0pBVkE9CXllcwogSkFWQV9WRVJTSU9OPQkxLjQKK1VTRV9BTlQ9CXllcworTUFLRV9BUkdT PQktYnVpbGRmaWxlIGJ1aWxkL2J1aWxkLnhtbAogCi1VU0VfUkNfU1VCUj0JWUVTCitVU0VfUkNf U1VCUj0JamJvc3MzLnNoCiBVU0VfQlpJUDI9CVlFUworU1VCX0ZJTEVTPQlwa2ctaW5zdGFsbCBw a2ctZGVpbnN0YWxsIHBrZy1tZXNzYWdlIGRhZW1vbmN0bC4xIGRhZW1vbmN0bC5jCiAKIC5pZiAh ZGVmaW5lZChOT1BPUlRET0NTKQogUE9SVERPQ1M9CSoKQEAgLTU3LDQ3ICs1OCw0MSBAQAogQVBQ X0hPTUVfRklMRVM9CWJpbiBjbGllbnQgbGliIHNlcnZlcgogCiBQTElTVF9GSUxFUz0JJHtDT05U Uk9MX1NDUklQVDpTLF4ke1BSRUZJWH0vLCx9IFwKLQkJJHtTVEFSVFVQX1NDUklQVDpTLF4ke1BS RUZJWH0vLCx9IFwKIAkJJHtTVERPVVRfTE9HOlMsXiR7UFJFRklYfS8sLH0gXAogCQkke1NUREVS Ul9MT0c6UyxeJHtQUkVGSVh9LywsfQogCi1QS0dNRVNTQUdFPQkke1dSS0RJUn0vcGtnLW1lc3Nh Z2UuZm10CitQS0dNRVNTQUdFPQkke1dSS0RJUn0vcGtnLW1lc3NhZ2UKIAotLmluY2x1ZGUgPGJz ZC5wb3J0LnByZS5taz4KK1NVQl9MSVNUPQlBUFBfSE9NRT0ke0FQUF9IT01FfSBcCisJCUFQUF9T SE9SVE5BTUU9JHtBUFBfU0hPUlROQU1FfSBcCisJCUFQUF9USVRMRT0ke0FQUF9USVRMRX0gXAor CQlDT05UUk9MX1NDUklQVD0ke0NPTlRST0xfU0NSSVBUfSBcCisJCUNPTlRST0xfU0NSSVBUX01B TlBBR0VfVElUTEU9JHtDT05UUk9MX1NDUklQVF9NQU5QQUdFX1RJVExFfSBcCisJCUNPTlRST0xf U0NSSVBUX05BTUU9JHtDT05UUk9MX1NDUklQVF9OQU1FfSBcCisJCUdST1VQPSR7R1JPVVB9IFwK KwkJSkFWQT0ke0pBVkF9IFwKKwkJSkFWQV9DUD0ke0pBVkFfQ1B9IFwKKwkJSkFWQV9IT01FPSR7 SkFWQV9IT01FfSBcCisJCUpBVkFfTUFJTj0ke0pBVkFfTUFJTn0gXAorCQlKQVZBX09QVFM9JHtK QVZBX09QVFN9IFwKKwkJSkFWQV9QT1JUX1ZFUlNJT049JHtKQVZBX1BPUlRfVkVSU0lPTn0gXAor CQlKQVZBX1BPUlRfT1NfREVTQ1JJUFRJT049JHtKQVZBX1BPUlRfT1NfREVTQ1JJUFRJT059IFwK KwkJSkFSX0ZJTEU9JHtKQVJfRklMRX0gXAorCQlMT0dfRElSPSR7TE9HX0RJUn0gXAorCQlQSURf RklMRT0ke1BJRF9GSUxFfSBcCisJCVBLR05BTUU9JHtQS0dOQU1FfSBcCisJCVBPUlROQU1FPSR7 UE9SVE5BTUV9IFwKKwkJUE9SVFZFUlNJT049JHtQT1JUVkVSU0lPTn0gXAorCQlQUkVGSVg9JHtQ UkVGSVh9IFwKKwkJU1RBUlRVUF9TQ1JJUFQ9JHtTVEFSVFVQX1NDUklQVH0gXAorCQlTVERFUlJf TE9HPSR7U1RERVJSX0xPR30gXAorCQlTVERPVVRfTE9HPSR7U1RET1VUX0xPR30gXAorCQlTVE9Q X1RJTUVPVVQ9JHtTVE9QX1RJTUVPVVR9IFwKKwkJVVNFUj0ke1VTRVJ9CiAKLWRvLWNvbmZpZ3Vy ZToKLQlAKGNkICR7REFFTU9OQ1RMX0RJUn0gJiYgJHtDUH0gJHtEQUVNT05DVExfRklMRVN9ICR7 V1JLRElSfSkKLQlAKGNkICR7V1JLRElSfSAmJiAke1JFSU5QTEFDRV9DTUR9IFwKLQkJLWUgInN8 JSVSQ19TVUJSJSV8JHtSQ19TVUJSfXxnOyIgXAotCQktZSAic3wlJUFQUF9IT01FJSV8JHtBUFBf SE9NRX18ZzsiIFwKLQkJLWUgInN8JSVBUFBfU0hPUlROQU1FJSV8JHtBUFBfU0hPUlROQU1FfXxn OyIgXAotCQktZSAic3wlJUFQUF9USVRMRSUlfCR7QVBQX1RJVExFfXxnOyIgXAotCQktZSAic3wl JUNPTlRST0xfU0NSSVBUJSV8JHtDT05UUk9MX1NDUklQVH18ZzsiIFwKLQkJLWUgInN8JSVDT05U Uk9MX1NDUklQVF9NQU5QQUdFX1RJVExFJSV8JHtDT05UUk9MX1NDUklQVF9NQU5QQUdFX1RJVExF fXxnOyIgXAotCQktZSAic3wlJUNPTlRST0xfU0NSSVBUX05BTUUlJXwke0NPTlRST0xfU0NSSVBU X05BTUV9fGc7IiBcCi0JCS1lICJzfCUlR1JPVVAlJXwke0dST1VQfXxnOyIgXAotCQktZSAic3wl JUpBVkElJXwke0pBVkF9fGc7IiBcCi0JCS1lICJzfCUlSkFWQV9DUCUlfCR7SkFWQV9DUH18Zzsi IFwKLQkJLWUgInN8JSVKQVZBX0hPTUUlJXwke0pBVkFfSE9NRX18ZzsiIFwKLQkJLWUgInN8JSVK QVZBX01BSU4lJXwke0pBVkFfTUFJTn18ZzsiIFwKLQkJLWUgInN8JSVKQVZBX09QVFMlJXwke0pB VkFfT1BUU318ZzsiIFwKLQkJLWUgInN8JSVKQVZBX1BPUlRfVkVSU0lPTiUlfCR7SkFWQV9QT1JU X1ZFUlNJT059fGc7IiBcCi0JCS1lICJzfCUlSkFWQV9QT1JUX09TX0RFU0NSSVBUSU9OJSV8JHtK QVZBX1BPUlRfT1NfREVTQ1JJUFRJT059fGc7IiBcCi0JCS1lICJzfCUlSkFSX0ZJTEUlJXwke0pB Ul9GSUxFfXxnOyIgXAotCQktZSAic3wlJUxPR19ESVIlJXwke0xPR19ESVJ9fGc7IiBcCi0JCS1l ICJzfCUlUElEX0ZJTEUlJXwke1BJRF9GSUxFfXxnOyIgXAotCQktZSAic3wlJVBLR05BTUUlJXwk e1BLR05BTUV9fGc7IiBcCi0JCS1lICJzfCUlUE9SVE5BTUUlJXwke1BPUlROQU1FfXxnOyIgXAot CQktZSAic3wlJVBPUlRWRVJTSU9OJSV8JHtQT1JUVkVSU0lPTn18ZzsiIFwKLQkJLWUgInN8JSVQ UkVGSVglJXwke1BSRUZJWH18ZzsiIFwKLQkJLWUgInN8JSVTVEFSVFVQX1NDUklQVCUlfCR7U1RB UlRVUF9TQ1JJUFR9fGc7IiBcCi0JCS1lICJzfCUlU1RERVJSX0xPRyUlfCR7U1RERVJSX0xPR318 ZzsiIFwKLQkJLWUgInN8JSVTVERPVVRfTE9HJSV8JHtTVERPVVRfTE9HfXxnOyIgXAotCQktZSAi c3wlJVNUT1BfVElNRU9VVCUlfCR7U1RPUF9USU1FT1VUfXxnOyIgXAotCQktZSAic3wlJVVTRVIl JXwke1VTRVJ9fGc7IiAke0RBRU1PTkNUTF9GSUxFU30pCi0JQCR7Rk1UfSAtcyA4MCAke1dSS0RJ Un0vcGtnLW1lc3NhZ2UgPiR7UEtHTUVTU0FHRX0KKy5pbmNsdWRlIDxic2QucG9ydC5wcmUubWs+ CiAKLXBvc3QtY29uZmlndXJlOgorcG9zdC1wYXRjaDoKIAlAJHtFQ0hPX01TR30gIkluc3RhbGxh dGlvbiBzZXR0aW5nczoiCiAJQCR7RUNIT19NU0d9ICIgICBEZXN0aW5hdGlvbiBkaXJlY3Rvcnk6 ICAgICR7QVBQX0hPTUV9IgogCUAke0VDSE9fTVNHfSAiICAgQ29udHJvbCBwcm9ncmFtIGxvY2F0 aW9uOiAke0NPTlRST0xfU0NSSVBUfSIKQEAgLTExMSwyMSArMTA2LDE3IEBACiAJQCR7RUNIT19N U0d9ICIgICBTdGFydGluZyBhZnRlciBpbnN0YWxsOiAgICR7QVVUT19TVEFSVH0iCiAJQCR7RUNI T19NU0d9ICIgICBTdG9wIHRpbWUtb3V0OiAgICAgICAgICAgICR7U1RPUF9USU1FT1VUfSBzZWMu IgogCi1kby1idWlsZDoKLQkoY2QgJHtXUktESVJ9ICYmICR7Q0N9ICR7Q0ZMQUdTfSAtbyAke0NP TlRST0xfU0NSSVBUX05BTUV9IGRhZW1vbmN0bC5jKQotCShjZCAke1dSS1NSQ30vYnVpbGQgJiYg JHtTRVRFTlZ9IEpBVkFfSE9NRT0iJHtKQVZBX0hPTUV9IiBQQVRIPSIke0pBVkFfSE9NRX0vYmlu OiR7UEFUSH0iICR7U0h9IGJ1aWxkLnNoKQotCiBwcmUtaW5zdGFsbDoKIAlAJHtTRVRFTlZ9IFBL R19QUkVGSVg9JHtQUkVGSVh9ICR7U0h9ICR7UEtHSU5TVEFMTH0gJHtQS0dOQU1FfSBQUkUtSU5T VEFMTAogCiBkby1pbnN0YWxsOgorCWNkICR7V1JLRElSfSAmJiAke0NDfSAke0NGTEFHU30gLW8g JHtDT05UUk9MX1NDUklQVF9OQU1FfSBkYWVtb25jdGwuYwogCSR7TUtESVJ9ICR7QVBQX0hPTUV9 ICYmICR7Q0hPV059ICR7VVNFUn06JHtHUk9VUH0gJHtBUFBfSE9NRX0KIAkke01LRElSfSAke0xP R19ESVJ9ICYmICR7Q0hPV059ICR7VVNFUn06JHtHUk9VUH0gJHtMT0dfRElSfQogCShjZCAke0pC T1NTT1VUUFVUfSAmJiAke0ZJTkR9ICR7QVBQX0hPTUVfRklMRVN9IHxcCiAJCSR7Q1BJT30gLXBk bXUgLVIgJHtVU0VSfToke0dST1VQfSAke0FQUF9IT01FfSkKIAkke0lOU1RBTEx9IC1vICR7VVNF Un0gLWcgJHtHUk9VUH0gLW0gMDY3NTRcCiAJCSR7V1JLRElSfS8ke0NPTlRST0xfU0NSSVBUX05B TUV9ICR7Q09OVFJPTF9TQ1JJUFR9Ci0JJHtJTlNUQUxMX1NDUklQVH0gJHtXUktESVJ9L3N0YXJ0 dXAuc2ggJHtTVEFSVFVQX1NDUklQVH0KIAkke0lOU1RBTEx9IC1vICR7VVNFUn0gLWcgJHtHUk9V UH0gLW0gMDY0MCAvZGV2L251bGwgJHtTVERPVVRfTE9HfQogCSR7SU5TVEFMTH0gLW8gJHtVU0VS fSAtZyAke0dST1VQfSAtbSAwNjQwIC9kZXYvbnVsbCAke1NUREVSUl9MT0d9CiAJJHtJTlNUQUxM fSAtbyAke1VTRVJ9IC1nICR7R1JPVVB9IC1tIDA2NDAgL2Rldi9udWxsICR7UElEX0ZJTEV9Cklu ZGV4OiBkaXN0aW5mbwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvaG9tZS9uY3ZzL3BvcnRzL2phdmEv amJvc3MzL2Rpc3RpbmZvLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEzCmRpZmYgLXUgLXIxLjEz IGRpc3RpbmZvCi0tLSBkaXN0aW5mbwkyMiBKYW4gMjAwNiAxMjozOTo1NCAtMDAwMAkxLjEzCisr KyBkaXN0aW5mbwkyNSBNYXIgMjAwNyAwODozMzoyNCAtMDAwMApAQCAtMSwzICsxLDMgQEAKLU1E NSAoamJvc3MtMy4yLjctc3JjLnRhci5iejIpID0gMWQzZDY2ZDFkNzc5YWYwZDQ3ZWYwYmExYzE4 OWJmZmMKLVNIQTI1NiAoamJvc3MtMy4yLjctc3JjLnRhci5iejIpID0gMWRhMGRmYjU5MmU1YmFh NGU0MWYyNzJjZTNkY2I2NWYwZjY1ZTI5MGNlZjllMDA5Zjk2NDQ1MjdiYWQ4NmM1NAotU0laRSAo amJvc3MtMy4yLjctc3JjLnRhci5iejIpID0gNDg2ODgxMzMKK01ENSAoamJvc3MtMy4yLjguU1Ax LXNyYy50YXIuYnoyKSA9IGEzZTJjMjQwOTQ2NWEyMjc2YWE1ODRkOTEwMDAyNmI3CitTSEEyNTYg KGpib3NzLTMuMi44LlNQMS1zcmMudGFyLmJ6MikgPSBlZDRlNDVmYTVmNTFjZDhhMmEzNjQzZjM2 NzY1ODA3MjRiNWM2YmY2OGEzNDdiYjNhZWUxNzAyZDRkMzg0OTE0CitTSVpFIChqYm9zcy0zLjIu OC5TUDEtc3JjLnRhci5iejIpID0gMzc5OTUyMjcKSW5kZXg6IHBrZy1kZWluc3RhbGwKPT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PQpSQ1MgZmlsZTogcGtnLWRlaW5zdGFsbApkaWZmIC1OIHBrZy1kZWluc3RhbGwKLS0tIHBr Zy1kZWluc3RhbGwJMTQgSnVsIDIwMDMgMTA6MDM6MTMgLTAwMDAJMS4yCisrKyAvZGV2L251bGwJ MSBKYW4gMTk3MCAwMDowMDowMCAtMDAwMApAQCAtMSwzNSArMCwwIEBACi0jIS9iaW4vc2gKLSMK LSMgVGhpcyBzY3JpcHQgZG9lcyB0aGUgZm9sbG93aW5nLgotIwotIyAqIENoZWNrcyBpZiB0aGUg SkJvc3MgUElEIGZpbGUgZXhpc3RzLiBJZiBpdCBkb2VzLCBpdCBraWxscyB0aGUKLSMgICBKQm9z cyBwcm9jZXNzIGFuZCByZW1vdmVzIHRoZSBQSUQgZmlsZS4KLSMKLSMgJEZyZWVCU0Q6IHBvcnRz L2phdmEvamJvc3MzL3BrZy1kZWluc3RhbGwsdiAxLjIgMjAwMy8wNy8xNCAxMDowMzoxMyBkZXMg RXhwICQKLSMKLQotIyBNYWtlIHN1cmUgd2UncmUgaW4gdGhlIHJpZ2h0IHN0YWdlIG9mIHRoZSBw cm9jZXNzCi1pZiBbICIkMiIgPSAiREVJTlNUQUxMIiBdOyB0aGVuCi0KLQkjIEtpbGwgSkJvc3Mg aWYgaXQgaXMgc3RpbGwgcnVubmluZwotCVBJRF9GSUxFPS92YXIvcnVuL2pib3NzLnBpZAotCWlm IFsgLXMgJHtQSURfRklMRX0gXTsgdGhlbgotCQlQSUQ9YGNhdCAke1BJRF9GSUxFfWAKLQkJZWNo byAtbiAiPj4gS2lsbGluZyBKQm9zcyBTZXJ2ZXIgcHJvY2VzcyAoJHtQSUR9KS4uLiIKLQkJL2Jp bi9raWxsICR7UElEfSA+IC9kZXYvbnVsbCAyPiAvZGV2L251bGwKLQkJaWYgWyAkPyAtZXEgMCBd OyB0aGVuCi0JCQllY2hvICIgWyBET05FIF0iCi0JCWVsc2UKLQkJCWVjaG8gIiBbIEZBSUxFRCBd IgotCQlmaQotCQllY2hvIC1uICI+PiBSZW1vdmluZyBQSUQgZmlsZSAoJHtQSURfRklMRX0pLi4u IgotCQlybSAke1BJRF9GSUxFfSA+IC9kZXYvbnVsbCAyPiAvZGV2L251bGwKLQkJaWYgWyAkPyAt ZXEgMCBdOyB0aGVuCi0JCQllY2hvICIgWyBET05FIF0iCi0JCWVsc2UKLQkJCWVjaG8gIiBbIEZB SUxFRCBdIgotCQlmaQotCWZpCi1maQotCi1leGl0IDAKSW5kZXg6IHBrZy1pbnN0YWxsCj09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT0KUkNTIGZpbGU6IHBrZy1pbnN0YWxsCmRpZmYgLU4gcGtnLWluc3RhbGwKLS0tIHBrZy1p bnN0YWxsCTI2IEFwciAyMDAyIDIxOjU0OjE1IC0wMDAwCTEuMQorKysgL2Rldi9udWxsCTEgSmFu IDE5NzAgMDA6MDA6MDAgLTAwMDAKQEAgLTEsNDYgKzAsMCBAQAotIyEvYmluL3NoCi0jCi0jIENo ZWNrcyBpZiB0aGUgJ3d3dycgdXNlciBhbmQgZ3JvdXAgZXhpc3QuIElmIHRoZXkgZG9uJ3QsIHRo ZW4KLSMgYW4gYXR0ZW1wdCBpcyBtYWRlIHRvIGNyZWF0ZSBib3RoLgotIwotIyAkRnJlZUJTRDog cG9ydHMvamF2YS9qYm9zczMvcGtnLWluc3RhbGwsdiAxLjEgMjAwMi8wNC8yNiAyMTo1NDoxNSB6 bmVyZCBFeHAgJAotIwotCi0jIE1ha2Ugc3VyZSB3ZSdyZSBjYWxsZWQgZHVyaW5nIHRoZSAnbWFr ZSBpbnN0YWxsJyBwcm9jZXNzCi1pZiBbICIkMiIgIT0gIlBSRS1JTlNUQUxMIiBdOyB0aGVuCi0g ICAgZXhpdCAwCi1maQotCi0jIFNldCBzb21lIGNvbnN0YW50cwotVVNFUj13d3cKLUdST1VQPSR7 VVNFUn0KLVVJRD04MAotR0lEPSR7VUlEfQotCi0jIFNlZSBpZiB0aGUgZ3JvdXAgYWxyZWFkeSBl eGlzdHMKLWlmICEgcHcgZ3JvdXBzaG93ICIke0dST1VQfSIgMj4vZGV2L251bGwgMT4mMjsgdGhl bgotCi0JIyBJZiBub3QsIHRyeSB0byBjcmVhdGUgaXQKLQlpZiBwdyBncm91cGFkZCAke0dST1VQ fSAtZyAke0dJRH07IHRoZW4KLQkJZWNobyAiQWRkZWQgZ3JvdXAgXCIke0dST1VQfVwiLiIKLQll bHNlCi0JCWVjaG8gIkFkZGluZyBncm91cCBcIiR7R1JPVVB9XCIgZmFpbGVkLi4uIgotCQlleGl0 IDEKLQlmaQotZmkKLQotIyBTZWUgaWYgdGhlIHVzZXIgYWxyZWFkeSBleGlzdHMKLWlmICEgcHcg dXNlcnNob3cgIiR7VVNFUn0iIDI+L2Rldi9udWxsIDE+JjI7IHRoZW4KLQotCSMgSWYgbm90LCB0 cnkgdG8gY3JlYXRlIGl0Ci0JaWYgcHcgdXNlcmFkZCAke1VTRVJ9IC11ICR7VUlEfSAtZyAke0dS T1VQfSAtaCAtIFwKLQkJLXMgIi9zYmluL25vbG9naW4iIC1kICIvbm9uZXhpc3RlbnQiIFwKLQkJ LWMgIldvcmxkIFdpZGUgV2ViIE93bmVyIjsgXAotCXRoZW4KLQkJZWNobyAiQWRkZWQgdXNlciBc IiR7VVNFUn1cIi4iCi0JZWxzZQotCQllY2hvICJBZGRpbmcgdXNlciBcIiR7VVNFUn1cIiBmYWls ZWQuLi4iCi0JCWV4aXQgMQotCWZpCi1maQotZXhpdCAwCkluZGV4OiBmaWxlcy9kYWVtb25jdGwu MQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09ClJDUyBmaWxlOiBmaWxlcy9kYWVtb25jdGwuMQpkaWZmIC1OIGZpbGVzL2Rh ZW1vbmN0bC4xCi0tLSBmaWxlcy9kYWVtb25jdGwuMQkyMSBKdW4gMjAwNCAxNjo0Mjo1OSAtMDAw MAkxLjEKKysrIC9kZXYvbnVsbAkxIEphbiAxOTcwIDAwOjAwOjAwIC0wMDAwCkBAIC0xLDc4ICsw LDAgQEAKLS5EZCBGZWJydWFyeSAyMSwgMjAwMgotLkR0ICUlQ09OVFJPTF9TQ1JJUFRfTUFOUEFH RV9USVRMRSUlIDEKLS5PcyBGcmVlQlNECi0uU2ggTkFNRQotLk5tICUlQ09OVFJPTF9TQ1JJUFRf TkFNRSUlCi0uTmQgJSVBUFBfVElUTEUlJSBzZXJ2ZXIgY29udHJvbCBpbnRlcmZhY2UKLS5TaCBT WU5PUFNJUwotLk5tCi0uT3AgRmwgamF2YS1vcHRpb25zCi0uQXIge3N0YXJ0fHJlc3RhcnR8c3Rv cH0KLS5TaCBERVNDUklQVElPTgotVGhlCi0uTm0KLXByb2dyYW0gcHJvdmlkZXMgYW4gcmVzdHJp Y3RlZCBpbnRlcmZhY2UgdG8gdGhlICUlQVBQX1RJVExFJSUKLWFwcGxpY2F0aW9uIHNlcnZlci4g VGhlCi0uTm0KLXByb2dyYW0gaXMgb25seSBhY2Nlc3NpYmxlIHRvIHVzZXJzIGluIHRoZSAnd3d3 JyBncm91cCwgYW5kIHdpbGwKLW9ubHkgaW52b2tlIHRoZSAlJUpBVkFfUE9SVF9PU19ERVNDUklQ VElPTiUlICUlSkFWQV9QT1JUX1ZFUlNJT04lJSBKVk0uCi0uUHAKLUFueSBKYXZhIG9wdGlvbnMg bGlzdGVkIGFyZSBoYW5kZWQgb2ZmIGRpcmVjdGx5IHRvIHRoZSBKVk0uIEFueQotY2xhc3NwYXRo IG9wdGlvbnMgd2lsbCBiZSBpZ25vcmVkLgotLlBwCi1UaGUgcHJvZ3JhbSBleHBlY3RzIGV4YWN0 bHkgb25lIG9mIHRoZSBmb2xsb3dpbmcgdGVybWluYXRpbmcgY29tbWFuZHM6Ci0uQmwgLXRhZyAt d2lkdGggaW5kZW50Ci0uSXQgQXIgc3RhcnQKLVN0YXJ0ICUlQVBQX1RJVExFJSUsIGlmIGl0IGlz IG5vdCBhbHJlYWR5IHJ1bm5pbmcuCi0uSXQgQXIgcmVzdGFydAotUmVzdGFydCAlJUFQUF9USVRM RSUlLiBJZiBpdCBpcyBhbHJlYWR5IHJ1bm5pbmcsIHRoZW4gaXQgd2lsbCBiZSBzdG9wcGVkIGFu ZAotdGhlbiBzdGFydGVkIHJpZ2h0IGFmdGVyIHRoYXQuIE90aGVyd2lzZSBpdCB3aWxsIGp1c3Qg YmUgc3RhcnRlZCB1cC4KLS5JdCBBciBzdG9wCi1TdG9wICUlQVBQX1RJVExFJSUsIGlmIGl0IGlz IGFjdHVhbGx5IHJ1bm5pbmcuCi0uRWwKLS5TaCBFUlJPUlMKLVRoZSBmb2xsb3dpbmcgZXJyb3Ig Y29uZGl0aW9ucyBhcmUgZGV0ZWN0ZWQuIFRoZXkgd2lsbCBiZSBjaGVja2VkIGluIHRoZQotc3Bl Y2lmaWVkIG9yZGVyLiBJbiBlYWNoIGNhc2UgYW4gZXJyb3IgbWVzc2FnZSBpcyBwcmludGVkIHdp dGggdGhlIG5hbWUgb2YgdGhlCi1jb250cm9sIHByb2dyYW0gcHJlcGVuZGVkLgotLlBwCi1JZiBu byBhcmd1bWVudCBpcyBwYXNzZWQsIHRoZW4gYSBzaW1wbGUgaGVscCBtZXNzYWdlIGlzIHByaW50 ZWQgYW5kIHRoZQotcHJvZ3JhbSBleGlzdHMgd2l0aCBlcnJvciBjb2RlIDAuCi0uUHAKLUlmIGF0 IGxlYXN0IG9uZSBhcmd1bWVudCBpcyBwYXNzZWQsIGJ1dCBpdCBpcyBkaWZmZXJlbnQgZnJvbQot LkFyIHN0YXJ0ICwKLS5BciByZXN0YXJ0Ci1vcgotLkFyIHN0b3AKLXRoZW4gdGhlIGhlbHAgbWVz c2FnZSBpcyBwcmludGVkIGFzIHdlbGwsIGFuZCB0aGUgcHJvZ3JhbSBleGl0cyB3aXRoIGVycm9y Ci1jb2RlIDEuCi0uUHAKLVRoZSBmb2xsb3dpbmcgZXJyb3JzIGNvbmRpdGlvbnMgYXJlIGRlZmlu ZWQ6Ci0uQmwgLXRhZyAtd2lkdGggaW5kZW50Ci0uSXQgRW0gSWxsZWdhbCBwcm9ncmFtIGFyZ3Vt ZW50IChlcnJvciBjb2RlIDEpCi0uSXQgRW0gUElEIGZpbGUgbm90IGZvdW5kIChlcnJvciBjb2Rl IDIpCi0uSXQgRW0gUElEIGZpbGUgdG9vIGxhcmdlIChlcnJvciBjb2RlIDMpCi0uSXQgRW0gUElE IGZpbGUgY29udGFpbnMgaWxsZWdhbCBjaGFyYWN0ZXIgKGVycm9yIGNvZGUgNCkKLS5JdCBFbSBL aWxsIG9mIHByb2Nlc3MgZmFpbGVkIChlcnJvciBjb2RlIDUpCi0uSXQgRW0gJSVBUFBfVElUTEUl JSBpcyBhbHJlYWR5IHJ1bm5pbmcgKGVycm9yIGNvZGUgNikKLS5JdCBFbSAlJUFQUF9USVRMRSUl IGlzIG5vdCBydW5uaW5nIChlcnJvciBjb2RlIDcpCi0uSXQgRW0gVW5hYmxlIHRvIGNoZGlyIHRv IHRoZSAlJUFQUF9USVRMRSUlIGhvbWUgZGlyZWN0b3J5IChlcnJvciBjb2RlIDgpCi0uSXQgRW0g VW5hYmxlIHRvIG9wZW4gdGhlIHN0ZG91dCBsb2cgZmlsZSAoZXJyb3IgY29kZSA5KQotLkl0IEVt IFVuYWJsZSB0byBvcGVuIHRoZSBzdGRlcnIgbG9nIGZpbGUgKGVycm9yIGNvZGUgMTApCi0uSXQg RW0gVW5hYmxlIHRvIHN0YXJ0ICUlQVBQX1RJVExFJSUgKGVycm9yIGNvZGUgMTEpCi0uRWwKLS5T aCBGSUxFUwotLkJsIC10YWcgLXdpZHRoIC1pbmRlbnQKLS5JdCBQYSAlJVBJRF9GSUxFJSUKLVRo ZSAlJUFQUF9USVRMRSUlIFBJRCBmaWxlIHRoYXQgaXMgdXNlZCB0byBzdG9yZSB0aGUgcHJvY2Vz cyBJRCBvZiB0aGUKLWN1cnJlbnRseSBydW5uaW5nIHByb2Nlc3MgaW4uIEl0IGlzIGVtcHRpZWQg YXMgc29vbiBhcyB0aGUgc2VydmVyIGlzIHN0b3BwZWQKLWFuZCBmaWxsZWQgd2l0aCB0aGUgcHJv Y2VzcyBJRCB3aGVuIGl0IGlzIHN0YXJ0ZWQuIEl0IHNob3VsZCBuZXZlciBiZSB3cml0YWJsZQot Zm9yIGFueW9uZSBidXQKLS5FbSB3d3cgLAotLkl0IFBhICUlU1RBUlRVUF9TQ1JJUFQlJQotQSBz Y3JpcHQgdGhhdCBzdGFydHMgdGhlCi0uTm0KLXByb2dyYW0uIEl0IGlzIHVzZWQgdG8gc3RhcnQg JSVBUFBfVElUTEUlJSBhdCBzdGFydHVwIHRpbWUuCi0uRWwKLS5TaCBBVVRIT1JTCi0uQW4gRXJu c3QgZGUgSGFhbiBBcSB6bmVyZEBGcmVlQlNELm9yZwotLkFuIEpvbmF0aGFuIENoZW4gQXEgam9u Y0BjaGVuLm9yZy5uegpJbmRleDogZmlsZXMvZGFlbW9uY3RsLjEuaW4KPT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1Mg ZmlsZTogZmlsZXMvZGFlbW9uY3RsLjEuaW4KZGlmZiAtTiBmaWxlcy9kYWVtb25jdGwuMS5pbgot LS0gL2Rldi9udWxsCTEgSmFuIDE5NzAgMDA6MDA6MDAgLTAwMDAKKysrIGZpbGVzL2RhZW1vbmN0 bC4xLmluCTIxIEp1biAyMDA0IDE2OjQyOjU5IC0wMDAwCkBAIC0wLDAgKzEsNzggQEAKKy5EZCBG ZWJydWFyeSAyMSwgMjAwMgorLkR0ICUlQ09OVFJPTF9TQ1JJUFRfTUFOUEFHRV9USVRMRSUlIDEK Ky5PcyBGcmVlQlNECisuU2ggTkFNRQorLk5tICUlQ09OVFJPTF9TQ1JJUFRfTkFNRSUlCisuTmQg JSVBUFBfVElUTEUlJSBzZXJ2ZXIgY29udHJvbCBpbnRlcmZhY2UKKy5TaCBTWU5PUFNJUworLk5t CisuT3AgRmwgamF2YS1vcHRpb25zCisuQXIge3N0YXJ0fHJlc3RhcnR8c3RvcH0KKy5TaCBERVND UklQVElPTgorVGhlCisuTm0KK3Byb2dyYW0gcHJvdmlkZXMgYW4gcmVzdHJpY3RlZCBpbnRlcmZh Y2UgdG8gdGhlICUlQVBQX1RJVExFJSUKK2FwcGxpY2F0aW9uIHNlcnZlci4gVGhlCisuTm0KK3By b2dyYW0gaXMgb25seSBhY2Nlc3NpYmxlIHRvIHVzZXJzIGluIHRoZSAnd3d3JyBncm91cCwgYW5k IHdpbGwKK29ubHkgaW52b2tlIHRoZSAlJUpBVkFfUE9SVF9PU19ERVNDUklQVElPTiUlICUlSkFW QV9QT1JUX1ZFUlNJT04lJSBKVk0uCisuUHAKK0FueSBKYXZhIG9wdGlvbnMgbGlzdGVkIGFyZSBo YW5kZWQgb2ZmIGRpcmVjdGx5IHRvIHRoZSBKVk0uIEFueQorY2xhc3NwYXRoIG9wdGlvbnMgd2ls bCBiZSBpZ25vcmVkLgorLlBwCitUaGUgcHJvZ3JhbSBleHBlY3RzIGV4YWN0bHkgb25lIG9mIHRo ZSBmb2xsb3dpbmcgdGVybWluYXRpbmcgY29tbWFuZHM6CisuQmwgLXRhZyAtd2lkdGggaW5kZW50 CisuSXQgQXIgc3RhcnQKK1N0YXJ0ICUlQVBQX1RJVExFJSUsIGlmIGl0IGlzIG5vdCBhbHJlYWR5 IHJ1bm5pbmcuCisuSXQgQXIgcmVzdGFydAorUmVzdGFydCAlJUFQUF9USVRMRSUlLiBJZiBpdCBp cyBhbHJlYWR5IHJ1bm5pbmcsIHRoZW4gaXQgd2lsbCBiZSBzdG9wcGVkIGFuZAordGhlbiBzdGFy dGVkIHJpZ2h0IGFmdGVyIHRoYXQuIE90aGVyd2lzZSBpdCB3aWxsIGp1c3QgYmUgc3RhcnRlZCB1 cC4KKy5JdCBBciBzdG9wCitTdG9wICUlQVBQX1RJVExFJSUsIGlmIGl0IGlzIGFjdHVhbGx5IHJ1 bm5pbmcuCisuRWwKKy5TaCBFUlJPUlMKK1RoZSBmb2xsb3dpbmcgZXJyb3IgY29uZGl0aW9ucyBh cmUgZGV0ZWN0ZWQuIFRoZXkgd2lsbCBiZSBjaGVja2VkIGluIHRoZQorc3BlY2lmaWVkIG9yZGVy LiBJbiBlYWNoIGNhc2UgYW4gZXJyb3IgbWVzc2FnZSBpcyBwcmludGVkIHdpdGggdGhlIG5hbWUg b2YgdGhlCitjb250cm9sIHByb2dyYW0gcHJlcGVuZGVkLgorLlBwCitJZiBubyBhcmd1bWVudCBp cyBwYXNzZWQsIHRoZW4gYSBzaW1wbGUgaGVscCBtZXNzYWdlIGlzIHByaW50ZWQgYW5kIHRoZQor cHJvZ3JhbSBleGlzdHMgd2l0aCBlcnJvciBjb2RlIDAuCisuUHAKK0lmIGF0IGxlYXN0IG9uZSBh cmd1bWVudCBpcyBwYXNzZWQsIGJ1dCBpdCBpcyBkaWZmZXJlbnQgZnJvbQorLkFyIHN0YXJ0ICwK Ky5BciByZXN0YXJ0CitvcgorLkFyIHN0b3AKK3RoZW4gdGhlIGhlbHAgbWVzc2FnZSBpcyBwcmlu dGVkIGFzIHdlbGwsIGFuZCB0aGUgcHJvZ3JhbSBleGl0cyB3aXRoIGVycm9yCitjb2RlIDEuCisu UHAKK1RoZSBmb2xsb3dpbmcgZXJyb3JzIGNvbmRpdGlvbnMgYXJlIGRlZmluZWQ6CisuQmwgLXRh ZyAtd2lkdGggaW5kZW50CisuSXQgRW0gSWxsZWdhbCBwcm9ncmFtIGFyZ3VtZW50IChlcnJvciBj b2RlIDEpCisuSXQgRW0gUElEIGZpbGUgbm90IGZvdW5kIChlcnJvciBjb2RlIDIpCisuSXQgRW0g UElEIGZpbGUgdG9vIGxhcmdlIChlcnJvciBjb2RlIDMpCisuSXQgRW0gUElEIGZpbGUgY29udGFp bnMgaWxsZWdhbCBjaGFyYWN0ZXIgKGVycm9yIGNvZGUgNCkKKy5JdCBFbSBLaWxsIG9mIHByb2Nl c3MgZmFpbGVkIChlcnJvciBjb2RlIDUpCisuSXQgRW0gJSVBUFBfVElUTEUlJSBpcyBhbHJlYWR5 IHJ1bm5pbmcgKGVycm9yIGNvZGUgNikKKy5JdCBFbSAlJUFQUF9USVRMRSUlIGlzIG5vdCBydW5u aW5nIChlcnJvciBjb2RlIDcpCisuSXQgRW0gVW5hYmxlIHRvIGNoZGlyIHRvIHRoZSAlJUFQUF9U SVRMRSUlIGhvbWUgZGlyZWN0b3J5IChlcnJvciBjb2RlIDgpCisuSXQgRW0gVW5hYmxlIHRvIG9w ZW4gdGhlIHN0ZG91dCBsb2cgZmlsZSAoZXJyb3IgY29kZSA5KQorLkl0IEVtIFVuYWJsZSB0byBv cGVuIHRoZSBzdGRlcnIgbG9nIGZpbGUgKGVycm9yIGNvZGUgMTApCisuSXQgRW0gVW5hYmxlIHRv IHN0YXJ0ICUlQVBQX1RJVExFJSUgKGVycm9yIGNvZGUgMTEpCisuRWwKKy5TaCBGSUxFUworLkJs IC10YWcgLXdpZHRoIC1pbmRlbnQKKy5JdCBQYSAlJVBJRF9GSUxFJSUKK1RoZSAlJUFQUF9USVRM RSUlIFBJRCBmaWxlIHRoYXQgaXMgdXNlZCB0byBzdG9yZSB0aGUgcHJvY2VzcyBJRCBvZiB0aGUK K2N1cnJlbnRseSBydW5uaW5nIHByb2Nlc3MgaW4uIEl0IGlzIGVtcHRpZWQgYXMgc29vbiBhcyB0 aGUgc2VydmVyIGlzIHN0b3BwZWQKK2FuZCBmaWxsZWQgd2l0aCB0aGUgcHJvY2VzcyBJRCB3aGVu IGl0IGlzIHN0YXJ0ZWQuIEl0IHNob3VsZCBuZXZlciBiZSB3cml0YWJsZQorZm9yIGFueW9uZSBi dXQKKy5FbSB3d3cgLAorLkl0IFBhICUlU1RBUlRVUF9TQ1JJUFQlJQorQSBzY3JpcHQgdGhhdCBz dGFydHMgdGhlCisuTm0KK3Byb2dyYW0uIEl0IGlzIHVzZWQgdG8gc3RhcnQgJSVBUFBfVElUTEUl JSBhdCBzdGFydHVwIHRpbWUuCisuRWwKKy5TaCBBVVRIT1JTCisuQW4gRXJuc3QgZGUgSGFhbiBB cSB6bmVyZEBGcmVlQlNELm9yZworLkFuIEpvbmF0aGFuIENoZW4gQXEgam9uY0BjaGVuLm9yZy5u egpJbmRleDogZmlsZXMvZGFlbW9uY3RsLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogZmlsZXMvZGFl bW9uY3RsLmMKZGlmZiAtTiBmaWxlcy9kYWVtb25jdGwuYwotLS0gZmlsZXMvZGFlbW9uY3RsLmMJ MTMgSmFuIDIwMDUgMDE6NTU6MTMgLTAwMDAJMS4yCisrKyAvZGV2L251bGwJMSBKYW4gMTk3MCAw MDowMDowMCAtMDAwMApAQCAtMSw1NTcgKzAsMCBAQAotLyoKLSAqIC0qLSBtb2RlOiBGdW5kYW1l bnRhbDsgdGFiLXdpZHRoOiA0OyAtKi0KLSAqIGV4OnRzPTQKLSAqCi0gKiBEYWVtb24gY29udHJv bCBwcm9ncmFtLCB3aXRoIEphdmEgU3RhcnR1cCBvcHRpb25zLgotICoKLSAqCU9yaWdpbmFsIGJ5 IEVybnN0IGRlIEhhYW4gPHpuZXJkQGZyZWVic2Qub3JnPgotICoJd3d3L2pha2FydGEtdG9tY2F0 NC9maWxlcy9kYWVtb25jdGwuYwotICoKLSAqICRGcmVlQlNEOiBwb3J0cy9qYXZhL2pib3NzMy9m aWxlcy9kYWVtb25jdGwuYyx2IDEuMiAyMDA1LzAxLzEzIDAxOjU1OjEzIGhxIEV4cCAkCi0gKi8K LQotI2luY2x1ZGUgPGFzc2VydC5oPgotI2luY2x1ZGUgPGZjbnRsLmg+Ci0jaW5jbHVkZSA8c2ln bmFsLmg+Ci0jaW5jbHVkZSA8c3RkYXJnLmg+Ci0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRl IDxzdGRsaWIuaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpbmNsdWRlIDxzeXNsb2cuaD4KLSNp bmNsdWRlIDx1bmlzdGQuaD4KLSNpbmNsdWRlIDxzeXMvZXJybm8uaD4KLSNpbmNsdWRlIDxzeXMv c3RhdC5oPgotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2luY2x1ZGUgPHN5cy91aW8uaD4KLQot I2RlZmluZQlUUlVFCTEKLSNkZWZpbmUJRkFMU0UJMAotCi0vKiBUaGUgaW50ZXJ2YWwgaW4gc2Vj b25kcyBiZXR3ZWVuIHRoZSBjaGVja3MgdG8gbWFrZSBzdXJlIHRoZSBwcm9jZXNzCi0gICBkaWVk IGFmdGVyIGEga2lsbCAqLwotI2RlZmluZSBTVE9QX1RJTUVfSU5URVJWQUwJCTEKLQotI2RlZmlu ZSBFUlJfSUxMRUdBTF9BUkdVTUVOVAkJCQkxCi0jZGVmaW5lIEVSUl9QSURfRklMRV9OT1RfRk9V TkQJCQkJMgotI2RlZmluZSBFUlJfS0lMTF9GQUlMRUQJCQkJCQk1Ci0jZGVmaW5lIEVSUl9BTFJF QURZX1JVTk5JTkcJCQkJCTYKLSNkZWZpbmUgRVJSX05PVF9SVU5OSU5HCQkJCQkJNwotI2RlZmlu ZSBFUlJfQ0hESVJfVE9fQVBQX0hPTUUJCQkJOAotI2RlZmluZSBFUlJfQUNDRVNTX0pBUl9GSUxF CQkJCQkxNwotI2RlZmluZSBFUlJfU1RET1VUX0xPR0ZJTEVfT1BFTgkJCQk5Ci0jZGVmaW5lIEVS Ul9TVERFUlJfTE9HRklMRV9PUEVOCQkJCTEwCi0jZGVmaW5lIEVSUl9GT1JLX0ZBSUxFRAkJCQkJ CTExCi0jZGVmaW5lIEVSUl9TVEFUX0pBVkFfSE9NRQkJCQkJMTIKLSNkZWZpbmUgRVJSX0pBVkFf SE9NRV9OT1RfRElSCQkJCTEzCi0jZGVmaW5lIEVSUl9TVEFUX0pBVkFfQ01ECQkJCQkxNAotI2Rl ZmluZSBFUlJfSkFWQV9DTURfTk9UX0ZJTEUJCQkJMTUKLSNkZWZpbmUgRVJSX0pBVkFfQ01EX05P VF9FWEVDVVRBQkxFCQkJMTYKLQotLyoKLQlGdW5jdGlvbiBkZWNsYXJhdGlvbnMuCi0gKi8KLXN0 YXRpYyB2b2lkIHByaW50VXNhZ2UgKHZvaWQpOwotc3RhdGljIGludCByZWFkUElEICh2b2lkKTsK LXN0YXRpYyB2b2lkIHdyaXRlUElEIChpbnQgcGlkKTsKLXN0YXRpYyB2b2lkIGNsZWFyUElEICh2 b2lkKTsKLXN0YXRpYyB2b2lkIHN0YXJ0IChpbnQgamF2YU9wdCwgY2hhciAqIGphdmFBcmdzIFtd LCBpbnQgamJvc3NPcHQsIGNoYXIgKiBqYm9zc0FyZ3MgW10pOwotc3RhdGljIHZvaWQgc3RvcCAo dm9pZCk7Ci1zdGF0aWMgdm9pZCByZXN0YXJ0IChpbnQgamF2YU9wdCwgY2hhciAqIGphdmFBcmdz IFtdLCBpbnQgamJvc3NPcHQsIGNoYXIgKiBqYm9zc0FyZ3MgW10pOwotc3RhdGljIHZvaWQgbG9n T3V0cHV0IChjaGFyICopOwotCi0vKgotCUdsb2JhbHMKLSAqLwotc3RhdGljIGludCBpc1F1aWV0 ID0gRkFMU0U7Ci1zdGF0aWMgY2hhciAqIG9wdFF1aWV0ID0gIi1xIiwJCQkvKiBxdWlldCBvcHRp b24gKi8KLQkJCSogb3B0Q29uZmlnID0gIi1jb25maWciOwkvKiBqYm9zcyBjb25maWd1cmF0aW9u IG9wdGlvbiAqLwotCi0vKioKLSAqIE1haW4gZnVuY3Rpb24uIFRoaXMgZnVuY3Rpb24gaXMgY2Fs bGVkIHdoZW4gdGhpcyBwcm9ncmFtIGlzIGV4ZWN1dGVkLgotICoKLSAqIEBwYXJhbSBhcmdjCi0g KiAgICB0aGUgbnVtYmVyIG9mIGFyZ3VtZW50cyBwbHVzIG9uZSwgc28gYWx3YXlzIGdyZWF0ZXIg dGhhbiAwLgotICoKLSAqIEBwYXJhbSBhcmd2Ci0gKiAgICB0aGUgYXJndW1lbnRzIGluIGFuIGFy cmF5IG9mIGNoYXJhY3RlciBwb2ludGVycywgd2hlcmUgdGhlIGxhc3QgYXJndW1lbnQKLSAqICAg IGVsZW1lbnQgaXMgZm9sbG93ZWQgYnkgYSBOVUxMIGVsZW1lbnQuCi0gKi8KLWludAotbWFpbiAo Ci0gaW50IGFyZ2MsCi0gY2hhciAqYXJndiBbXSkKLXsKLQkvKiBEZWNsYXJlIHZhcmlhYmxlcywg bGlrZSBhbGwgb3RoZXIgZ29vZCBBTlNJIEMgcHJvZ3JhbXMgZG8gOikgKi8KLQlpbnQgaSwgamF2 YU9wdCwgamJvc3NPcHQ7Ci0JY2hhciAqYXJndW1lbnQsICoqamF2YUFyZ3MsICoqamJvc3NBcmdz OwotCi0JLyogUGFyc2UgdGhlIGFyZ3VtZW50cyAqLwotCWlmIChhcmdjIDwgMikKLQl7Ci0JCXBy aW50VXNhZ2UgKCk7Ci0JCXJldHVybiAwOwotCX0KLQotCS8qIFhYWDogRml4IGZvciBzZXR0aW5n IHVwIHRoZSBlbnZpcm9ubWVudCBmb3IgdGhlIGphdmEgd3JhcHBlciBzY3JpcHQgKi8KLQlzZXR1 aWQgKGdldGV1aWQgKCkpOwotCXNldGdpZCAoZ2V0ZWdpZCAoKSk7Ci0KLQkvKgotCQlCdWlsZCB1 cCBqYXZhIGFuZCBqYm9zcyBvcHRpb24gYmxvY2tzLgotCSAqLwotCWphdmFPcHQgPSBqYm9zc09w dCA9IDA7Ci0JZm9yIChpID0gMTsgaSA8IGFyZ2M7IGkrKykKLQl7Ci0JCWlmIChzdHJjbXAgKGFy Z3YgW2ldLCBvcHRRdWlldCkgPT0gMCkKLQkJewotCQkJaXNRdWlldCA9IFRSVUU7Ci0KLQkJfSBl bHNlIGlmIChzdHJjbXAgKGFyZ3YgW2ldLCBvcHRDb25maWcpID09IDApCi0JCXsKLQkJCWpib3Nz T3B0ICs9IDI7Ci0JCQlpZiAoKytpID49IGFyZ2MpCi0JCQl7Ci0JCQkJcHJpbnRVc2FnZSAoKTsK LQkJCQlyZXR1cm4gRVJSX0lMTEVHQUxfQVJHVU1FTlQ7Ci0JCQl9Ci0KLQkJfSBlbHNlIGlmICgq YXJndiBbaV0gPT0gJy0nKQotCQl7Ci0JCQlqYXZhT3B0Kys7Ci0JCX0KLQl9Ci0JaWYgKGphdmFP cHQgPT0gMCkKLQkJamF2YUFyZ3MgPSBOVUxMOwotCWVsc2UKLQl7Ci0JCWludCBqID0gMDsKLQkJ amF2YUFyZ3MgPSBtYWxsb2MgKHNpemVvZiAoY2hhciAqKSAqIGphdmFPcHQpOwotCQlmb3IgKGkg PSAwOyBpIDwgYXJnYzsgaSsrKQotCQl7Ci0JCQlpZiAoc3RyY21wIChhcmd2IFtpXSwgb3B0UXVp ZXQpICYmCi0JCQkJc3RyY21wIChhcmd2IFtpXSwgb3B0Q29uZmlnKSAmJgotCQkJCSphcmd2IFtp XSA9PSAnLScpCi0JCQl7Ci0JCQkJamF2YUFyZ3MgW2orK10gPSBhcmd2IFtpXTsKLQkJCX0KLQkJ fQotCX0KLQlpZiAoamJvc3NPcHQgPT0gMCkKLQkJamJvc3NBcmdzID0gTlVMTDsKLQllbHNlCi0J ewotCQlpbnQgaiA9IDA7Ci0JCWpib3NzQXJncyA9IG1hbGxvYyAoc2l6ZW9mIChjaGFyICopICog amJvc3NPcHQpOwotCQlmb3IgKGkgPSAwOyBpIDwgYXJnYzsgaSsrKQotCQl7Ci0JCQlpZiAoc3Ry Y21wIChhcmd2IFtpXSwgb3B0Q29uZmlnKSA9PSAwKQotCQkJewotCQkJCWpib3NzQXJncyBbaisr XSA9ICItYyI7Ci0JCQkJamJvc3NBcmdzIFtqKytdID0gYXJndiBbKytpXTsKLQkJCX0KLQkJfQot CX0KLQotCS8qCi0JCURlY2lkZSBvbiBqdXN0IHdoYXQgdG8gY2FsbC4KLQkgKi8KLQlhcmd1bWVu dCA9IGFyZ3YgW2FyZ2MgLSAxXTsKLQlpZiAoc3RyY21wICgic3RhcnQiLCBhcmd1bWVudCkgPT0g MCkKLQl7Ci0JCXN0YXJ0IChqYXZhT3B0LCBqYXZhQXJncywgamJvc3NPcHQsIGpib3NzQXJncyk7 Ci0KLQl9IGVsc2UgaWYgKHN0cmNtcCAoInN0b3AiLCBhcmd1bWVudCkgPT0gMCkKLQl7Ci0JCXN0 b3AgKCk7Ci0KLQl9IGVsc2UgaWYgKHN0cmNtcCAoInJlc3RhcnQiLCBhcmd1bWVudCkgPT0gMCkK LQl7Ci0JCXJlc3RhcnQgKGphdmFPcHQsIGphdmFBcmdzLCBqYm9zc09wdCwgamJvc3NBcmdzKTsK LQotCX0gZWxzZSB7Ci0JCWZwcmludGYgKHN0ZGVyciwgIiUlQ09OVFJPTF9TQ1JJUFRfTkFNRSUl OiBJbGxlZ2FsIGFyZ3VtZW50IFwiJXNcIi5cbiIsIGFyZ3VtZW50KTsKLQkJcHJpbnRVc2FnZSAo KTsKLQkJZXhpdCAoRVJSX0lMTEVHQUxfQVJHVU1FTlQpOwotCX0KLQotCXJldHVybiBFWElUX1NV Q0NFU1M7Ci19Ci0KLS8qKgotICogUHJpbnRzIHVzYWdlIGluZm9ybWF0aW9uIHRvIHN0ZG91dC4K LSAqLwotc3RhdGljIHZvaWQKLXByaW50VXNhZ2UgKHZvaWQpCi17Ci0JcHJpbnRmICgiVXNhZ2U6 ICUlQ09OVFJPTF9TQ1JJUFRfTkFNRSUlIFtqYXZhLW9wdGlvbnNdIFstY29uZmlnIGpib3NzY29u ZmlnXSB7c3RhcnR8c3RvcHxyZXN0YXJ0fVxuIik7Ci19Ci0KLS8qKgotICogUmVhZHMgYSBQSUQg ZnJvbSB0aGUgUElEIGZpbGUuCi0gKgotICogQHJldHVybgotICogICAgdGhlIFBJRCwgb3IgLTEg aWYgdGhlIGZpbGUgd2FzIGVtcHR5LgotICovCi1zdGF0aWMgaW50Ci1yZWFkUElEICh2b2lkKQot ewotCUZJTEUgKiBmaWxlOwotCWludCBwaWQ7Ci0KLQlsb2dPdXRwdXQgKCI+PiBSZWFkaW5nIFBJ RCBmaWxlICglJVBJRF9GSUxFJSUpLi4uIik7Ci0JZmlsZSA9IGZvcGVuICgiJSVQSURfRklMRSUl IiwgInIiKTsKLQlpZiAoIWZpbGUpCi0JewotCQlsb2dPdXRwdXQgKCIgWyBGQUlMRUQgXVxuIik7 Ci0JCXBlcnJvciAoIiUlQ09OVFJPTF9TQ1JJUFRfTkFNRSUlOiBVbmFibGUgdG8gb3BlbiAlJVBJ RF9GSUxFJSUgZm9yIHJlYWRpbmc6ICIpOwotCQlleGl0IChFUlJfUElEX0ZJTEVfTk9UX0ZPVU5E KTsKLQl9Ci0JaWYgKGZzY2FuZiAoZmlsZSwgIiVkIiwgJnBpZCkgPCAxKQotCQlwaWQgPSAtMTsK LQlmY2xvc2UgKGZpbGUpOwotCi0JbG9nT3V0cHV0ICgiIFsgRE9ORSBdXG4iKTsKLQlyZXR1cm4g cGlkOwotfQotCi0vKioKLSAqIFdyaXRlcyBhIHByb2Nlc3MgSUQgdG8gdGhlIHNwZWNpZmllZCBm aWxlLiBUaGUgZmlsZSBpcyBpZGVudGlmaWVkIGJ5IGEgZmlsZQotICogaGFuZGxlLgotICoKLSAq IEBwYXJhbSBwaWQKLSAqICAgIHRoZSBQSUQgdG8gc3RvcmUsIGFsd2F5cyBncmVhdGVyIHRoYW4g MC4KLSAqLwotc3RhdGljIHZvaWQKLXdyaXRlUElEICgKLSBpbnQgcGlkKQotewotCUZJTEUgKiBm aWxlOwotCi0JbG9nT3V0cHV0ICgiPj4gV3JpdGluZyBQSUQgZmlsZS4uLiIpOwotCWZpbGUgPSBm b3BlbiAoIiUlUElEX0ZJTEUlJSIsICJ3Iik7Ci0JaWYgKCFmaWxlKQotCXsKLQkJbG9nT3V0cHV0 ICgiIFsgRkFJTEVEIF1cbiIpOwotCQlwZXJyb3IgKCIlJUNPTlRST0xfU0NSSVBUX05BTUUlJTog VW5hYmxlIHRvIG9wZW4gJSVQSURfRklMRSUlIGZvciB3cml0aW5nOiAiKTsKLQkJZXhpdCAoRVJS X1BJRF9GSUxFX05PVF9GT1VORCk7Ci0JfQotCWZwcmludGYgKGZpbGUsICIlZFxuIiwgcGlkKTsK LQlmY2xvc2UgKGZpbGUpOwotCi0JbG9nT3V0cHV0ICgiIFsgRE9ORSBdXG4iKTsKLX0KLQotLyoq Ci0JVHJ1bmNhdGUgdGhlIFBJRCBmaWxlLgotICovCi1zdGF0aWMgdm9pZAotY2xlYXJQSUQgKHZv aWQpCi17Ci0JaWYgKHRydW5jYXRlICgiJSVQSURfRklMRSUlIiwgMCkgIT0gMCkKLQl7Ci0JCXBl cnJvciAoIiUlQ09OVFJPTF9TQ1JJUFRfTkFNRSUlOiBVbmFibGUgdG8gY2xlYXIgJSVQSURfRklM RSUlOiAiKTsKLQkJZXhpdCAoRVJSX1BJRF9GSUxFX05PVF9GT1VORCk7Ci0JfQotfQotCi0vKioK LSAqIENoZWNrcyBpZiB0aGUgc3BlY2lmaWVkIHByb2Nlc3MgaXMgcnVubmluZy4KLSAqCi0gKiBA cGFyYW0gcGlkCi0gKiAgICB0aGUgcHJvY2VzcyBpZCwgZ3JlYXRlciB0aGFuIDAuCi0gKgotICog QHJldHVybgotICogICAgMCBpZiB0aGUgc3BlY2lmaWVkIHByb2Nlc3MgaXMgbm90IHJ1bm5pbmcs IGEgZGlmZmVyZW50IHZhbHVlIG90aGVyd2lzZS4KLSAqLwotc3RhdGljIGludAotZXhpc3RzUHJv Y2VzcyAoCi0gaW50IHBpZCkKLXsKLQlpbnQgcmVzdWx0OwotCi0JLyogQ2hlY2sgcHJlY29uZGl0 aW9ucyAqLwotCWFzc2VydCAocGlkID4gMCk7Ci0KLQkvKiBTZWUgaWYgdGhlIHByb2Nlc3MgZXhp c3RzICovCi0gICAJcmVzdWx0ID0ga2lsbCAocGlkLCAwKTsKLQotCS8qIElmIHRoZSByZXN1bHQg aXMgMCwgdGhlbiB0aGUgcHJvY2VzcyBleGlzdHMgKi8KLQlyZXR1cm4gcmVzdWx0ID09IDA7Ci19 Ci0KLS8qKgotICogS2lsbHMgdGhlIHByb2Nlc3MgaWRlbnRpZmllZCBieSB0aGUgc3BlY2lmaWVk IElELgotICoKLSAqIEBwYXJhbSBwaWQKLSAqICAgIHRoZSBwcm9jZXNzIGlkLCBncmVhdGVyIHRo YW4gMC4KLSAqLwotc3RhdGljIHZvaWQKLWtpbGxQcm9jZXNzICgKLSBpbnQgcGlkKQotewotCWlu dCByZXN1bHQ7Ci0JdW5zaWduZWQgaW50IHdhaXRlZDsKLQl1bnNpZ25lZCBpbnQgZm9yY2VkOwot CXVuc2lnbmVkIGludCBpbnRlcnZhbCA9IFNUT1BfVElNRV9JTlRFUlZBTDsKLQl1bnNpZ25lZCBp bnQgdGltZW91dCAgPSAlJVNUT1BfVElNRU9VVCUlOwotCi0JLyogQ2hlY2sgcHJlY29uZGl0aW9u cyAqLwotCWFzc2VydCAocGlkID4gMCk7Ci0KLQlpZiAoIWlzUXVpZXQpCi0JCXByaW50ZiAoIj4+ IFRlcm1pbmF0aW5nIHByb2Nlc3MgJWQuLi4iLCBwaWQpOwotCXJlc3VsdCA9IGtpbGwgKHBpZCwg U0lHVEVSTSk7Ci0JaWYgKHJlc3VsdCA8IDApIHsKLQkJbG9nT3V0cHV0ICgiIFsgRkFJTEVEIF1c biIpOwotCQlmcHJpbnRmIChzdGRlcnIsICIlJUNPTlRST0xfU0NSSVBUX05BTUUlJTogVW5hYmxl IHRvIGtpbGwgcHJvY2VzcyAlZDogIiwgcGlkKTsKLQkJcGVycm9yIChOVUxMKTsKLQkJZXhpdCAo RVJSX0tJTExfRkFJTEVEKTsKLQl9Ci0KLQkvKiBXYWl0IHVudGlsIHRoZSBwcm9jZXNzIGlzIGFj dHVhbGx5IGtpbGxlZCAqLwotICAgIHJlc3VsdCA9IGV4aXN0c1Byb2Nlc3MgKHBpZCk7Ci0JZm9y ICh3YWl0ZWQ9MDsgcmVzdWx0ID09IDEgJiYgd2FpdGVkIDwgdGltZW91dDsgd2FpdGVkICs9IGlu dGVydmFsKQotCXsKLQkJbG9nT3V0cHV0ICgiLiIpOwotCQlmZmx1c2ggKHN0ZG91dCk7Ci0JCXNs ZWVwIChpbnRlcnZhbCk7Ci0gICAgCXJlc3VsdCA9IGV4aXN0c1Byb2Nlc3MgKHBpZCk7Ci0JfQot Ci0JLyogSWYgdGhlIHByb2Nlc3Mgc3RpbGwgZXhpc3RzLCB0aGVuIGhhdmUgbm8gbWVyY3kgYW5k IGtpbGwgaXQgKi8KLQlmb3JjZWQgPSAwOwotCWlmIChyZXN1bHQgPT0gMSkKLQl7Ci0JCS8qIEZv cmNlIHRoZSBwcm9jZXNzIHRvIGRpZSAqLwotCQlyZXN1bHQgPSBraWxsIChwaWQsIFNJR0tJTEwp OwotCQlpZiAocmVzdWx0ID09IDApIHsKLQkJCWZvcmNlZCA9IDE7Ci0JCQlsb2dPdXRwdXQgKCIg WyBLSUxMRUQgXVxuIik7Ci0JCQlmcHJpbnRmIChzdGRlcnIsICIlJUNPTlRST0xfU0NSSVBUX05B TUUlJTogUHJvY2VzcyAlZCBkaWQgbm90IHRlcm1pbmF0ZSB3aXRoaW4gJSVTVE9QX1RJTUVPVVQl JSBzZWMuIEtpbGxlZC5cbiIsIHBpZCk7Ci0JCX0gZWxzZSBpZiAocmVzdWx0ICE9IEVTUkNIKSB7 Ci0JCQlsb2dPdXRwdXQgKCIgWyBGQUlMRUQgXVxuIik7Ci0JCQlmcHJpbnRmIChzdGRlcnIsICIl JUNPTlRST0xfU0NSSVBUX05BTUUlJTogVW5hYmxlIHRvIGtpbGwgcHJvY2VzcyAlZDogIiwgcGlk KTsKLQkJCXBlcnJvciAoTlVMTCk7Ci0JCQlleGl0IChFUlJfS0lMTF9GQUlMRUQpOwotCQl9Ci0J fQotCi0JaWYgKGZvcmNlZCA9PSAwKSB7Ci0JCWxvZ091dHB1dCAoIiBbIERPTkUgXVxuIik7Ci0J fQotfQotCi0vKioKLSAqIFN0YXJ0cyB0aGUgZGFlbW9uLgotICovCi1zdGF0aWMgdm9pZAotc3Rh cnQgKAotIGludCBqYXZhT3B0LAotIGNoYXIgKiBqYXZhQXJncyBbXSwKLSBpbnQgamJvc3NPcHQs Ci0gY2hhciAqIGpib3NzQXJncyBbXSkKLXsKLQlpbnQgaSwgYXJnYzsKLQljaGFyICoqIGFyZ3Y7 Ci0JaW50IHBpZDsKLQlpbnQgcmVzdWx0OwotCWludCBzdGRvdXRMb2dGaWxlOwotCWludCBzdGRl cnJMb2dGaWxlOwotCXN0cnVjdCBzdGF0IHNiOwotCi0JcGlkID0gcmVhZFBJRCAoKTsKLQotCWxv Z091dHB1dCAoIj4+IFN0YXJ0aW5nICUlQVBQX1RJVExFJSUgJSVQT1JUVkVSU0lPTiUlLi4uIik7 Ci0JaWYgKHBpZCAhPSAtMSkKLQl7Ci0JCS8qIENoZWNrIGlmIHRoZSBwcm9jZXNzIGFjdHVhbGx5 IGV4aXN0cyAqLwotCQlyZXN1bHQgPSBleGlzdHNQcm9jZXNzIChwaWQpOwotCQlpZiAocmVzdWx0 ID09IDEpCi0JCXsKLQkJCWxvZ091dHB1dCAoIiBbIEZBSUxFRCBdXG4iKTsKLQkJCWZwcmludGYg KHN0ZGVyciwgIiUlQ09OVFJPTF9TQ1JJUFRfTkFNRSUlOiAlJUFQUF9USVRMRSUlICUlUE9SVFZF UlNJT04lJSBpcyBhbHJlYWR5IHJ1bm5pbmcsIFBJRCBpcyAlZC5cbiIsIHBpZCk7Ci0JCQlleGl0 IChFUlJfQUxSRUFEWV9SVU5OSU5HKTsKLQkJfQotCX0KLQotCS8qIENoZWNrIGlmIHRoZSBKREsg aG9tZSBkaXJlY3RvcnkgaXMgYWN0dWFsbHkgYSBkaXJlY3RvcnkgKi8KLQlyZXN1bHQgPSBzdGF0 ICgiJSVKQVZBX0hPTUUlJSIsICZzYik7Ci0JaWYgKHJlc3VsdCAhPSAwKSB7Ci0JCWxvZ091dHB1 dCAoIiBbIEZBSUxFRCBdXG4iKTsKLQkJZnByaW50ZiAoc3RkZXJyLCAiJSVDT05UUk9MX1NDUklQ VF9OQU1FJSU6IFVuYWJsZSB0byBzdGF0ICUlSkFWQV9IT01FJSU6ICIpOwotCQlwZXJyb3IgKE5V TEwpOwotCQlleGl0IChFUlJfU1RBVF9KQVZBX0hPTUUpOwotCX0KLQlpZiAoIVNfSVNESVIgKHNi LnN0X21vZGUpKSB7Ci0JCWxvZ091dHB1dCAoIiBbIEZBSUxFRCBdXG4iKTsKLQkJZnByaW50ZiAo c3RkZXJyLCAiJSVDT05UUk9MX1NDUklQVF9OQU1FJSU6IEphdmEgaG9tZSBkaXJlY3RvcnkgJSVK QVZBX0hPTUUlJSBpcyBub3QgYSBkaXJlY3RvcnkuXG4iKTsKLQkJZXhpdCAoRVJSX0pBVkFfSE9N RV9OT1RfRElSKTsKLQl9Ci0KLQkvKiBDaGVjayBpZiB0aGUgSmF2YSBjb21tYW5kIGlzIGFjdHVh bGx5IGFuIGV4ZWN1dGFibGUgcmVndWxhciBmaWxlICovCi0JcmVzdWx0ID0gc3RhdCAoIiUlSkFW QSUlIiwgJnNiKTsKLQlpZiAocmVzdWx0ICE9IDApIHsKLQkJbG9nT3V0cHV0ICgiIFsgRkFJTEVE IF1cbiIpOwotCQlmcHJpbnRmIChzdGRlcnIsICIlJUNPTlRST0xfU0NSSVBUX05BTUUlJTogVW5h YmxlIHRvIHN0YXQgJSVKQVZBJSU6ICIpOwotCQlwZXJyb3IgKE5VTEwpOwotCQlleGl0IChFUlJf U1RBVF9KQVZBX0NNRCk7Ci0JfQotCWlmICghU19JU1JFRyAoc2Iuc3RfbW9kZSkpIHsKLQkJbG9n T3V0cHV0ICgiIFsgRkFJTEVEIF1cbiIpOwotCQlmcHJpbnRmIChzdGRlcnIsICIlJUNPTlRST0xf U0NSSVBUX05BTUUlJTogSmF2YSBjb21tYW5kICUlSkFWQSUlIGlzIG5vdCBhIHJlZ3VsYXIgZmls ZS5cbiIpOwotCQlleGl0IChFUlJfSkFWQV9DTURfTk9UX0ZJTEUpOwotCX0KLQlyZXN1bHQgPSBh Y2Nlc3MgKCIlJUpBVkElJSIsIFhfT0spOwotCWlmIChyZXN1bHQgIT0gMCkgewotCQlsb2dPdXRw dXQgKCIgWyBGQUlMRUQgXVxuIik7Ci0JCWZwcmludGYgKHN0ZGVyciwgIiUlQ09OVFJPTF9TQ1JJ UFRfTkFNRSUlOiBKYXZhIGNvbW1hbmQgJSVKQVZBJSUgaXMgbm90IGV4ZWN1dGFibGU6ICIpOwot CQlwZXJyb3IgKE5VTEwpOwotCQlleGl0IChFUlJfSkFWQV9DTURfTk9UX0VYRUNVVEFCTEUpOwot CX0KLQotCS8qIENoYW5nZSBkaXJlY3RvcnkgKi8KLQlyZXN1bHQgPSBjaGRpciAoIiUlQVBQX0hP TUUlJSIpOwotCWlmIChyZXN1bHQgPCAwKSB7Ci0JCWxvZ091dHB1dCAoIiBbIEZBSUxFRCBdXG4i KTsKLQkJZnByaW50ZiAoc3RkZXJyLCAiJSVDT05UUk9MX1NDUklQVF9OQU1FJSU6IFVuYWJsZSB0 byBhY2Nlc3MgZGlyZWN0b3J5ICUlQVBQX0hPTUUlJTogIik7Ci0JCXBlcnJvciAoTlVMTCk7Ci0J CWV4aXQgKEVSUl9DSERJUl9UT19BUFBfSE9NRSk7Ci0JfQotCi0JLyogU2VlIGlmIHRoZSBKQVIg ZmlsZSBleGlzdHMgKi8KLQlyZXN1bHQgPSBhY2Nlc3MgKCIlJUFQUF9IT01FJSUvJSVKQVJfRklM RSUlIiwgUl9PSyk7Ci0JaWYgKHJlc3VsdCA8IDApIHsKLQkJbG9nT3V0cHV0ICgiIFsgRkFJTEVE IF1cbiIpOwotCQlmcHJpbnRmIChzdGRlcnIsICIlJUNPTlRST0xfU0NSSVBUX05BTUUlJTogVW5h YmxlIHRvIGFjY2VzcyBKQVIgZmlsZSAlJUFQUF9IT01FJSUvJSVKQVJfRklMRSUlOiAiKTsKLQkJ cGVycm9yIChOVUxMKTsKLQkJZXhpdCAoRVJSX0FDQ0VTU19KQVJfRklMRSk7Ci0JfQotCi0JLyog T3BlbiB0aGUgc3Rkb3V0IGxvZyBmaWxlICovCi0Jc3Rkb3V0TG9nRmlsZSA9IG9wZW4gKCIlJVNU RE9VVF9MT0clJSIsIE9fV1JPTkxZKTsKLQlpZiAoc3Rkb3V0TG9nRmlsZSA8IDApIHsKLQkJbG9n T3V0cHV0ICgiIFsgRkFJTEVEIF1cbiIpOwotCQlmcHJpbnRmIChzdGRlcnIsICIlJUNPTlRST0xf U0NSSVBUX05BTUUlJTogVW5hYmxlIHRvIG9wZW4gJSVTVERPVVRfTE9HJSUgZm9yIHdyaXRpbmc6 ICIpOwotCQlwZXJyb3IgKE5VTEwpOwotCQlleGl0IChFUlJfU1RET1VUX0xPR0ZJTEVfT1BFTik7 Ci0JfQotCWxzZWVrIChzdGRvdXRMb2dGaWxlLCAob2ZmX3QpIDAsIFNFRUtfRU5EKTsKLQotCS8q IE9wZW4gdGhlIHN0ZGVyciBsb2cgZmlsZSAqLwotCXN0ZGVyckxvZ0ZpbGUgPSBvcGVuICgiJSVT VERFUlJfTE9HJSUiLCBPX1dST05MWSk7Ci0JaWYgKHN0ZGVyckxvZ0ZpbGUgPCAwKSB7Ci0JCWxv Z091dHB1dCAoIiBbIEZBSUxFRCBdXG4iKTsKLQkJZnByaW50ZiAoc3RkZXJyLCAiJSVDT05UUk9M X1NDUklQVF9OQU1FJSU6IFVuYWJsZSB0byBvcGVuICUlU1RERVJSX0xPRyUlIGZvciB3cml0aW5n OiAiKTsKLQkJcGVycm9yIChOVUxMKTsKLQkJZXhpdCAoRVJSX1NUREVSUl9MT0dGSUxFX09QRU4p OwotCX0KLQlsc2VlayAoc3RkZXJyTG9nRmlsZSwgKG9mZl90KSAwLCBTRUVLX0VORCk7Ci0KLQkv KiBTcGxpdCB0aGlzIHByb2Nlc3MgaW4gdHdvICovCi0Jc3dpdGNoIChwaWQgPSBmb3JrICgpKQot CXsKLQljYXNlIC0xOgotCQlsb2dPdXRwdXQgKCIgWyBGQUlMRUQgXVxuIik7Ci0JCWZwcmludGYg KHN0ZGVyciwgIiUlQ09OVFJPTF9TQ1JJUFRfTkFNRSUlOiBVbmFibGUgdG8gZm9yazogIik7Ci0J CXBlcnJvciAoTlVMTCk7Ci0JCWV4aXQgKEVSUl9GT1JLX0ZBSUxFRCk7Ci0JCWJyZWFrOwotCi0J Y2FzZSAwOgotCQkvKiBSZWRpcmVjdCBzdGRvdXQgdG8gbG9nIGZpbGUgKi8KLQkJZHVwMiAoc3Rk b3V0TG9nRmlsZSwgU1RET1VUX0ZJTEVOTyk7Ci0KLQkJLyogUmVkaXJlY3Qgc3RkZXJyIHRvIGxv ZyBmaWxlICovCi0JCWR1cDIgKHN0ZGVyckxvZ0ZpbGUsIFNUREVSUl9GSUxFTk8pOwotCi0JCS8q IFRPRE86IFN1cHBvcnQgcmVkaXJlY3Rpb24gb2YgYm90aCBzdGRvdXQgYW5kIHN0ZGVyciB0byB0 aGUgc2FtZQotCQkJCSBmaWxlIHVzaW5nIHBpcGUgKDIpICovCi0KLQkJLyoKLQkJCUJ1aWxkIHRo ZSBhcmd1bWVudCB2ZWN0b3IsIHdpdGggdGhlIGphdmEvamJvc3Mgb3B0aW9ucyBpZiBhbnkuCi0J CSAqLwotCQlhcmd2ID0gbWFsbG9jIChzaXplb2YgKGNoYXIgKikgKiAoamF2YU9wdCArIGpib3Nz T3B0ICsgNSkpOwotCQlhcmdjID0gMDsKLQkJYXJndiBbYXJnYysrXSA9ICIlJUpBVkElJSI7Ci0J CWZvciAoaSA9IDA7IGkgPCBqYXZhT3B0OyBpKyspCi0JCQlhcmd2IFthcmdjKytdID0gamF2YUFy Z3MgW2ldOwotCQlhcmd2IFthcmdjKytdID0gIi1jcCI7Ci0JCWFyZ3YgW2FyZ2MrK10gPSAiJSVK QVZBX0NQJSUiOwotCQlhcmd2IFthcmdjKytdID0gIiUlSkFWQV9NQUlOJSUiOwotCQlmb3IgKGkg PSAwOyBpIDwgamJvc3NPcHQ7IGkrKykKLQkJCWFyZ3YgW2FyZ2MrK10gPSBqYm9zc0FyZ3MgW2ld OwotCQlhcmd2IFthcmdjKytdID0gTlVMTDsKLQotCQkvKiBFeGVjdXRlIHRoZSBjb21tYW5kICov Ci0JCWV4ZWN2IChhcmd2IFswXSwgYXJndik7Ci0JCXBlcnJvciAoTlVMTCk7Ci0JCWJyZWFrOwot Ci0JZGVmYXVsdDoKLQkJbG9nT3V0cHV0ICgiIFsgRE9ORSBdXG4iKTsKLQkJd3JpdGVQSUQgKHBp ZCk7Ci0JfQotfQotCi0vKioKLSAqIFN0b3BzIHRoZSBkYWVtb24uCi0gKi8KLXN0YXRpYyB2b2lk Ci1zdG9wICh2b2lkKQotewotCWludCBwaWQ7Ci0KLQlwaWQgPSByZWFkUElEICgpOwotCi0JbG9n T3V0cHV0ICgiPj4gQ2hlY2tpbmcgaWYgJSVBUFBfVElUTEUlJSAlJVBPUlRWRVJTSU9OJSUgaXMg cnVubmluZy4uLiIpOwotCi0JLyogSWYgdGhlcmUgaXMgYSBQSUQsIHNlZSBpZiB0aGUgcHJvY2Vz cyBzdGlsbCBleGlzdHMgKi8KLQlpZiAocGlkICE9IC0xKQotCXsKLQkJaW50IHJlc3VsdCA9IGtp bGwgKHBpZCwgMCk7Ci0JCWlmIChyZXN1bHQgIT0gMCAmJiBlcnJubyA9PSBFU1JDSCkKLQkJewot CQkJY2xlYXJQSUQgKCk7Ci0JCQlwaWQgPSAtMTsKLQkJfQotCX0KLQotCS8qIElmIHRoZXJlIGlz IG5vIHJ1bm5pbmcgcHJvY2VzcywgcHJvZHVjZSBhbiBlcnJvciAqLwotCWlmIChwaWQgPT0gLTEp Ci0JewotCQlsb2dPdXRwdXQgKCIgWyBGQUlMRUQgXVxuIik7Ci0JCWZwcmludGYgKHN0ZGVyciwg IiUlQ09OVFJPTF9TQ1JJUFRfTkFNRSUlOiAlJUFQUF9USVRMRSUlICUlUE9SVFZFUlNJT04lJSBp cyBjdXJyZW50bHkgbm90IHJ1bm5pbmcuXG4iKTsKLQkJZXhpdCAoRVJSX05PVF9SVU5OSU5HKTsK LQl9Ci0JbG9nT3V0cHV0ICgiIFsgRE9ORSBdXG4iKTsKLQotCS8qIFRlcm1pbmF0ZSB0aGUgcHJv Y2VzcyAqLwotCWtpbGxQcm9jZXNzIChwaWQpOwotCWNsZWFyUElEICgpOwotfQotCi0KLS8qKgot ICogUmVzdGFydHMgdGhlIHByb2Nlc3MuIElmIGl0IG5vdCBjdXJyZW50bHkgcnVubmluZywgdGhl biBpdCB3aWxsIGZhaWwuCi0gKi8KLXN0YXRpYyB2b2lkCi1yZXN0YXJ0ICgKLSBpbnQgamF2YU9w dCwKLSBjaGFyICogamF2YUFyZ3MgW10sCi0gaW50IGpib3NzT3B0LAotIGNoYXIgKiBqYm9zc0Fy Z3MgW10pCi17Ci0Jc3RvcCAoKTsKLQlzdGFydCAoamF2YU9wdCwgamF2YUFyZ3MsIGpib3NzT3B0 LCBqYm9zc0FyZ3MpOwotfQotCi0vKioKLQlPdXRwdXQgbG9nIHRvIHN0ZG91dC4KLSAqLwotc3Rh dGljIHZvaWQKLWxvZ091dHB1dCAoCi0gY2hhciAqIHN0cmluZykKLXsKLQlpZiAoIWlzUXVpZXQp Ci0JCXByaW50ZiAoc3RyaW5nKTsKLX0KSW5kZXg6IGZpbGVzL2RhZW1vbmN0bC5jLmluCj09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT0KUkNTIGZpbGU6IGZpbGVzL2RhZW1vbmN0bC5jLmluCmRpZmYgLU4gZmlsZXMvZGFlbW9u Y3RsLmMuaW4KLS0tIC9kZXYvbnVsbAkxIEphbiAxOTcwIDAwOjAwOjAwIC0wMDAwCisrKyBmaWxl cy9kYWVtb25jdGwuYy5pbgkxMyBKYW4gMjAwNSAwMTo1NToxMyAtMDAwMApAQCAtMCwwICsxLDU1 NyBAQAorLyoKKyAqIC0qLSBtb2RlOiBGdW5kYW1lbnRhbDsgdGFiLXdpZHRoOiA0OyAtKi0KKyAq IGV4OnRzPTQKKyAqCisgKiBEYWVtb24gY29udHJvbCBwcm9ncmFtLCB3aXRoIEphdmEgU3RhcnR1 cCBvcHRpb25zLgorICoKKyAqCU9yaWdpbmFsIGJ5IEVybnN0IGRlIEhhYW4gPHpuZXJkQGZyZWVi c2Qub3JnPgorICoJd3d3L2pha2FydGEtdG9tY2F0NC9maWxlcy9kYWVtb25jdGwuYworICoKKyAq ICRGcmVlQlNEOiBwb3J0cy9qYXZhL2pib3NzMy9maWxlcy9kYWVtb25jdGwuYyx2IDEuMiAyMDA1 LzAxLzEzIDAxOjU1OjEzIGhxIEV4cCAkCisgKi8KKworI2luY2x1ZGUgPGFzc2VydC5oPgorI2lu Y2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8c2lnbmFsLmg+CisjaW5jbHVkZSA8c3RkYXJnLmg+ CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJp bmcuaD4KKyNpbmNsdWRlIDxzeXNsb2cuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRl IDxzeXMvZXJybm8uaD4KKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorI2luY2x1ZGUgPHN5cy90eXBl cy5oPgorI2luY2x1ZGUgPHN5cy91aW8uaD4KKworI2RlZmluZQlUUlVFCTEKKyNkZWZpbmUJRkFM U0UJMAorCisvKiBUaGUgaW50ZXJ2YWwgaW4gc2Vjb25kcyBiZXR3ZWVuIHRoZSBjaGVja3MgdG8g bWFrZSBzdXJlIHRoZSBwcm9jZXNzCisgICBkaWVkIGFmdGVyIGEga2lsbCAqLworI2RlZmluZSBT VE9QX1RJTUVfSU5URVJWQUwJCTEKKworI2RlZmluZSBFUlJfSUxMRUdBTF9BUkdVTUVOVAkJCQkx CisjZGVmaW5lIEVSUl9QSURfRklMRV9OT1RfRk9VTkQJCQkJMgorI2RlZmluZSBFUlJfS0lMTF9G QUlMRUQJCQkJCQk1CisjZGVmaW5lIEVSUl9BTFJFQURZX1JVTk5JTkcJCQkJCTYKKyNkZWZpbmUg RVJSX05PVF9SVU5OSU5HCQkJCQkJNworI2RlZmluZSBFUlJfQ0hESVJfVE9fQVBQX0hPTUUJCQkJ OAorI2RlZmluZSBFUlJfQUNDRVNTX0pBUl9GSUxFCQkJCQkxNworI2RlZmluZSBFUlJfU1RET1VU X0xPR0ZJTEVfT1BFTgkJCQk5CisjZGVmaW5lIEVSUl9TVERFUlJfTE9HRklMRV9PUEVOCQkJCTEw CisjZGVmaW5lIEVSUl9GT1JLX0ZBSUxFRAkJCQkJCTExCisjZGVmaW5lIEVSUl9TVEFUX0pBVkFf SE9NRQkJCQkJMTIKKyNkZWZpbmUgRVJSX0pBVkFfSE9NRV9OT1RfRElSCQkJCTEzCisjZGVmaW5l IEVSUl9TVEFUX0pBVkFfQ01ECQkJCQkxNAorI2RlZmluZSBFUlJfSkFWQV9DTURfTk9UX0ZJTEUJ CQkJMTUKKyNkZWZpbmUgRVJSX0pBVkFfQ01EX05PVF9FWEVDVVRBQkxFCQkJMTYKKworLyoKKwlG dW5jdGlvbiBkZWNsYXJhdGlvbnMuCisgKi8KK3N0YXRpYyB2b2lkIHByaW50VXNhZ2UgKHZvaWQp Oworc3RhdGljIGludCByZWFkUElEICh2b2lkKTsKK3N0YXRpYyB2b2lkIHdyaXRlUElEIChpbnQg cGlkKTsKK3N0YXRpYyB2b2lkIGNsZWFyUElEICh2b2lkKTsKK3N0YXRpYyB2b2lkIHN0YXJ0IChp bnQgamF2YU9wdCwgY2hhciAqIGphdmFBcmdzIFtdLCBpbnQgamJvc3NPcHQsIGNoYXIgKiBqYm9z c0FyZ3MgW10pOworc3RhdGljIHZvaWQgc3RvcCAodm9pZCk7CitzdGF0aWMgdm9pZCByZXN0YXJ0 IChpbnQgamF2YU9wdCwgY2hhciAqIGphdmFBcmdzIFtdLCBpbnQgamJvc3NPcHQsIGNoYXIgKiBq Ym9zc0FyZ3MgW10pOworc3RhdGljIHZvaWQgbG9nT3V0cHV0IChjaGFyICopOworCisvKgorCUds b2JhbHMKKyAqLworc3RhdGljIGludCBpc1F1aWV0ID0gRkFMU0U7CitzdGF0aWMgY2hhciAqIG9w dFF1aWV0ID0gIi1xIiwJCQkvKiBxdWlldCBvcHRpb24gKi8KKwkJCSogb3B0Q29uZmlnID0gIi1j b25maWciOwkvKiBqYm9zcyBjb25maWd1cmF0aW9uIG9wdGlvbiAqLworCisvKioKKyAqIE1haW4g ZnVuY3Rpb24uIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW4gdGhpcyBwcm9ncmFtIGlzIGV4 ZWN1dGVkLgorICoKKyAqIEBwYXJhbSBhcmdjCisgKiAgICB0aGUgbnVtYmVyIG9mIGFyZ3VtZW50 cyBwbHVzIG9uZSwgc28gYWx3YXlzIGdyZWF0ZXIgdGhhbiAwLgorICoKKyAqIEBwYXJhbSBhcmd2 CisgKiAgICB0aGUgYXJndW1lbnRzIGluIGFuIGFycmF5IG9mIGNoYXJhY3RlciBwb2ludGVycywg d2hlcmUgdGhlIGxhc3QgYXJndW1lbnQKKyAqICAgIGVsZW1lbnQgaXMgZm9sbG93ZWQgYnkgYSBO VUxMIGVsZW1lbnQuCisgKi8KK2ludAorbWFpbiAoCisgaW50IGFyZ2MsCisgY2hhciAqYXJndiBb XSkKK3sKKwkvKiBEZWNsYXJlIHZhcmlhYmxlcywgbGlrZSBhbGwgb3RoZXIgZ29vZCBBTlNJIEMg cHJvZ3JhbXMgZG8gOikgKi8KKwlpbnQgaSwgamF2YU9wdCwgamJvc3NPcHQ7CisJY2hhciAqYXJn dW1lbnQsICoqamF2YUFyZ3MsICoqamJvc3NBcmdzOworCisJLyogUGFyc2UgdGhlIGFyZ3VtZW50 cyAqLworCWlmIChhcmdjIDwgMikKKwl7CisJCXByaW50VXNhZ2UgKCk7CisJCXJldHVybiAwOwor CX0KKworCS8qIFhYWDogRml4IGZvciBzZXR0aW5nIHVwIHRoZSBlbnZpcm9ubWVudCBmb3IgdGhl IGphdmEgd3JhcHBlciBzY3JpcHQgKi8KKwlzZXR1aWQgKGdldGV1aWQgKCkpOworCXNldGdpZCAo Z2V0ZWdpZCAoKSk7CisKKwkvKgorCQlCdWlsZCB1cCBqYXZhIGFuZCBqYm9zcyBvcHRpb24gYmxv Y2tzLgorCSAqLworCWphdmFPcHQgPSBqYm9zc09wdCA9IDA7CisJZm9yIChpID0gMTsgaSA8IGFy Z2M7IGkrKykKKwl7CisJCWlmIChzdHJjbXAgKGFyZ3YgW2ldLCBvcHRRdWlldCkgPT0gMCkKKwkJ eworCQkJaXNRdWlldCA9IFRSVUU7CisKKwkJfSBlbHNlIGlmIChzdHJjbXAgKGFyZ3YgW2ldLCBv cHRDb25maWcpID09IDApCisJCXsKKwkJCWpib3NzT3B0ICs9IDI7CisJCQlpZiAoKytpID49IGFy Z2MpCisJCQl7CisJCQkJcHJpbnRVc2FnZSAoKTsKKwkJCQlyZXR1cm4gRVJSX0lMTEVHQUxfQVJH VU1FTlQ7CisJCQl9CisKKwkJfSBlbHNlIGlmICgqYXJndiBbaV0gPT0gJy0nKQorCQl7CisJCQlq YXZhT3B0Kys7CisJCX0KKwl9CisJaWYgKGphdmFPcHQgPT0gMCkKKwkJamF2YUFyZ3MgPSBOVUxM OworCWVsc2UKKwl7CisJCWludCBqID0gMDsKKwkJamF2YUFyZ3MgPSBtYWxsb2MgKHNpemVvZiAo Y2hhciAqKSAqIGphdmFPcHQpOworCQlmb3IgKGkgPSAwOyBpIDwgYXJnYzsgaSsrKQorCQl7CisJ CQlpZiAoc3RyY21wIChhcmd2IFtpXSwgb3B0UXVpZXQpICYmCisJCQkJc3RyY21wIChhcmd2IFtp XSwgb3B0Q29uZmlnKSAmJgorCQkJCSphcmd2IFtpXSA9PSAnLScpCisJCQl7CisJCQkJamF2YUFy Z3MgW2orK10gPSBhcmd2IFtpXTsKKwkJCX0KKwkJfQorCX0KKwlpZiAoamJvc3NPcHQgPT0gMCkK KwkJamJvc3NBcmdzID0gTlVMTDsKKwllbHNlCisJeworCQlpbnQgaiA9IDA7CisJCWpib3NzQXJn cyA9IG1hbGxvYyAoc2l6ZW9mIChjaGFyICopICogamJvc3NPcHQpOworCQlmb3IgKGkgPSAwOyBp IDwgYXJnYzsgaSsrKQorCQl7CisJCQlpZiAoc3RyY21wIChhcmd2IFtpXSwgb3B0Q29uZmlnKSA9 PSAwKQorCQkJeworCQkJCWpib3NzQXJncyBbaisrXSA9ICItYyI7CisJCQkJamJvc3NBcmdzIFtq KytdID0gYXJndiBbKytpXTsKKwkJCX0KKwkJfQorCX0KKworCS8qCisJCURlY2lkZSBvbiBqdXN0 IHdoYXQgdG8gY2FsbC4KKwkgKi8KKwlhcmd1bWVudCA9IGFyZ3YgW2FyZ2MgLSAxXTsKKwlpZiAo c3RyY21wICgic3RhcnQiLCBhcmd1bWVudCkgPT0gMCkKKwl7CisJCXN0YXJ0IChqYXZhT3B0LCBq YXZhQXJncywgamJvc3NPcHQsIGpib3NzQXJncyk7CisKKwl9IGVsc2UgaWYgKHN0cmNtcCAoInN0 b3AiLCBhcmd1bWVudCkgPT0gMCkKKwl7CisJCXN0b3AgKCk7CisKKwl9IGVsc2UgaWYgKHN0cmNt cCAoInJlc3RhcnQiLCBhcmd1bWVudCkgPT0gMCkKKwl7CisJCXJlc3RhcnQgKGphdmFPcHQsIGph dmFBcmdzLCBqYm9zc09wdCwgamJvc3NBcmdzKTsKKworCX0gZWxzZSB7CisJCWZwcmludGYgKHN0 ZGVyciwgIiUlQ09OVFJPTF9TQ1JJUFRfTkFNRSUlOiBJbGxlZ2FsIGFyZ3VtZW50IFwiJXNcIi5c biIsIGFyZ3VtZW50KTsKKwkJcHJpbnRVc2FnZSAoKTsKKwkJZXhpdCAoRVJSX0lMTEVHQUxfQVJH VU1FTlQpOworCX0KKworCXJldHVybiBFWElUX1NVQ0NFU1M7Cit9CisKKy8qKgorICogUHJpbnRz IHVzYWdlIGluZm9ybWF0aW9uIHRvIHN0ZG91dC4KKyAqLworc3RhdGljIHZvaWQKK3ByaW50VXNh Z2UgKHZvaWQpCit7CisJcHJpbnRmICgiVXNhZ2U6ICUlQ09OVFJPTF9TQ1JJUFRfTkFNRSUlIFtq YXZhLW9wdGlvbnNdIFstY29uZmlnIGpib3NzY29uZmlnXSB7c3RhcnR8c3RvcHxyZXN0YXJ0fVxu Iik7Cit9CisKKy8qKgorICogUmVhZHMgYSBQSUQgZnJvbSB0aGUgUElEIGZpbGUuCisgKgorICog QHJldHVybgorICogICAgdGhlIFBJRCwgb3IgLTEgaWYgdGhlIGZpbGUgd2FzIGVtcHR5LgorICov CitzdGF0aWMgaW50CityZWFkUElEICh2b2lkKQoreworCUZJTEUgKiBmaWxlOworCWludCBwaWQ7 CisKKwlsb2dPdXRwdXQgKCI+PiBSZWFkaW5nIFBJRCBmaWxlICglJVBJRF9GSUxFJSUpLi4uIik7 CisJZmlsZSA9IGZvcGVuICgiJSVQSURfRklMRSUlIiwgInIiKTsKKwlpZiAoIWZpbGUpCisJewor CQlsb2dPdXRwdXQgKCIgWyBGQUlMRUQgXVxuIik7CisJCXBlcnJvciAoIiUlQ09OVFJPTF9TQ1JJ UFRfTkFNRSUlOiBVbmFibGUgdG8gb3BlbiAlJVBJRF9GSUxFJSUgZm9yIHJlYWRpbmc6ICIpOwor CQlleGl0IChFUlJfUElEX0ZJTEVfTk9UX0ZPVU5EKTsKKwl9CisJaWYgKGZzY2FuZiAoZmlsZSwg IiVkIiwgJnBpZCkgPCAxKQorCQlwaWQgPSAtMTsKKwlmY2xvc2UgKGZpbGUpOworCisJbG9nT3V0 cHV0ICgiIFsgRE9ORSBdXG4iKTsKKwlyZXR1cm4gcGlkOworfQorCisvKioKKyAqIFdyaXRlcyBh IHByb2Nlc3MgSUQgdG8gdGhlIHNwZWNpZmllZCBmaWxlLiBUaGUgZmlsZSBpcyBpZGVudGlmaWVk IGJ5IGEgZmlsZQorICogaGFuZGxlLgorICoKKyAqIEBwYXJhbSBwaWQKKyAqICAgIHRoZSBQSUQg dG8gc3RvcmUsIGFsd2F5cyBncmVhdGVyIHRoYW4gMC4KKyAqLworc3RhdGljIHZvaWQKK3dyaXRl UElEICgKKyBpbnQgcGlkKQoreworCUZJTEUgKiBmaWxlOworCisJbG9nT3V0cHV0ICgiPj4gV3Jp dGluZyBQSUQgZmlsZS4uLiIpOworCWZpbGUgPSBmb3BlbiAoIiUlUElEX0ZJTEUlJSIsICJ3Iik7 CisJaWYgKCFmaWxlKQorCXsKKwkJbG9nT3V0cHV0ICgiIFsgRkFJTEVEIF1cbiIpOworCQlwZXJy b3IgKCIlJUNPTlRST0xfU0NSSVBUX05BTUUlJTogVW5hYmxlIHRvIG9wZW4gJSVQSURfRklMRSUl IGZvciB3cml0aW5nOiAiKTsKKwkJZXhpdCAoRVJSX1BJRF9GSUxFX05PVF9GT1VORCk7CisJfQor CWZwcmludGYgKGZpbGUsICIlZFxuIiwgcGlkKTsKKwlmY2xvc2UgKGZpbGUpOworCisJbG9nT3V0 cHV0ICgiIFsgRE9ORSBdXG4iKTsKK30KKworLyoqCisJVHJ1bmNhdGUgdGhlIFBJRCBmaWxlLgor ICovCitzdGF0aWMgdm9pZAorY2xlYXJQSUQgKHZvaWQpCit7CisJaWYgKHRydW5jYXRlICgiJSVQ SURfRklMRSUlIiwgMCkgIT0gMCkKKwl7CisJCXBlcnJvciAoIiUlQ09OVFJPTF9TQ1JJUFRfTkFN RSUlOiBVbmFibGUgdG8gY2xlYXIgJSVQSURfRklMRSUlOiAiKTsKKwkJZXhpdCAoRVJSX1BJRF9G SUxFX05PVF9GT1VORCk7CisJfQorfQorCisvKioKKyAqIENoZWNrcyBpZiB0aGUgc3BlY2lmaWVk IHByb2Nlc3MgaXMgcnVubmluZy4KKyAqCisgKiBAcGFyYW0gcGlkCisgKiAgICB0aGUgcHJvY2Vz cyBpZCwgZ3JlYXRlciB0aGFuIDAuCisgKgorICogQHJldHVybgorICogICAgMCBpZiB0aGUgc3Bl Y2lmaWVkIHByb2Nlc3MgaXMgbm90IHJ1bm5pbmcsIGEgZGlmZmVyZW50IHZhbHVlIG90aGVyd2lz ZS4KKyAqLworc3RhdGljIGludAorZXhpc3RzUHJvY2VzcyAoCisgaW50IHBpZCkKK3sKKwlpbnQg cmVzdWx0OworCisJLyogQ2hlY2sgcHJlY29uZGl0aW9ucyAqLworCWFzc2VydCAocGlkID4gMCk7 CisKKwkvKiBTZWUgaWYgdGhlIHByb2Nlc3MgZXhpc3RzICovCisgICAJcmVzdWx0ID0ga2lsbCAo cGlkLCAwKTsKKworCS8qIElmIHRoZSByZXN1bHQgaXMgMCwgdGhlbiB0aGUgcHJvY2VzcyBleGlz dHMgKi8KKwlyZXR1cm4gcmVzdWx0ID09IDA7Cit9CisKKy8qKgorICogS2lsbHMgdGhlIHByb2Nl c3MgaWRlbnRpZmllZCBieSB0aGUgc3BlY2lmaWVkIElELgorICoKKyAqIEBwYXJhbSBwaWQKKyAq ICAgIHRoZSBwcm9jZXNzIGlkLCBncmVhdGVyIHRoYW4gMC4KKyAqLworc3RhdGljIHZvaWQKK2tp bGxQcm9jZXNzICgKKyBpbnQgcGlkKQoreworCWludCByZXN1bHQ7CisJdW5zaWduZWQgaW50IHdh aXRlZDsKKwl1bnNpZ25lZCBpbnQgZm9yY2VkOworCXVuc2lnbmVkIGludCBpbnRlcnZhbCA9IFNU T1BfVElNRV9JTlRFUlZBTDsKKwl1bnNpZ25lZCBpbnQgdGltZW91dCAgPSAlJVNUT1BfVElNRU9V VCUlOworCisJLyogQ2hlY2sgcHJlY29uZGl0aW9ucyAqLworCWFzc2VydCAocGlkID4gMCk7CisK KwlpZiAoIWlzUXVpZXQpCisJCXByaW50ZiAoIj4+IFRlcm1pbmF0aW5nIHByb2Nlc3MgJWQuLi4i LCBwaWQpOworCXJlc3VsdCA9IGtpbGwgKHBpZCwgU0lHVEVSTSk7CisJaWYgKHJlc3VsdCA8IDAp IHsKKwkJbG9nT3V0cHV0ICgiIFsgRkFJTEVEIF1cbiIpOworCQlmcHJpbnRmIChzdGRlcnIsICIl JUNPTlRST0xfU0NSSVBUX05BTUUlJTogVW5hYmxlIHRvIGtpbGwgcHJvY2VzcyAlZDogIiwgcGlk KTsKKwkJcGVycm9yIChOVUxMKTsKKwkJZXhpdCAoRVJSX0tJTExfRkFJTEVEKTsKKwl9CisKKwkv KiBXYWl0IHVudGlsIHRoZSBwcm9jZXNzIGlzIGFjdHVhbGx5IGtpbGxlZCAqLworICAgIHJlc3Vs dCA9IGV4aXN0c1Byb2Nlc3MgKHBpZCk7CisJZm9yICh3YWl0ZWQ9MDsgcmVzdWx0ID09IDEgJiYg d2FpdGVkIDwgdGltZW91dDsgd2FpdGVkICs9IGludGVydmFsKQorCXsKKwkJbG9nT3V0cHV0ICgi LiIpOworCQlmZmx1c2ggKHN0ZG91dCk7CisJCXNsZWVwIChpbnRlcnZhbCk7CisgICAgCXJlc3Vs dCA9IGV4aXN0c1Byb2Nlc3MgKHBpZCk7CisJfQorCisJLyogSWYgdGhlIHByb2Nlc3Mgc3RpbGwg ZXhpc3RzLCB0aGVuIGhhdmUgbm8gbWVyY3kgYW5kIGtpbGwgaXQgKi8KKwlmb3JjZWQgPSAwOwor CWlmIChyZXN1bHQgPT0gMSkKKwl7CisJCS8qIEZvcmNlIHRoZSBwcm9jZXNzIHRvIGRpZSAqLwor CQlyZXN1bHQgPSBraWxsIChwaWQsIFNJR0tJTEwpOworCQlpZiAocmVzdWx0ID09IDApIHsKKwkJ CWZvcmNlZCA9IDE7CisJCQlsb2dPdXRwdXQgKCIgWyBLSUxMRUQgXVxuIik7CisJCQlmcHJpbnRm IChzdGRlcnIsICIlJUNPTlRST0xfU0NSSVBUX05BTUUlJTogUHJvY2VzcyAlZCBkaWQgbm90IHRl cm1pbmF0ZSB3aXRoaW4gJSVTVE9QX1RJTUVPVVQlJSBzZWMuIEtpbGxlZC5cbiIsIHBpZCk7CisJ CX0gZWxzZSBpZiAocmVzdWx0ICE9IEVTUkNIKSB7CisJCQlsb2dPdXRwdXQgKCIgWyBGQUlMRUQg XVxuIik7CisJCQlmcHJpbnRmIChzdGRlcnIsICIlJUNPTlRST0xfU0NSSVBUX05BTUUlJTogVW5h YmxlIHRvIGtpbGwgcHJvY2VzcyAlZDogIiwgcGlkKTsKKwkJCXBlcnJvciAoTlVMTCk7CisJCQll eGl0IChFUlJfS0lMTF9GQUlMRUQpOworCQl9CisJfQorCisJaWYgKGZvcmNlZCA9PSAwKSB7CisJ CWxvZ091dHB1dCAoIiBbIERPTkUgXVxuIik7CisJfQorfQorCisvKioKKyAqIFN0YXJ0cyB0aGUg ZGFlbW9uLgorICovCitzdGF0aWMgdm9pZAorc3RhcnQgKAorIGludCBqYXZhT3B0LAorIGNoYXIg KiBqYXZhQXJncyBbXSwKKyBpbnQgamJvc3NPcHQsCisgY2hhciAqIGpib3NzQXJncyBbXSkKK3sK KwlpbnQgaSwgYXJnYzsKKwljaGFyICoqIGFyZ3Y7CisJaW50IHBpZDsKKwlpbnQgcmVzdWx0Owor CWludCBzdGRvdXRMb2dGaWxlOworCWludCBzdGRlcnJMb2dGaWxlOworCXN0cnVjdCBzdGF0IHNi OworCisJcGlkID0gcmVhZFBJRCAoKTsKKworCWxvZ091dHB1dCAoIj4+IFN0YXJ0aW5nICUlQVBQ X1RJVExFJSUgJSVQT1JUVkVSU0lPTiUlLi4uIik7CisJaWYgKHBpZCAhPSAtMSkKKwl7CisJCS8q IENoZWNrIGlmIHRoZSBwcm9jZXNzIGFjdHVhbGx5IGV4aXN0cyAqLworCQlyZXN1bHQgPSBleGlz dHNQcm9jZXNzIChwaWQpOworCQlpZiAocmVzdWx0ID09IDEpCisJCXsKKwkJCWxvZ091dHB1dCAo IiBbIEZBSUxFRCBdXG4iKTsKKwkJCWZwcmludGYgKHN0ZGVyciwgIiUlQ09OVFJPTF9TQ1JJUFRf TkFNRSUlOiAlJUFQUF9USVRMRSUlICUlUE9SVFZFUlNJT04lJSBpcyBhbHJlYWR5IHJ1bm5pbmcs IFBJRCBpcyAlZC5cbiIsIHBpZCk7CisJCQlleGl0IChFUlJfQUxSRUFEWV9SVU5OSU5HKTsKKwkJ fQorCX0KKworCS8qIENoZWNrIGlmIHRoZSBKREsgaG9tZSBkaXJlY3RvcnkgaXMgYWN0dWFsbHkg YSBkaXJlY3RvcnkgKi8KKwlyZXN1bHQgPSBzdGF0ICgiJSVKQVZBX0hPTUUlJSIsICZzYik7CisJ aWYgKHJlc3VsdCAhPSAwKSB7CisJCWxvZ091dHB1dCAoIiBbIEZBSUxFRCBdXG4iKTsKKwkJZnBy aW50ZiAoc3RkZXJyLCAiJSVDT05UUk9MX1NDUklQVF9OQU1FJSU6IFVuYWJsZSB0byBzdGF0ICUl SkFWQV9IT01FJSU6ICIpOworCQlwZXJyb3IgKE5VTEwpOworCQlleGl0IChFUlJfU1RBVF9KQVZB X0hPTUUpOworCX0KKwlpZiAoIVNfSVNESVIgKHNiLnN0X21vZGUpKSB7CisJCWxvZ091dHB1dCAo IiBbIEZBSUxFRCBdXG4iKTsKKwkJZnByaW50ZiAoc3RkZXJyLCAiJSVDT05UUk9MX1NDUklQVF9O QU1FJSU6IEphdmEgaG9tZSBkaXJlY3RvcnkgJSVKQVZBX0hPTUUlJSBpcyBub3QgYSBkaXJlY3Rv cnkuXG4iKTsKKwkJZXhpdCAoRVJSX0pBVkFfSE9NRV9OT1RfRElSKTsKKwl9CisKKwkvKiBDaGVj ayBpZiB0aGUgSmF2YSBjb21tYW5kIGlzIGFjdHVhbGx5IGFuIGV4ZWN1dGFibGUgcmVndWxhciBm aWxlICovCisJcmVzdWx0ID0gc3RhdCAoIiUlSkFWQSUlIiwgJnNiKTsKKwlpZiAocmVzdWx0ICE9 IDApIHsKKwkJbG9nT3V0cHV0ICgiIFsgRkFJTEVEIF1cbiIpOworCQlmcHJpbnRmIChzdGRlcnIs ICIlJUNPTlRST0xfU0NSSVBUX05BTUUlJTogVW5hYmxlIHRvIHN0YXQgJSVKQVZBJSU6ICIpOwor CQlwZXJyb3IgKE5VTEwpOworCQlleGl0IChFUlJfU1RBVF9KQVZBX0NNRCk7CisJfQorCWlmICgh U19JU1JFRyAoc2Iuc3RfbW9kZSkpIHsKKwkJbG9nT3V0cHV0ICgiIFsgRkFJTEVEIF1cbiIpOwor CQlmcHJpbnRmIChzdGRlcnIsICIlJUNPTlRST0xfU0NSSVBUX05BTUUlJTogSmF2YSBjb21tYW5k ICUlSkFWQSUlIGlzIG5vdCBhIHJlZ3VsYXIgZmlsZS5cbiIpOworCQlleGl0IChFUlJfSkFWQV9D TURfTk9UX0ZJTEUpOworCX0KKwlyZXN1bHQgPSBhY2Nlc3MgKCIlJUpBVkElJSIsIFhfT0spOwor CWlmIChyZXN1bHQgIT0gMCkgeworCQlsb2dPdXRwdXQgKCIgWyBGQUlMRUQgXVxuIik7CisJCWZw cmludGYgKHN0ZGVyciwgIiUlQ09OVFJPTF9TQ1JJUFRfTkFNRSUlOiBKYXZhIGNvbW1hbmQgJSVK QVZBJSUgaXMgbm90IGV4ZWN1dGFibGU6ICIpOworCQlwZXJyb3IgKE5VTEwpOworCQlleGl0IChF UlJfSkFWQV9DTURfTk9UX0VYRUNVVEFCTEUpOworCX0KKworCS8qIENoYW5nZSBkaXJlY3Rvcnkg Ki8KKwlyZXN1bHQgPSBjaGRpciAoIiUlQVBQX0hPTUUlJSIpOworCWlmIChyZXN1bHQgPCAwKSB7 CisJCWxvZ091dHB1dCAoIiBbIEZBSUxFRCBdXG4iKTsKKwkJZnByaW50ZiAoc3RkZXJyLCAiJSVD T05UUk9MX1NDUklQVF9OQU1FJSU6IFVuYWJsZSB0byBhY2Nlc3MgZGlyZWN0b3J5ICUlQVBQX0hP TUUlJTogIik7CisJCXBlcnJvciAoTlVMTCk7CisJCWV4aXQgKEVSUl9DSERJUl9UT19BUFBfSE9N RSk7CisJfQorCisJLyogU2VlIGlmIHRoZSBKQVIgZmlsZSBleGlzdHMgKi8KKwlyZXN1bHQgPSBh Y2Nlc3MgKCIlJUFQUF9IT01FJSUvJSVKQVJfRklMRSUlIiwgUl9PSyk7CisJaWYgKHJlc3VsdCA8 IDApIHsKKwkJbG9nT3V0cHV0ICgiIFsgRkFJTEVEIF1cbiIpOworCQlmcHJpbnRmIChzdGRlcnIs ICIlJUNPTlRST0xfU0NSSVBUX05BTUUlJTogVW5hYmxlIHRvIGFjY2VzcyBKQVIgZmlsZSAlJUFQ UF9IT01FJSUvJSVKQVJfRklMRSUlOiAiKTsKKwkJcGVycm9yIChOVUxMKTsKKwkJZXhpdCAoRVJS X0FDQ0VTU19KQVJfRklMRSk7CisJfQorCisJLyogT3BlbiB0aGUgc3Rkb3V0IGxvZyBmaWxlICov CisJc3Rkb3V0TG9nRmlsZSA9IG9wZW4gKCIlJVNURE9VVF9MT0clJSIsIE9fV1JPTkxZKTsKKwlp ZiAoc3Rkb3V0TG9nRmlsZSA8IDApIHsKKwkJbG9nT3V0cHV0ICgiIFsgRkFJTEVEIF1cbiIpOwor CQlmcHJpbnRmIChzdGRlcnIsICIlJUNPTlRST0xfU0NSSVBUX05BTUUlJTogVW5hYmxlIHRvIG9w ZW4gJSVTVERPVVRfTE9HJSUgZm9yIHdyaXRpbmc6ICIpOworCQlwZXJyb3IgKE5VTEwpOworCQll eGl0IChFUlJfU1RET1VUX0xPR0ZJTEVfT1BFTik7CisJfQorCWxzZWVrIChzdGRvdXRMb2dGaWxl LCAob2ZmX3QpIDAsIFNFRUtfRU5EKTsKKworCS8qIE9wZW4gdGhlIHN0ZGVyciBsb2cgZmlsZSAq LworCXN0ZGVyckxvZ0ZpbGUgPSBvcGVuICgiJSVTVERFUlJfTE9HJSUiLCBPX1dST05MWSk7CisJ aWYgKHN0ZGVyckxvZ0ZpbGUgPCAwKSB7CisJCWxvZ091dHB1dCAoIiBbIEZBSUxFRCBdXG4iKTsK KwkJZnByaW50ZiAoc3RkZXJyLCAiJSVDT05UUk9MX1NDUklQVF9OQU1FJSU6IFVuYWJsZSB0byBv cGVuICUlU1RERVJSX0xPRyUlIGZvciB3cml0aW5nOiAiKTsKKwkJcGVycm9yIChOVUxMKTsKKwkJ ZXhpdCAoRVJSX1NUREVSUl9MT0dGSUxFX09QRU4pOworCX0KKwlsc2VlayAoc3RkZXJyTG9nRmls ZSwgKG9mZl90KSAwLCBTRUVLX0VORCk7CisKKwkvKiBTcGxpdCB0aGlzIHByb2Nlc3MgaW4gdHdv ICovCisJc3dpdGNoIChwaWQgPSBmb3JrICgpKQorCXsKKwljYXNlIC0xOgorCQlsb2dPdXRwdXQg KCIgWyBGQUlMRUQgXVxuIik7CisJCWZwcmludGYgKHN0ZGVyciwgIiUlQ09OVFJPTF9TQ1JJUFRf TkFNRSUlOiBVbmFibGUgdG8gZm9yazogIik7CisJCXBlcnJvciAoTlVMTCk7CisJCWV4aXQgKEVS Ul9GT1JLX0ZBSUxFRCk7CisJCWJyZWFrOworCisJY2FzZSAwOgorCQkvKiBSZWRpcmVjdCBzdGRv dXQgdG8gbG9nIGZpbGUgKi8KKwkJZHVwMiAoc3Rkb3V0TG9nRmlsZSwgU1RET1VUX0ZJTEVOTyk7 CisKKwkJLyogUmVkaXJlY3Qgc3RkZXJyIHRvIGxvZyBmaWxlICovCisJCWR1cDIgKHN0ZGVyckxv Z0ZpbGUsIFNUREVSUl9GSUxFTk8pOworCisJCS8qIFRPRE86IFN1cHBvcnQgcmVkaXJlY3Rpb24g b2YgYm90aCBzdGRvdXQgYW5kIHN0ZGVyciB0byB0aGUgc2FtZQorCQkJCSBmaWxlIHVzaW5nIHBp cGUgKDIpICovCisKKwkJLyoKKwkJCUJ1aWxkIHRoZSBhcmd1bWVudCB2ZWN0b3IsIHdpdGggdGhl IGphdmEvamJvc3Mgb3B0aW9ucyBpZiBhbnkuCisJCSAqLworCQlhcmd2ID0gbWFsbG9jIChzaXpl b2YgKGNoYXIgKikgKiAoamF2YU9wdCArIGpib3NzT3B0ICsgNSkpOworCQlhcmdjID0gMDsKKwkJ YXJndiBbYXJnYysrXSA9ICIlJUpBVkElJSI7CisJCWZvciAoaSA9IDA7IGkgPCBqYXZhT3B0OyBp KyspCisJCQlhcmd2IFthcmdjKytdID0gamF2YUFyZ3MgW2ldOworCQlhcmd2IFthcmdjKytdID0g Ii1jcCI7CisJCWFyZ3YgW2FyZ2MrK10gPSAiJSVKQVZBX0NQJSUiOworCQlhcmd2IFthcmdjKytd ID0gIiUlSkFWQV9NQUlOJSUiOworCQlmb3IgKGkgPSAwOyBpIDwgamJvc3NPcHQ7IGkrKykKKwkJ CWFyZ3YgW2FyZ2MrK10gPSBqYm9zc0FyZ3MgW2ldOworCQlhcmd2IFthcmdjKytdID0gTlVMTDsK KworCQkvKiBFeGVjdXRlIHRoZSBjb21tYW5kICovCisJCWV4ZWN2IChhcmd2IFswXSwgYXJndik7 CisJCXBlcnJvciAoTlVMTCk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJbG9nT3V0cHV0ICgi IFsgRE9ORSBdXG4iKTsKKwkJd3JpdGVQSUQgKHBpZCk7CisJfQorfQorCisvKioKKyAqIFN0b3Bz IHRoZSBkYWVtb24uCisgKi8KK3N0YXRpYyB2b2lkCitzdG9wICh2b2lkKQoreworCWludCBwaWQ7 CisKKwlwaWQgPSByZWFkUElEICgpOworCisJbG9nT3V0cHV0ICgiPj4gQ2hlY2tpbmcgaWYgJSVB UFBfVElUTEUlJSAlJVBPUlRWRVJTSU9OJSUgaXMgcnVubmluZy4uLiIpOworCisJLyogSWYgdGhl cmUgaXMgYSBQSUQsIHNlZSBpZiB0aGUgcHJvY2VzcyBzdGlsbCBleGlzdHMgKi8KKwlpZiAocGlk ICE9IC0xKQorCXsKKwkJaW50IHJlc3VsdCA9IGtpbGwgKHBpZCwgMCk7CisJCWlmIChyZXN1bHQg IT0gMCAmJiBlcnJubyA9PSBFU1JDSCkKKwkJeworCQkJY2xlYXJQSUQgKCk7CisJCQlwaWQgPSAt MTsKKwkJfQorCX0KKworCS8qIElmIHRoZXJlIGlzIG5vIHJ1bm5pbmcgcHJvY2VzcywgcHJvZHVj ZSBhbiBlcnJvciAqLworCWlmIChwaWQgPT0gLTEpCisJeworCQlsb2dPdXRwdXQgKCIgWyBGQUlM RUQgXVxuIik7CisJCWZwcmludGYgKHN0ZGVyciwgIiUlQ09OVFJPTF9TQ1JJUFRfTkFNRSUlOiAl JUFQUF9USVRMRSUlICUlUE9SVFZFUlNJT04lJSBpcyBjdXJyZW50bHkgbm90IHJ1bm5pbmcuXG4i KTsKKwkJZXhpdCAoRVJSX05PVF9SVU5OSU5HKTsKKwl9CisJbG9nT3V0cHV0ICgiIFsgRE9ORSBd XG4iKTsKKworCS8qIFRlcm1pbmF0ZSB0aGUgcHJvY2VzcyAqLworCWtpbGxQcm9jZXNzIChwaWQp OworCWNsZWFyUElEICgpOworfQorCisKKy8qKgorICogUmVzdGFydHMgdGhlIHByb2Nlc3MuIElm IGl0IG5vdCBjdXJyZW50bHkgcnVubmluZywgdGhlbiBpdCB3aWxsIGZhaWwuCisgKi8KK3N0YXRp YyB2b2lkCityZXN0YXJ0ICgKKyBpbnQgamF2YU9wdCwKKyBjaGFyICogamF2YUFyZ3MgW10sCisg aW50IGpib3NzT3B0LAorIGNoYXIgKiBqYm9zc0FyZ3MgW10pCit7CisJc3RvcCAoKTsKKwlzdGFy dCAoamF2YU9wdCwgamF2YUFyZ3MsIGpib3NzT3B0LCBqYm9zc0FyZ3MpOworfQorCisvKioKKwlP dXRwdXQgbG9nIHRvIHN0ZG91dC4KKyAqLworc3RhdGljIHZvaWQKK2xvZ091dHB1dCAoCisgY2hh ciAqIHN0cmluZykKK3sKKwlpZiAoIWlzUXVpZXQpCisJCXByaW50ZiAoc3RyaW5nKTsKK30KSW5k ZXg6IGZpbGVzL2pib3NzMy5zaC5pbgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiBmaWxlcy9qYm9zczMu c2guaW4KZGlmZiAtTiBmaWxlcy9qYm9zczMuc2guaW4KLS0tIC9kZXYvbnVsbAkxIEphbiAxOTcw IDAwOjAwOjAwIC0wMDAwCisrKyBmaWxlcy9qYm9zczMuc2guaW4JMTMgSmFuIDIwMDUgMDE6NTU6 MTMgLTAwMDAKQEAgLTAsMCArMSw1OCBAQAorIyEvYmluL3NoCisjCisjICUlQVBQX1RJVExFJSUg c3RhcnR1cCBzY3JpcHQuCisjCisjICRGcmVlQlNEOiBwb3J0cy9qYXZhL2pib3NzMy9maWxlcy9z dGFydHVwLnNoLHYgMS4yIDIwMDUvMDEvMTMgMDE6NTU6MTMgaHEgRXhwICQKKyMKKworIyBQUk9W SURFOiAlJUFQUF9TSE9SVE5BTUUlJQorIyBSRVFVSVJFOiBORVRXT1JLSU5HIFNFUlZFUlMKKwor IyBBZGQgdGhlIGZvbGxvd2luZyBsaW5lcyB0byAvZXRjL3JjLmNvbmYgdG8gZW5hYmxlICUlQVBQ X1NIT1JUTkFNRSUlOgorIyAlJUFQUF9TSE9SVE5BTUUlJV9lbmFibGUgKGJvb2wpOgkJU2V0IHRv ICJOTyIgYnkgZGVmYXVsdC4KKyMJCQkJU2V0IGl0IHRvICJZRVMiIHRvIGVuYWJsZSAlJUFQUF9T SE9SVE5BTUUlJQorIyAlJUFQUF9TSE9SVE5BTUUlJV9mbGFncyAoc3RyKToJCVNldCB0byAiLXNl cnZlciIgYnkgZGVmYXVsdC4KKyMJCQkJRXh0cmEgSlZNIGZsYWdzLgorIyAlJUFQUF9TSE9SVE5B TUUlJV9jb25maWcgKHN0cik6CQlTZXQgdG8gIiIgYnkgZGVmYXVsdAorIwkJCQlKQm9zcyBzZXJ2 ZXIgY29uZmlnLCBlZyB7YWxsfGRlZmF1bHR8bWluaW1hbHxzdGFuZGFyZH0KKyMKKy4gJSVSQ19T VUJSJSUKKworbmFtZT0iJSVBUFBfU0hPUlROQU1FJSUiCityY3Zhcj1gc2V0X3JjdmFyYAorCitz dGFydF9jbWQ9IiUlQVBQX1NIT1JUTkFNRSUlX3N0YXJ0IgorcmVzdGFydF9jbWQ9IiUlQVBQX1NI T1JUTkFNRSUlX3Jlc3RhcnQiCitwaWRmaWxlPSIlJVBJRF9GSUxFJSUiCitwcm9jbmFtZT0iJSVK QVZBJSUiCisKK1sgLXogIiQlJUFQUF9TSE9SVE5BTUUlJV9lbmFibGUiIF0JJiYgJSVBUFBfU0hP UlROQU1FJSVfZW5hYmxlPSJOTyIKK1sgLXogIiQlJUFQUF9TSE9SVE5BTUUlJV9mbGFncyIgXQkm JiAlJUFQUF9TSE9SVE5BTUUlJV9mbGFncz0iLXNlcnZlciIKK1sgLXogIiQlJUFQUF9TSE9SVE5B TUUlJV9jb25maWciIF0JJiYgJSVBUFBfU0hPUlROQU1FJSVfY29uZmlnPSIiCisKKyUlQVBQX1NI T1JUTkFNRSUlX3N0YXJ0ICgpCit7CisJY2hlY2t5ZXNubyAlJUFQUF9TSE9SVE5BTUUlJV9lbmFi bGUgJiYKKwl7CisJCWlmIFsgISAtZiAke3BpZGZpbGV9IF0KKwkJdGhlbgorCQkJdG91Y2ggJHtw aWRmaWxlfQorCQkJY2hvd24gJSVVU0VSJSU6JSVHUk9VUCUlICR7cGlkZmlsZX0KKwkJZmkKKwor CQklJUNPTlRST0xfU0NSSVBUJSUgLXEgJHslJUFQUF9TSE9SVE5BTUUlJV9mbGFnc30gJHslJUFQ UF9TSE9SVE5BTUUlJV9jb25maWdmbGFnfSAkeyUlQVBQX1NIT1JUTkFNRSUlX2NvbmZpZ30gc3Rh cnQgJiYKKwkJZWNobyAtbiAiICUlQVBQX1NIT1JUTkFNRSUlIgorCX0KK30KKworJSVBUFBfU0hP UlROQU1FJSVfcmVzdGFydCAoKQoreworCWNoZWNreWVzbm8gJSVBUFBfU0hPUlROQU1FJSVfZW5h YmxlICYmCisJCSUlQ09OVFJPTF9TQ1JJUFQlJSAtcSAkeyUlQVBQX1NIT1JUTkFNRSUlX2ZsYWdz fSAkeyUlQVBQX1NIT1JUTkFNRSUlX2NvbmZpZ2ZsYWd9ICR7JSVBUFBfU0hPUlROQU1FJSVfY29u ZmlnfSByZXN0YXJ0Cit9CisKK2xvYWRfcmNfY29uZmlnICRuYW1lCisKK1sgLW4gIiR7JSVBUFBf U0hPUlROQU1FJSVfY29uZmlnfSIgXSAmJiAlJUFQUF9TSE9SVE5BTUUlJV9jb25maWdmbGFnPSIt Y29uZmlnIgorCitydW5fcmNfY29tbWFuZCAiJDEiCkluZGV4OiBmaWxlcy9wYXRjaC1idWlsZC54 bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PQpSQ1MgZmlsZTogZmlsZXMvcGF0Y2gtYnVpbGQueG1sCmRpZmYgLU4gZmls ZXMvcGF0Y2gtYnVpbGQueG1sCi0tLSAvZGV2L251bGwJMSBKYW4gMTk3MCAwMDowMDowMCAtMDAw MAorKysgZmlsZXMvcGF0Y2gtYnVpbGQueG1sCTI1IE1hciAyMDA3IDE1OjA1OjIzIC0wMDAwCkBA IC0wLDAgKzEsMzggQEAKKy0tLSAuL2J1aWxkL2J1aWxkLnhtbC5vcmlnCVN1biBNYXIgMjUgMjI6 NTU6MjAgMjAwNworKysrIC4vYnVpbGQvYnVpbGQueG1sCVN1biBNYXIgMjUgMjI6NTg6NTcgMjAw NworQEAgLTQzLDYgKzQzLDM1IEBACisgICAgLS0+CisgCisgICA8dGFyZ2V0IG5hbWU9ImluaXQi IHVubGVzcz0iaW5pdC5kaXNhYmxlIiBkZXBlbmRzPSJfYnVpbGRtYWdpYzppbml0Ij4KKysgIDwh LS0gTWFrZSBzdXJlIHdlIGhhdmUgdGhlIHJpZ2h0IHZlcnNpb24gb2YgQW50IC0tPgorKyAgPHBy b3BlcnR5IG5hbWU9ImJ1aWxkbWFnaWMuYW50MTUuYmFzZXZlcnNpb24iIHZhbHVlPSIxLjUiLz4K KysgIDxwcm9wZXJ0eSBuYW1lPSJidWlsZG1hZ2ljLmFudDE2LmJhc2V2ZXJzaW9uIiB2YWx1ZT0i MS42Ii8+CisrICA8cHJvcGVydHkgbmFtZT0iYnVpbGRtYWdpYy5hbnQxNi5iYXNldmVyc2lvbiIg dmFsdWU9IjEuNyIvPgorKyAgPCEtLQorKyAgICAgIHwgQWRkIG5ldyBjb25kaXRpb25zIGZvciBv dGhlciBzdXBwb3J0ZWQgQW50IHZlcnNpb25zIHdoZW4gdGhleQorKyAgICAgIHwgYmVjb21lIGF2 YWlhbGJsZS4KKysgICAtLT4KKysKKysgICA8Y29uZGl0aW9uIHByb3BlcnR5PSJidWlsZG1hZ2lj LmFudC5jb21wYXRpYmxlIj4KKysgICAgIDxvcj4KKysgICAgICAgIDxjb250YWlucyBzdHJpbmc9 IiR7YW50LnZlcnNpb259IgorKwkJICBzdWJzdHJpbmc9IkFudCB2ZXJzaW9uICR7YnVpbGRtYWdp Yy5hbnQxNS5iYXNldmVyc2lvbn0iLz4KKysJPGNvbnRhaW5zIHN0cmluZz0iJHthbnQudmVyc2lv bn0iCisrCSAgICAJICBzdWJzdHJpbmc9IkFudCB2ZXJzaW9uICR7YnVpbGRtYWdpYy5hbnQxNi5i YXNldmVyc2lvbn0iLz4KKysJPGNvbnRhaW5zIHN0cmluZz0iJHthbnQudmVyc2lvbn0iCisrCSAg ICAgICAgICBzdWJzdHJpbmc9IkFudCB2ZXJzaW9uICR7YnVpbGRtYWdpYy5hbnQxNy5iYXNldmVy c2lvbn0iLz4KKysgICAgIDwvb3I+CisrICAgPC9jb25kaXRpb24+CisrCisrICAgPGZhaWwgdW5s ZXNzPSJidWlsZG1hZ2ljLmFudC5jb21wYXRpYmxlIj4KKysKKysgICAgICBVbnN1cHBvcnRlZCBB bnQgdmVyc2lvbjoKKysKKysgICAgICAgJHthbnQudmVyc2lvbn0KKysKKysgICAgICBQbGVhc2Ug aW5zdGFsbCBhIHZlcnNpb24gd2hpY2ggaXMgY29tcGF0aWJsZSB3aXRoIEFudCAke2J1aWxkbWFn aWMuYW50MTUuYmFzZXZlcnNpb259IG9yICR7YnVpbGRtYWdpYy5hbnQxNi5iYXNldmVyc2lvbn0g b3IgJHtidWlsZG1hZ2ljLmFudDE3LmJhc2V2ZXJzaW9ufS4KKysKKysgICA8L2ZhaWw+CisgICA8 L3RhcmdldD4KKyAKKyAKSW5kZXg6IGZpbGVzL3BhdGNoLWJ1aWxkbWFnaWMuZW50Cj09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT0KUkNTIGZpbGU6IGZpbGVzL3BhdGNoLWJ1aWxkbWFnaWMuZW50CmRpZmYgLU4gZmlsZXMvcGF0 Y2gtYnVpbGRtYWdpYy5lbnQKLS0tIC9kZXYvbnVsbAkxIEphbiAxOTcwIDAwOjAwOjAwIC0wMDAw CisrKyBmaWxlcy9wYXRjaC1idWlsZG1hZ2ljLmVudAkyNSBNYXIgMjAwNyAxNTowMTo1OCAtMDAw MApAQCAtMCwwICsxLDM3IEBACistLS0gLi90b29scy9ldGMvYnVpbGRtYWdpYy9idWlsZG1hZ2lj LmVudC5vcmlnCVN1biBNYXIgMjUgMjI6NTM6NTEgMjAwNworKysrIC4vdG9vbHMvZXRjL2J1aWxk bWFnaWMvYnVpbGRtYWdpYy5lbnQJU3VuIE1hciAyNSAyMjo1NDoyMSAyMDA3CitAQCAtNywzNCAr Nyw2IEBACisgPCEtLSBJbml0aWFsaXplIHRoZSBidWlsZCBzeXN0ZW0uIC0tPgorIDx0YXJnZXQg bmFtZT0iX2J1aWxkbWFnaWM6aW5pdCIgdW5sZXNzPSJpbml0LmRpc2FibGUiPgorIAorLSAgPCEt LSBNYWtlIHN1cmUgd2UgaGF2ZSB0aGUgcmlnaHQgdmVyc2lvbiBvZiBBbnQgLS0+CistICA8cHJv cGVydHkgbmFtZT0iYnVpbGRtYWdpYy5hbnQxNS5iYXNldmVyc2lvbiIgdmFsdWU9IjEuNSIvPgor LSAgPHByb3BlcnR5IG5hbWU9ImJ1aWxkbWFnaWMuYW50MTYuYmFzZXZlcnNpb24iIHZhbHVlPSIx LjYiLz4KKy0KKy0gIDwhLS0KKy0gICAgIHwgQWRkIG5ldyBjb25kaXRpb25zIGZvciBvdGhlciBz dXBwb3J0ZWQgQW50IHZlcnNpb25zIHdoZW4gdGhleQorLSAgICAgfCBiZWNvbWUgYXZhaWFsYmxl LgorLSAgIC0tPgorLQorLSAgPGNvbmRpdGlvbiBwcm9wZXJ0eT0iYnVpbGRtYWdpYy5hbnQuY29t cGF0aWJsZSI+CistICAgIDxvcj4KKy0gICAgICA8Y29udGFpbnMgc3RyaW5nPSIke2FudC52ZXJz aW9ufSIKKy0gICAgICAgIHN1YnN0cmluZz0iQW50IHZlcnNpb24gJHtidWlsZG1hZ2ljLmFudDE1 LmJhc2V2ZXJzaW9ufSIvPgorLSAgICAgIDxjb250YWlucyBzdHJpbmc9IiR7YW50LnZlcnNpb259 IgorLSAgICAgICAgc3Vic3RyaW5nPSJBbnQgdmVyc2lvbiAke2J1aWxkbWFnaWMuYW50MTYuYmFz ZXZlcnNpb259Ii8+CistICAgIDwvb3I+CistICA8L2NvbmRpdGlvbj4KKy0KKy0gIDxmYWlsIHVu bGVzcz0iYnVpbGRtYWdpYy5hbnQuY29tcGF0aWJsZSI+CistCistICBVbnN1cHBvcnRlZCBBbnQg dmVyc2lvbjoKKy0KKy0gICAgJHthbnQudmVyc2lvbn0KKy0KKy0gIFBsZWFzZSBpbnN0YWxsIGEg dmVyc2lvbiB3aGljaCBpcyBjb21wYXRpYmxlIHdpdGggQW50ICR7YnVpbGRtYWdpYy5hbnQxNS5i YXNldmVyc2lvbn0gb3IgJHtidWlsZG1hZ2ljLmFudDE2LmJhc2V2ZXJzaW9ufS4KKy0KKy0gIDwv ZmFpbD4KKy0KKyAgIDwhLS0gSkRLIERldGVjdGlvbiAtLT4KKyAgIDxhdmFpbGFibGUgY2xhc3Nu YW1lPSJqYXZhLmxhbmcuU3RyaWN0TWF0aCIgcHJvcGVydHk9IkhBVkVfSkRLXzEuMyIvPgorICAg PGF2YWlsYWJsZSBjbGFzc25hbWU9ImphdmEubGFuZy5TdGFja1RyYWNlRWxlbWVudCIgcHJvcGVy dHk9IkhBVkVfSkRLXzEuNCIvPgpJbmRleDogZmlsZXMvcGtnLWRlaW5zdGFsbC5pbgo9PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09ClJDUyBmaWxlOiBmaWxlcy9wa2ctZGVpbnN0YWxsLmluCmRpZmYgLU4gZmlsZXMvcGtnLWRl aW5zdGFsbC5pbgotLS0gL2Rldi9udWxsCTEgSmFuIDE5NzAgMDA6MDA6MDAgLTAwMDAKKysrIGZp bGVzL3BrZy1kZWluc3RhbGwuaW4JMTQgSnVsIDIwMDMgMTA6MDM6MTMgLTAwMDAKQEAgLTAsMCAr MSwzNSBAQAorIyEvYmluL3NoCisjCisjIFRoaXMgc2NyaXB0IGRvZXMgdGhlIGZvbGxvd2luZy4K KyMKKyMgKiBDaGVja3MgaWYgdGhlIEpCb3NzIFBJRCBmaWxlIGV4aXN0cy4gSWYgaXQgZG9lcywg aXQga2lsbHMgdGhlCisjICAgSkJvc3MgcHJvY2VzcyBhbmQgcmVtb3ZlcyB0aGUgUElEIGZpbGUu CisjCisjICRGcmVlQlNEOiBwb3J0cy9qYXZhL2pib3NzMy9wa2ctZGVpbnN0YWxsLHYgMS4yIDIw MDMvMDcvMTQgMTA6MDM6MTMgZGVzIEV4cCAkCisjCisKKyMgTWFrZSBzdXJlIHdlJ3JlIGluIHRo ZSByaWdodCBzdGFnZSBvZiB0aGUgcHJvY2VzcworaWYgWyAiJDIiID0gIkRFSU5TVEFMTCIgXTsg dGhlbgorCisJIyBLaWxsIEpCb3NzIGlmIGl0IGlzIHN0aWxsIHJ1bm5pbmcKKwlQSURfRklMRT0v dmFyL3J1bi9qYm9zcy5waWQKKwlpZiBbIC1zICR7UElEX0ZJTEV9IF07IHRoZW4KKwkJUElEPWBj YXQgJHtQSURfRklMRX1gCisJCWVjaG8gLW4gIj4+IEtpbGxpbmcgSkJvc3MgU2VydmVyIHByb2Nl c3MgKCR7UElEfSkuLi4iCisJCS9iaW4va2lsbCAke1BJRH0gPiAvZGV2L251bGwgMj4gL2Rldi9u dWxsCisJCWlmIFsgJD8gLWVxIDAgXTsgdGhlbgorCQkJZWNobyAiIFsgRE9ORSBdIgorCQllbHNl CisJCQllY2hvICIgWyBGQUlMRUQgXSIKKwkJZmkKKwkJZWNobyAtbiAiPj4gUmVtb3ZpbmcgUElE IGZpbGUgKCR7UElEX0ZJTEV9KS4uLiIKKwkJcm0gJHtQSURfRklMRX0gPiAvZGV2L251bGwgMj4g L2Rldi9udWxsCisJCWlmIFsgJD8gLWVxIDAgXTsgdGhlbgorCQkJZWNobyAiIFsgRE9ORSBdIgor CQllbHNlCisJCQllY2hvICIgWyBGQUlMRUQgXSIKKwkJZmkKKwlmaQorZmkKKworZXhpdCAwCklu ZGV4OiBmaWxlcy9wa2ctaW5zdGFsbC5pbgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiBmaWxlcy9wa2ct aW5zdGFsbC5pbgpkaWZmIC1OIGZpbGVzL3BrZy1pbnN0YWxsLmluCi0tLSAvZGV2L251bGwJMSBK YW4gMTk3MCAwMDowMDowMCAtMDAwMAorKysgZmlsZXMvcGtnLWluc3RhbGwuaW4JMjYgQXByIDIw MDIgMjE6NTQ6MTUgLTAwMDAKQEAgLTAsMCArMSw0NiBAQAorIyEvYmluL3NoCisjCisjIENoZWNr cyBpZiB0aGUgJ3d3dycgdXNlciBhbmQgZ3JvdXAgZXhpc3QuIElmIHRoZXkgZG9uJ3QsIHRoZW4K KyMgYW4gYXR0ZW1wdCBpcyBtYWRlIHRvIGNyZWF0ZSBib3RoLgorIworIyAkRnJlZUJTRDogcG9y dHMvamF2YS9qYm9zczMvcGtnLWluc3RhbGwsdiAxLjEgMjAwMi8wNC8yNiAyMTo1NDoxNSB6bmVy ZCBFeHAgJAorIworCisjIE1ha2Ugc3VyZSB3ZSdyZSBjYWxsZWQgZHVyaW5nIHRoZSAnbWFrZSBp bnN0YWxsJyBwcm9jZXNzCitpZiBbICIkMiIgIT0gIlBSRS1JTlNUQUxMIiBdOyB0aGVuCisgICAg ZXhpdCAwCitmaQorCisjIFNldCBzb21lIGNvbnN0YW50cworVVNFUj13d3cKK0dST1VQPSR7VVNF Un0KK1VJRD04MAorR0lEPSR7VUlEfQorCisjIFNlZSBpZiB0aGUgZ3JvdXAgYWxyZWFkeSBleGlz dHMKK2lmICEgcHcgZ3JvdXBzaG93ICIke0dST1VQfSIgMj4vZGV2L251bGwgMT4mMjsgdGhlbgor CisJIyBJZiBub3QsIHRyeSB0byBjcmVhdGUgaXQKKwlpZiBwdyBncm91cGFkZCAke0dST1VQfSAt ZyAke0dJRH07IHRoZW4KKwkJZWNobyAiQWRkZWQgZ3JvdXAgXCIke0dST1VQfVwiLiIKKwllbHNl CisJCWVjaG8gIkFkZGluZyBncm91cCBcIiR7R1JPVVB9XCIgZmFpbGVkLi4uIgorCQlleGl0IDEK KwlmaQorZmkKKworIyBTZWUgaWYgdGhlIHVzZXIgYWxyZWFkeSBleGlzdHMKK2lmICEgcHcgdXNl cnNob3cgIiR7VVNFUn0iIDI+L2Rldi9udWxsIDE+JjI7IHRoZW4KKworCSMgSWYgbm90LCB0cnkg dG8gY3JlYXRlIGl0CisJaWYgcHcgdXNlcmFkZCAke1VTRVJ9IC11ICR7VUlEfSAtZyAke0dST1VQ fSAtaCAtIFwKKwkJLXMgIi9zYmluL25vbG9naW4iIC1kICIvbm9uZXhpc3RlbnQiIFwKKwkJLWMg IldvcmxkIFdpZGUgV2ViIE93bmVyIjsgXAorCXRoZW4KKwkJZWNobyAiQWRkZWQgdXNlciBcIiR7 VVNFUn1cIi4iCisJZWxzZQorCQllY2hvICJBZGRpbmcgdXNlciBcIiR7VVNFUn1cIiBmYWlsZWQu Li4iCisJCWV4aXQgMQorCWZpCitmaQorZXhpdCAwCkluZGV4OiBmaWxlcy9wa2ctbWVzc2FnZQo9 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09ClJDUyBmaWxlOiBmaWxlcy9wa2ctbWVzc2FnZQpkaWZmIC1OIGZpbGVzL3BrZy1t ZXNzYWdlCi0tLSBmaWxlcy9wa2ctbWVzc2FnZQkxMyBKYW4gMjAwNSAwMTo1NToxMyAtMDAwMAkx LjEKKysrIC9kZXYvbnVsbAkxIEphbiAxOTcwIDAwOjAwOjAwIC0wMDAwCkBAIC0xLDcgKzAsMCBA QAotJSVQS0dOQU1FJSUgaGFzIGJlZW4gaW5zdGFsbGVkIGluICUlQVBQX0hPTUUlJS4KLQotSWYg YSB1c2VyIHNob3VsZCBiZSBhYmxlIHRvIHVzZSAlJUNPTlRST0xfU0NSSVBUX05BTUUlJSwgcHV0 IGl0IGluIHRoZSBncm91cCAnJSVHUk9VUCUlJy4KLQotVXNlICdtYW4gJSVDT05UUk9MX1NDUklQ VF9OQU1FJSUnIGZvciBpbmZvcm1hdGlvbiBhYm91dCBzdGFydGluZyBhbmQgc3RvcHBpbmcgJSVB UFBfVElUTEUlJS4KLQotVG8gcnVuIHRoZSAlJUFQUF9USVRMRSUlIHNlcnZlciBmcm9tIHN0YXJ0 dXAsIGFkZCAlJUFQUF9TSE9SVE5BTUUlJV9lbmFibGU9IllFUyIgaW4geW91ciAvZXRjL3JjLmNv bmYuIEV4dHJhIG9wdGlvbnMgY2FuIGJlIGZvdW5kIGluIHRoZSBzdGFydHVwIHNjcmlwdC4KSW5k ZXg6IGZpbGVzL3BrZy1tZXNzYWdlLmluCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IGZpbGVzL3BrZy1t ZXNzYWdlLmluCmRpZmYgLU4gZmlsZXMvcGtnLW1lc3NhZ2UuaW4KLS0tIC9kZXYvbnVsbAkxIEph biAxOTcwIDAwOjAwOjAwIC0wMDAwCisrKyBmaWxlcy9wa2ctbWVzc2FnZS5pbgkxMyBKYW4gMjAw NSAwMTo1NToxMyAtMDAwMApAQCAtMCwwICsxLDcgQEAKKyUlUEtHTkFNRSUlIGhhcyBiZWVuIGlu c3RhbGxlZCBpbiAlJUFQUF9IT01FJSUuCisKK0lmIGEgdXNlciBzaG91bGQgYmUgYWJsZSB0byB1 c2UgJSVDT05UUk9MX1NDUklQVF9OQU1FJSUsIHB1dCBpdCBpbiB0aGUgZ3JvdXAgJyUlR1JPVVAl JScuCisKK1VzZSAnbWFuICUlQ09OVFJPTF9TQ1JJUFRfTkFNRSUlJyBmb3IgaW5mb3JtYXRpb24g YWJvdXQgc3RhcnRpbmcgYW5kIHN0b3BwaW5nICUlQVBQX1RJVExFJSUuCisKK1RvIHJ1biB0aGUg JSVBUFBfVElUTEUlJSBzZXJ2ZXIgZnJvbSBzdGFydHVwLCBhZGQgJSVBUFBfU0hPUlROQU1FJSVf ZW5hYmxlPSJZRVMiIGluIHlvdXIgL2V0Yy9yYy5jb25mLiBFeHRyYSBvcHRpb25zIGNhbiBiZSBm b3VuZCBpbiB0aGUgc3RhcnR1cCBzY3JpcHQuCkluZGV4OiBmaWxlcy9zdGFydHVwLnNoCj09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT0KUkNTIGZpbGU6IGZpbGVzL3N0YXJ0dXAuc2gKZGlmZiAtTiBmaWxlcy9zdGFydHVwLnNo Ci0tLSBmaWxlcy9zdGFydHVwLnNoCTEzIEphbiAyMDA1IDAxOjU1OjEzIC0wMDAwCTEuMgorKysg L2Rldi9udWxsCTEgSmFuIDE5NzAgMDA6MDA6MDAgLTAwMDAKQEAgLTEsNTggKzAsMCBAQAotIyEv YmluL3NoCi0jCi0jICUlQVBQX1RJVExFJSUgc3RhcnR1cCBzY3JpcHQuCi0jCi0jICRGcmVlQlNE OiBwb3J0cy9qYXZhL2pib3NzMy9maWxlcy9zdGFydHVwLnNoLHYgMS4yIDIwMDUvMDEvMTMgMDE6 NTU6MTMgaHEgRXhwICQKLSMKLQotIyBQUk9WSURFOiAlJUFQUF9TSE9SVE5BTUUlJQotIyBSRVFV SVJFOiBORVRXT1JLSU5HIFNFUlZFUlMKLQotIyBBZGQgdGhlIGZvbGxvd2luZyBsaW5lcyB0byAv ZXRjL3JjLmNvbmYgdG8gZW5hYmxlICUlQVBQX1NIT1JUTkFNRSUlOgotIyAlJUFQUF9TSE9SVE5B TUUlJV9lbmFibGUgKGJvb2wpOgkJU2V0IHRvICJOTyIgYnkgZGVmYXVsdC4KLSMJCQkJU2V0IGl0 IHRvICJZRVMiIHRvIGVuYWJsZSAlJUFQUF9TSE9SVE5BTUUlJQotIyAlJUFQUF9TSE9SVE5BTUUl JV9mbGFncyAoc3RyKToJCVNldCB0byAiLXNlcnZlciIgYnkgZGVmYXVsdC4KLSMJCQkJRXh0cmEg SlZNIGZsYWdzLgotIyAlJUFQUF9TSE9SVE5BTUUlJV9jb25maWcgKHN0cik6CQlTZXQgdG8gIiIg YnkgZGVmYXVsdAotIwkJCQlKQm9zcyBzZXJ2ZXIgY29uZmlnLCBlZyB7YWxsfGRlZmF1bHR8bWlu aW1hbHxzdGFuZGFyZH0KLSMKLS4gJSVSQ19TVUJSJSUKLQotbmFtZT0iJSVBUFBfU0hPUlROQU1F JSUiCi1yY3Zhcj1gc2V0X3JjdmFyYAotCi1zdGFydF9jbWQ9IiUlQVBQX1NIT1JUTkFNRSUlX3N0 YXJ0IgotcmVzdGFydF9jbWQ9IiUlQVBQX1NIT1JUTkFNRSUlX3Jlc3RhcnQiCi1waWRmaWxlPSIl JVBJRF9GSUxFJSUiCi1wcm9jbmFtZT0iJSVKQVZBJSUiCi0KLVsgLXogIiQlJUFQUF9TSE9SVE5B TUUlJV9lbmFibGUiIF0JJiYgJSVBUFBfU0hPUlROQU1FJSVfZW5hYmxlPSJOTyIKLVsgLXogIiQl JUFQUF9TSE9SVE5BTUUlJV9mbGFncyIgXQkmJiAlJUFQUF9TSE9SVE5BTUUlJV9mbGFncz0iLXNl cnZlciIKLVsgLXogIiQlJUFQUF9TSE9SVE5BTUUlJV9jb25maWciIF0JJiYgJSVBUFBfU0hPUlRO QU1FJSVfY29uZmlnPSIiCi0KLSUlQVBQX1NIT1JUTkFNRSUlX3N0YXJ0ICgpCi17Ci0JY2hlY2t5 ZXNubyAlJUFQUF9TSE9SVE5BTUUlJV9lbmFibGUgJiYKLQl7Ci0JCWlmIFsgISAtZiAke3BpZGZp bGV9IF0KLQkJdGhlbgotCQkJdG91Y2ggJHtwaWRmaWxlfQotCQkJY2hvd24gJSVVU0VSJSU6JSVH Uk9VUCUlICR7cGlkZmlsZX0KLQkJZmkKLQotCQklJUNPTlRST0xfU0NSSVBUJSUgLXEgJHslJUFQ UF9TSE9SVE5BTUUlJV9mbGFnc30gJHslJUFQUF9TSE9SVE5BTUUlJV9jb25maWdmbGFnfSAkeyUl QVBQX1NIT1JUTkFNRSUlX2NvbmZpZ30gc3RhcnQgJiYKLQkJZWNobyAtbiAiICUlQVBQX1NIT1JU TkFNRSUlIgotCX0KLX0KLQotJSVBUFBfU0hPUlROQU1FJSVfcmVzdGFydCAoKQotewotCWNoZWNr eWVzbm8gJSVBUFBfU0hPUlROQU1FJSVfZW5hYmxlICYmCi0JCSUlQ09OVFJPTF9TQ1JJUFQlJSAt cSAkeyUlQVBQX1NIT1JUTkFNRSUlX2ZsYWdzfSAkeyUlQVBQX1NIT1JUTkFNRSUlX2NvbmZpZ2Zs YWd9ICR7JSVBUFBfU0hPUlROQU1FJSVfY29uZmlnfSByZXN0YXJ0Ci19Ci0KLWxvYWRfcmNfY29u ZmlnICRuYW1lCi0KLVsgLW4gIiR7JSVBUFBfU0hPUlROQU1FJSVfY29uZmlnfSIgXSAmJiAlJUFQ UF9TSE9SVE5BTUUlJV9jb25maWdmbGFnPSItY29uZmlnIgotCi1ydW5fcmNfY29tbWFuZCAiJDEi Cg== ------=_Part_225893_17557009.1174837310764--