From mboxrd@z Thu Jan 1 00:00:00 1970 From: Ronald Rojas Subject: [PATCH RFC v3 5/8] golang/xenlight: Add tests host related functionality functions Date: Thu, 9 Mar 2017 13:56:54 -0500 Message-ID: <1489085817-11483-5-git-send-email-ronladred@gmail.com> References: <1489085817-11483-1-git-send-email-ronladred@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1489085817-11483-1-git-send-email-ronladred@gmail.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" Cc: Ronald Rojas , wei.liu2@citrix.com, ian.jackson@eu.citrix.com, George Dunlap , xen-devel@lists.xen.org List-Id: xen-devel@lists.xenproject.org Q3JlYXRlIHRlc3RzIGZvciB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uczoKLSBHZXRWZXJzaW9uSW5m bwotIEdldFBoeXNpbmZvCi0gR2V0RG9taW5mbwotIEdldE1heENwdXMKLSBHZXRPbmxpbmVDcHVz Ci0gR2V0TWF4Tm9kZXMKLSBHZXRGcmVlTWVtb3J5CgpTaWduZWQtb2ZmLWJ5OiBSb25hbGQgUm9q YXMgPHJvbmxhZHJlZEBnbWFpbC5jb20+ClNpZ25lZC1vZmYtYnk6IEdlb3JnZSBEdW5sYXAgPGdl b3JnZS5kdW5sYXBAY2l0cml4LmNvbT4KCi0tLQpjaGFuZ2VzIHNpbmNlIGxhc3QgdmVyc2lvbgoK LSBjcmVhdGVkIENGTEFHUyBhbmQgTERMSUJTIHZhcmlhYmxlcyB0byBidWlsZCB0ZXN0IEMKZmls ZXMgd2l0aCByZXF1aXJlZCBkZXBlbmRlbmNpZXMuCgotIGNyZWF0ZWQgY3JlYXRlX2NvbnRleHQg YW5kIGRlc3Ryb3lfY29udGV4dCBmdW5jdGlvbgpmb3IgdGVzdHMgdG8gY3JlYXRlL2Rlc3Ryb3kg bGlieGxfY3R4IGFuZCB4ZW5sb2dnZXIKCi0gRm9ybWF0aW5nIGNoYW5nZXMKCi0gUmVtb3ZlZCBz dGFsZSBjb21tZW50cwoKLSBSZW1vdmVkIHJlZHVuZGFudCBlcnJvciBjaGVja3MgaW4gR29sYW5n IHRlc3RzCgpDQzogeGVuLWRldmVsQGxpc3RzLnhlbi5vcmcKQ0M6IGdlb3JnZS5kdW5sYXBAY2l0 cml4LmNvbQpDQzogaWFuLmphY2tzb25AZXUuY2l0cml4LmNvbQpDQzogd2VpLmxpdTJAY2l0cml4 LmNvbQotLS0KLS0tCiB0b29scy9nb2xhbmcveGVubGlnaHQvdGVzdC94ZW5pbmZvL01ha2VmaWxl ICAgICAgIHwgNDEgKysrKysrKysrKysrKysrKysrKysrKysKIHRvb2xzL2dvbGFuZy94ZW5saWdo dC90ZXN0L3hlbmluZm8vZG9taW5mby5jICAgICAgfCAzMyArKysrKysrKysrKysrKysrKysKIHRv b2xzL2dvbGFuZy94ZW5saWdodC90ZXN0L3hlbmluZm8vZG9taW5mby5nbyAgICAgfCAzMSArKysr KysrKysrKysrKysrKwogdG9vbHMvZ29sYW5nL3hlbmxpZ2h0L3Rlc3QveGVuaW5mby9mcmVlbWVt b3J5LmMgICB8IDI2ICsrKysrKysrKysrKysrCiB0b29scy9nb2xhbmcveGVubGlnaHQvdGVzdC94 ZW5pbmZvL2ZyZWVtZW1vcnkuZ28gIHwgMjUgKysrKysrKysrKysrKysKIHRvb2xzL2dvbGFuZy94 ZW5saWdodC90ZXN0L3hlbmluZm8vbWF4Y3B1LmMgICAgICAgfCAxOCArKysrKysrKysrCiB0b29s cy9nb2xhbmcveGVubGlnaHQvdGVzdC94ZW5pbmZvL21heGNwdS5nbyAgICAgIHwgMjQgKysrKysr KysrKysrKwogdG9vbHMvZ29sYW5nL3hlbmxpZ2h0L3Rlc3QveGVuaW5mby9tYXhub2Rlcy5jICAg ICB8IDE1ICsrKysrKysrKwogdG9vbHMvZ29sYW5nL3hlbmxpZ2h0L3Rlc3QveGVuaW5mby9tYXhu b2Rlcy5nbyAgICB8IDI0ICsrKysrKysrKysrKysKIHRvb2xzL2dvbGFuZy94ZW5saWdodC90ZXN0 L3hlbmluZm8vb25saW5lY3B1LmMgICAgfCAxOCArKysrKysrKysrCiB0b29scy9nb2xhbmcveGVu bGlnaHQvdGVzdC94ZW5pbmZvL29ubGluZWNwdS5nbyAgIHwgMjQgKysrKysrKysrKysrKwogdG9v bHMvZ29sYW5nL3hlbmxpZ2h0L3Rlc3QveGVuaW5mby9waHlzaW5mby5jICAgICB8IDMyICsrKysr KysrKysrKysrKysrKwogdG9vbHMvZ29sYW5nL3hlbmxpZ2h0L3Rlc3QveGVuaW5mby9waHlzaW5m by5nbyAgICB8IDMyICsrKysrKysrKysrKysrKysrKwogdG9vbHMvZ29sYW5nL3hlbmxpZ2h0L3Rl c3QveGVuaW5mby9wcmludC5oICAgICAgICB8IDIyICsrKysrKysrKysrKwogdG9vbHMvZ29sYW5n L3hlbmxpZ2h0L3Rlc3QveGVuaW5mby92ZXJzaW9uaW5mby5jICB8IDIyICsrKysrKysrKysrKwog dG9vbHMvZ29sYW5nL3hlbmxpZ2h0L3Rlc3QveGVuaW5mby92ZXJzaW9uaW5mby5nbyB8IDI4ICsr KysrKysrKysrKysrKysKIHRvb2xzL2dvbGFuZy94ZW5saWdodC90ZXN0L3hlbmluZm8veGVubGln aHQuZ28gICAgfCAgMSArCiAxNyBmaWxlcyBjaGFuZ2VkLCA0MTYgaW5zZXJ0aW9ucygrKQogY3Jl YXRlIG1vZGUgMTAwNjQ0IHRvb2xzL2dvbGFuZy94ZW5saWdodC90ZXN0L3hlbmluZm8vTWFrZWZp bGUKIGNyZWF0ZSBtb2RlIDEwMDY0NCB0b29scy9nb2xhbmcveGVubGlnaHQvdGVzdC94ZW5pbmZv L2RvbWluZm8uYwogY3JlYXRlIG1vZGUgMTAwNjQ0IHRvb2xzL2dvbGFuZy94ZW5saWdodC90ZXN0 L3hlbmluZm8vZG9taW5mby5nbwogY3JlYXRlIG1vZGUgMTAwNjQ0IHRvb2xzL2dvbGFuZy94ZW5s aWdodC90ZXN0L3hlbmluZm8vZnJlZW1lbW9yeS5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgdG9vbHMv Z29sYW5nL3hlbmxpZ2h0L3Rlc3QveGVuaW5mby9mcmVlbWVtb3J5LmdvCiBjcmVhdGUgbW9kZSAx MDA2NDQgdG9vbHMvZ29sYW5nL3hlbmxpZ2h0L3Rlc3QveGVuaW5mby9tYXhjcHUuYwogY3JlYXRl IG1vZGUgMTAwNjQ0IHRvb2xzL2dvbGFuZy94ZW5saWdodC90ZXN0L3hlbmluZm8vbWF4Y3B1Lmdv CiBjcmVhdGUgbW9kZSAxMDA2NDQgdG9vbHMvZ29sYW5nL3hlbmxpZ2h0L3Rlc3QveGVuaW5mby9t YXhub2Rlcy5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgdG9vbHMvZ29sYW5nL3hlbmxpZ2h0L3Rlc3Qv eGVuaW5mby9tYXhub2Rlcy5nbwogY3JlYXRlIG1vZGUgMTAwNjQ0IHRvb2xzL2dvbGFuZy94ZW5s aWdodC90ZXN0L3hlbmluZm8vb25saW5lY3B1LmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCB0b29scy9n b2xhbmcveGVubGlnaHQvdGVzdC94ZW5pbmZvL29ubGluZWNwdS5nbwogY3JlYXRlIG1vZGUgMTAw NjQ0IHRvb2xzL2dvbGFuZy94ZW5saWdodC90ZXN0L3hlbmluZm8vcGh5c2luZm8uYwogY3JlYXRl IG1vZGUgMTAwNjQ0IHRvb2xzL2dvbGFuZy94ZW5saWdodC90ZXN0L3hlbmluZm8vcGh5c2luZm8u Z28KIGNyZWF0ZSBtb2RlIDEwMDY0NCB0b29scy9nb2xhbmcveGVubGlnaHQvdGVzdC94ZW5pbmZv L3ByaW50LmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCB0b29scy9nb2xhbmcveGVubGlnaHQvdGVzdC94 ZW5pbmZvL3ZlcnNpb25pbmZvLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCB0b29scy9nb2xhbmcveGVu bGlnaHQvdGVzdC94ZW5pbmZvL3ZlcnNpb25pbmZvLmdvCiBjcmVhdGUgbW9kZSAxMjAwMDAgdG9v bHMvZ29sYW5nL3hlbmxpZ2h0L3Rlc3QveGVuaW5mby94ZW5saWdodC5nbwoKZGlmZiAtLWdpdCBh L3Rvb2xzL2dvbGFuZy94ZW5saWdodC90ZXN0L3hlbmluZm8vTWFrZWZpbGUgYi90b29scy9nb2xh bmcveGVubGlnaHQvdGVzdC94ZW5pbmZvL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu ZGV4IDAwMDAwMDAuLmFhZTU1NDQKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9nb2xhbmcveGVu bGlnaHQvdGVzdC94ZW5pbmZvL01ha2VmaWxlCkBAIC0wLDAgKzEsNDEgQEAKK1hFTl9ST09UID0g JChDVVJESVIpLy4uLy4uLy4uLy4uLy4uCitpbmNsdWRlICQoWEVOX1JPT1QpL3Rvb2xzL1J1bGVz Lm1rCisKK0dPID89IGdvCisKK1RFU1RTID0gZG9taW5mbyBmcmVlbWVtb3J5IG1heGNwdSBvbmxp bmVjcHUgcGh5c2luZm8gdmVyc2lvbmluZm8KK0NCSU5BUklFUyA9ICQoVEVTVFM6JT0lLWMpCitH T0JJTkFSSUVTID0gJChURVNUUzolPSUtZ28pCisKK0NGTEFHUyArPSAtV2Vycm9yCitDRkxBR1Mg Kz0gJChDRkxBR1NfbGlieGVudG9vbGxvZykKK0NGTEFHUyArPSAkKENGTEFHU19saWJ4ZW5saWdo dCkKKworTERMSUJTICs9ICQoTERMSUJTX2xpYnhlbnRvb2xsb2cpCitMRExJQlMgKz0gJChMRExJ QlNfbGlieGVubGlnaHQpCisKK2FsbDogYnVpbGQKKwordGVzdDogY2xlYW4gYnVpbGQKKwlmb3Ig dGVzdCBpbiAkKFRFU1RTKSA7IGRvIFwKKwkJLi8kJHRlc3QtYyA+PiBjLm91dHB1dCA7IFwKKwkg ICAgICAgIC4vJCR0ZXN0LWdvID4+IGdvLm91dHB1dCA7IFwKKwkJaWYgY21wIC1zICJjLm91dHB1 dCIgImdvLm91dHB1dCI7IHRoZW5cCisJCQllY2hvICIkJHRlc3QgUEFTU0VEIjtcCisJCWVsc2Ug XAorCQkJZWNobyAiJCR0ZXN0IEZBSUxFRCI7XAorCQlmaSA7IFwKKwlkb25lCisKK2J1aWxkOiAk KENCSU5BUklFUykgJChHT0JJTkFSSUVTKQorCislLWM6ICUuYworCWdjYyAkKENGTEFHUykgLW8g JEAgJDwgJChMRExJQlMpCisKKyUtZ286ICUuZ28KKwlHT1BBVEg9JChYRU5fUk9PVCkvdG9vbHMv Z29sYW5nICQoR08pIGJ1aWxkIC1vICRAICQ8CisKK2NsZWFuOgorCXJtIC1mICotYworCXJtIC1m ICotZ28KKwlybSAtZiAqLm91dHB1dApkaWZmIC0tZ2l0IGEvdG9vbHMvZ29sYW5nL3hlbmxpZ2h0 L3Rlc3QveGVuaW5mby9kb21pbmZvLmMgYi90b29scy9nb2xhbmcveGVubGlnaHQvdGVzdC94ZW5p bmZvL2RvbWluZm8uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzYzNTgz Ci0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvZ29sYW5nL3hlbmxpZ2h0L3Rlc3QveGVuaW5mby9k b21pbmZvLmMKQEAgLTAsMCArMSwzMyBAQAorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8 c3RkbGliLmg+CisjaW5jbHVkZSA8bGlieGwuaD4KKyNpbmNsdWRlICJwcmludC5oIgorCitpbnQg bWFpbih2b2lkKXsKKworICAgIGxpYnhsX2N0eCAqY29udGV4dDsKKyAgICBsaWJ4bF9kb21pbmZv IGluZm87CisgICAgaW50IGVycjsKKyAgICBsb25nIGNwdV90aW1lOworICAgIGNvbnRleHQgPSBj cmVhdGVfY29udGV4dCgpOworICAgIGxpYnhsX2RvbWluZm9faW5pdCgmaW5mbyk7CisgICAgZXJy ID0gbGlieGxfZG9tYWluX2luZm8oY29udGV4dCwgJmluZm8sIDApOworICAgIGlmIChlcnIgIT0g MCkKKyAgICAgICAgcmV0dXJuIGVycjsKKyAgICAKKyAgICBwcmludGYoIiVkXG4lZFxuIiwgaW5m by5kb21pZCwgaW5mby5zc2lkcmVmKTsKKyAgICBwcmludGYoIiVzXG4lc1xuJXNcbiVzXG4lc1xu JXNcbiIsIGJvb2xfdG9fc3RyaW5nKGluZm8ucnVubmluZyksIAorICAgICAgICAgICAgYm9vbF90 b19zdHJpbmcoaW5mby5ibG9ja2VkKSwgYm9vbF90b19zdHJpbmcoaW5mby5wYXVzZWQpLAorICAg ICAgICAgICAgYm9vbF90b19zdHJpbmcoaW5mby5zaHV0ZG93biksIGJvb2xfdG9fc3RyaW5nKGlu Zm8uZHlpbmcpLCAKKyAgICAgICAgICAgIGJvb2xfdG9fc3RyaW5nKGluZm8ubmV2ZXJfc3RvcCkp OworICAgIGNwdV90aW1lID0gaW5mby5jcHVfdGltZSAvICgobG9uZykgMTw8MzUpOworICAgIHBy aW50ZigiJWRcbiVsdVxuJWx1XG4lbHVcbiVsdVxuJWx1XG4lbHVcbiVkXG4lZFxuJWRcbiIsCisg ICAgICAgICAgICBpbmZvLnNodXRkb3duX3JlYXNvbiwgCisgICAgICAgICAgICBpbmZvLm91dHN0 YW5kaW5nX21lbWtiLCBpbmZvLmN1cnJlbnRfbWVta2IsIGluZm8uc2hhcmVkX21lbWtiLCAKKyAg ICAgICAgICAgIGluZm8ucGFnZWRfbWVta2IsIGluZm8ubWF4X21lbWtiLCBjcHVfdGltZSwgaW5m by52Y3B1X21heF9pZCwgCisgICAgICAgICAgICBpbmZvLnZjcHVfb25saW5lLCBpbmZvLmNwdXBv b2wpOworICAgIHByaW50ZigiJWRcbiIsIGluZm8uZG9tYWluX3R5cGUpOworCisgICAgZGVzdHJv eV9jb250ZXh0KGNvbnRleHQpOworCit9CmRpZmYgLS1naXQgYS90b29scy9nb2xhbmcveGVubGln aHQvdGVzdC94ZW5pbmZvL2RvbWluZm8uZ28gYi90b29scy9nb2xhbmcveGVubGlnaHQvdGVzdC94 ZW5pbmZvL2RvbWluZm8uZ28KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmI5 MjU3YgotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL2dvbGFuZy94ZW5saWdodC90ZXN0L3hlbmlu Zm8vZG9taW5mby5nbwpAQCAtMCwwICsxLDMxIEBACitwYWNrYWdlIG1haW4KKworaW1wb3J0ICgK KwkiZm10IgorCSJvcyIKKwkieGVucHJvamVjdC5vcmcveGVubGlnaHQiCispCisKK2Z1bmMgbWFp bigpIHsKKwljdHggOj0geGVubGlnaHQuQ3R4CisJZXJyIDo9IGN0eC5PcGVuKCkKKwlpZiBlcnIg IT0gbmlsIHsKKwkJb3MuRXhpdCgtMSkKKwl9CisJZGVmZXIgY3R4LkNsb3NlKCkKKwlpbmZvLCBl cnIgOj0gY3R4LkRvbWFpbkluZm8oMCkKKwlpZiBlcnIgIT0gbmlsIHsKKwkJb3MuRXhpdCgtMSkK Kwl9CisKKwlmbXQuUHJpbnRmKCIlZFxuJWRcbiIsIGluZm8uRG9taWQsIGluZm8uU3NpZHJlZikK KwkvL2ZtdC5QcmludGYoIiVzXG4iLCBpbmZvLlNzaWRMYWJlbCkKKwlmbXQuUHJpbnRmKCIldFxu JXRcbiV0XG4ldFxuJXRcbiV0XG4iLCBpbmZvLlJ1bm5pbmcsCisJCWluZm8uQmxvY2tlZCwgaW5m by5QYXVzZWQsIGluZm8uU2h1dGRvd24sIGluZm8uRHlpbmcsIGluZm8uTmV2ZXJTdG9wKQorCWNw dVRpbWUgOj0gaW5mby5DcHVUaW1lIC8gKDEgPDwgMzUpCisJZm10LlByaW50ZigiJWRcbiVkXG4l ZFxuJWRcbiVkXG4lZFxuJWRcbiVkXG4lZFxuJWRcbiIsIGluZm8uU2h1dGRvd25SZWFzb24sIGlu Zm8uT3V0c3RhbmRpbmdNZW1rYiwKKwkJaW5mby5DdXJyZW50TWVta2IsIGluZm8uU2hhcmVkTWVt a2IsIGluZm8uUGFnZWRNZW1rYiwgaW5mby5NYXhNZW1rYiwgY3B1VGltZSwKKwkJaW5mby5WY3B1 TWF4SWQsIGluZm8uVmNwdU9ubGluZSwgaW5mby5DcHVwb29sKQorCWZtdC5QcmludGYoIiVkXG4i LCBpbmZvLkRvbWFpblR5cGUpCisKK30KZGlmZiAtLWdpdCBhL3Rvb2xzL2dvbGFuZy94ZW5saWdo dC90ZXN0L3hlbmluZm8vZnJlZW1lbW9yeS5jIGIvdG9vbHMvZ29sYW5nL3hlbmxpZ2h0L3Rlc3Qv eGVuaW5mby9mcmVlbWVtb3J5LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u MGZjYWExZgotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL2dvbGFuZy94ZW5saWdodC90ZXN0L3hl bmluZm8vZnJlZW1lbW9yeS5jCkBAIC0wLDAgKzEsMjYgQEAKKyNpbmNsdWRlIDxzdGRpby5oPgor I2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPGxpYnhsLmg+CisjaW5jbHVkZSAicHJpbnQu aCIKKworaW50IG1haW4odm9pZCl7CisKKyAgICBsaWJ4bF9jdHggKmNvbnRleHQ7CisgICAgdWlu dDY0X3QgZnJlZV9tZW1vcnk7CisgICAgaW50IGVycjsKKworICAgIGNvbnRleHQgPSBjcmVhdGVf Y29udGV4dCgpOworCisgICAgZXJyID0gbGlieGxfZ2V0X2ZyZWVfbWVtb3J5KGNvbnRleHQsICZm cmVlX21lbW9yeSk7CisgICAgaWYgKGVyciA8IDApCisgICAgeworICAgICAgICBwcmludGYoIiVk XG4iLCBlcnIpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBwcmludGYoIiVsdVxu IiwgZnJlZV9tZW1vcnkpOworICAgIH0KKyAgICBkZXN0cm95X2NvbnRleHQoY29udGV4dCk7CisK K30KKwpkaWZmIC0tZ2l0IGEvdG9vbHMvZ29sYW5nL3hlbmxpZ2h0L3Rlc3QveGVuaW5mby9mcmVl bWVtb3J5LmdvIGIvdG9vbHMvZ29sYW5nL3hlbmxpZ2h0L3Rlc3QveGVuaW5mby9mcmVlbWVtb3J5 LmdvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJmY2FmNTgKLS0tIC9kZXYv bnVsbAorKysgYi90b29scy9nb2xhbmcveGVubGlnaHQvdGVzdC94ZW5pbmZvL2ZyZWVtZW1vcnku Z28KQEAgLTAsMCArMSwyNSBAQAorcGFja2FnZSBtYWluCisKK2ltcG9ydCAoCisJImZtdCIKKwki b3MiCisJInhlbnByb2plY3Qub3JnL3hlbmxpZ2h0IgorKQorCitmdW5jIG1haW4oKSB7CisJY3R4 IDo9IHhlbmxpZ2h0LkN0eAorCWVyciA6PSBjdHguT3BlbigpCisJaWYgZXJyICE9IG5pbCB7CisJ CW9zLkV4aXQoLTEpCisJfQorCisJZGVmZXIgY3R4LkNsb3NlKCkKKworCWZyZWVfbWVtb3J5LCBl cnIgOj0gY3R4LkdldEZyZWVNZW1vcnkoKQorCWlmIGVyciAhPSBuaWwgeworCQlmbXQuUHJpbnRm KCIlZFxuIiwgZXJyKQorCX0gZWxzZSB7CisJCWZtdC5QcmludGYoIiVkXG4iLCBmcmVlX21lbW9y eSkKKwl9CisKK30KZGlmZiAtLWdpdCBhL3Rvb2xzL2dvbGFuZy94ZW5saWdodC90ZXN0L3hlbmlu Zm8vbWF4Y3B1LmMgYi90b29scy9nb2xhbmcveGVubGlnaHQvdGVzdC94ZW5pbmZvL21heGNwdS5j Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE1N2JkYjIKLS0tIC9kZXYvbnVs bAorKysgYi90b29scy9nb2xhbmcveGVubGlnaHQvdGVzdC94ZW5pbmZvL21heGNwdS5jCkBAIC0w LDAgKzEsMTggQEAKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2lu Y2x1ZGUgPGxpYnhsLmg+CisjaW5jbHVkZSAicHJpbnQuaCIKKworaW50IG1haW4odm9pZCl7CisK KyAgICBsaWJ4bF9jdHggKmNvbnRleHQ7CisgICAgaW50IG1heF9jcHVzOworCisgICAgY29udGV4 dCA9IGNyZWF0ZV9jb250ZXh0KCk7CisgICAgbWF4X2NwdXMgPSBsaWJ4bF9nZXRfbWF4X2NwdXMo Y29udGV4dCk7CisgICAgcHJpbnRmKCIlZFxuIiwgbWF4X2NwdXMpOworCisgICAgZGVzdHJveV9j b250ZXh0KGNvbnRleHQpOworCit9CisKZGlmZiAtLWdpdCBhL3Rvb2xzL2dvbGFuZy94ZW5saWdo dC90ZXN0L3hlbmluZm8vbWF4Y3B1LmdvIGIvdG9vbHMvZ29sYW5nL3hlbmxpZ2h0L3Rlc3QveGVu aW5mby9tYXhjcHUuZ28KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTJjZDkz ZAotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL2dvbGFuZy94ZW5saWdodC90ZXN0L3hlbmluZm8v bWF4Y3B1LmdvCkBAIC0wLDAgKzEsMjQgQEAKK3BhY2thZ2UgbWFpbgorCitpbXBvcnQgKAorCSJm bXQiCisJIm9zIgorCSJ4ZW5wcm9qZWN0Lm9yZy94ZW5saWdodCIKKykKKworZnVuYyBtYWluKCkg eworCWN0eCA6PSB4ZW5saWdodC5DdHgKKwllcnIgOj0gY3R4Lk9wZW4oKQorCWlmIGVyciAhPSBu aWwgeworCQlvcy5FeGl0KC0xKQorCX0KKwlkZWZlciBjdHguQ2xvc2UoKQorCisJbWF4X2NwdXMs IGVyciA6PSBjdHguR2V0TWF4Q3B1cygpCisJaWYgZXJyICE9IG5pbCB7CisJCWZtdC5QcmludGYo IiVkXG4iLCBlcnIpCisJfSBlbHNlIHsKKwkJZm10LlByaW50ZigiJWRcbiIsIG1heF9jcHVzKQor CX0KKworfQpkaWZmIC0tZ2l0IGEvdG9vbHMvZ29sYW5nL3hlbmxpZ2h0L3Rlc3QveGVuaW5mby9t YXhub2Rlcy5jIGIvdG9vbHMvZ29sYW5nL3hlbmxpZ2h0L3Rlc3QveGVuaW5mby9tYXhub2Rlcy5j Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUwNzJjM2UKLS0tIC9kZXYvbnVs bAorKysgYi90b29scy9nb2xhbmcveGVubGlnaHQvdGVzdC94ZW5pbmZvL21heG5vZGVzLmMKQEAg LTAsMCArMSwxNSBAQAorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+Cisj aW5jbHVkZSA8bGlieGwuaD4KKworaW50IG1haW4oKXsKKworICAgIGxpYnhsX2N0eCAqY29udGV4 dDsKKyAgICBjb250ZXh0ID0gY3JlYXRlX2NvbnRleHQoKTsKKworICAgIGludCBtYXhfbm9kZXMg PSBsaWJ4bF9nZXRfbWF4X25vZGVzKGNvbnRleHQpOworICAgIHByaW50ZigiJWRcbiIsIG1heF9u b2Rlcyk7CisKKyAgICBkZXN0cm95X2NvbnRleHQoY29udGV4dCk7Cit9CisKZGlmZiAtLWdpdCBh L3Rvb2xzL2dvbGFuZy94ZW5saWdodC90ZXN0L3hlbmluZm8vbWF4bm9kZXMuZ28gYi90b29scy9n b2xhbmcveGVubGlnaHQvdGVzdC94ZW5pbmZvL21heG5vZGVzLmdvCm5ldyBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDAwMDAwMDAuLmRhOWI0OTUKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9nb2xh bmcveGVubGlnaHQvdGVzdC94ZW5pbmZvL21heG5vZGVzLmdvCkBAIC0wLDAgKzEsMjQgQEAKK3Bh Y2thZ2UgbWFpbgorCitpbXBvcnQgKAorCSJmbXQiCisJIm9zIgorCSJ4ZW5wcm9qZWN0Lm9yZy94 ZW5saWdodCIKKykKKworZnVuYyBtYWluKCkgeworCWN0eCA6PSB4ZW5saWdodC5DdHgKKwllcnIg Oj0gY3R4Lk9wZW4oKQorCWlmIGVyciAhPSBuaWwgeworCQlvcy5FeGl0KC0xKQorCX0KKwlkZWZl ciBjdHguQ2xvc2UoKQorCisJbWF4X25vZGVzLCBlcnIgOj0gY3R4LkdldE1heE5vZGVzKCkKKwlp ZiBlcnIgIT0gbmlsIHsKKwkJZm10LlByaW50ZigiJWRcbiIsIGVycikKKwl9IGVsc2UgeworCQlm bXQuUHJpbnRmKCIlZFxuIiwgbWF4X25vZGVzKQorCX0KKworfQpkaWZmIC0tZ2l0IGEvdG9vbHMv Z29sYW5nL3hlbmxpZ2h0L3Rlc3QveGVuaW5mby9vbmxpbmVjcHUuYyBiL3Rvb2xzL2dvbGFuZy94 ZW5saWdodC90ZXN0L3hlbmluZm8vb25saW5lY3B1LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k ZXggMDAwMDAwMC4uNDY5MzlkNgotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL2dvbGFuZy94ZW5s aWdodC90ZXN0L3hlbmluZm8vb25saW5lY3B1LmMKQEAgLTAsMCArMSwxOCBAQAorI2luY2x1ZGUg PHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8bGlieGwuaD4KKyNpbmNs dWRlICJwcmludC5oIgorCitpbnQgbWFpbih2b2lkKXsKKworICAgIGxpYnhsX2N0eCAqY29udGV4 dDsKKyAgICBpbnQgb25saW5lX2NwdXM7CisgICAgY29udGV4dCA9IGNyZWF0ZV9jb250ZXh0KCk7 CisKKyAgICBvbmxpbmVfY3B1cyA9IGxpYnhsX2dldF9vbmxpbmVfY3B1cyhjb250ZXh0KTsKKyAg ICBwcmludGYoIiVkXG4iLCBvbmxpbmVfY3B1cyk7CisKKyAgICBkZXN0cm95X2NvbnRleHQoY29u dGV4dCk7CisKK30KKwpkaWZmIC0tZ2l0IGEvdG9vbHMvZ29sYW5nL3hlbmxpZ2h0L3Rlc3QveGVu aW5mby9vbmxpbmVjcHUuZ28gYi90b29scy9nb2xhbmcveGVubGlnaHQvdGVzdC94ZW5pbmZvL29u bGluZWNwdS5nbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNmQxZGE3Ci0t LSAvZGV2L251bGwKKysrIGIvdG9vbHMvZ29sYW5nL3hlbmxpZ2h0L3Rlc3QveGVuaW5mby9vbmxp bmVjcHUuZ28KQEAgLTAsMCArMSwyNCBAQAorcGFja2FnZSBtYWluCisKK2ltcG9ydCAoCisJImZt dCIKKwkib3MiCisJInhlbnByb2plY3Qub3JnL3hlbmxpZ2h0IgorKQorCitmdW5jIG1haW4oKSB7 CisJY3R4IDo9IHhlbmxpZ2h0LkN0eAorCWVyciA6PSBjdHguT3BlbigpCisJaWYgZXJyICE9IG5p bCB7CisJCW9zLkV4aXQoLTEpCisJfQorCWRlZmVyIGN0eC5DbG9zZSgpCisKKwlvbmxpbmVfY3B1 cywgZXJyIDo9IGN0eC5HZXRPbmxpbmVDcHVzKCkKKwlpZiBlcnIgIT0gbmlsIHsKKwkJZm10LlBy aW50ZigiJWRcbiIsIGVycikKKwl9IGVsc2UgeworCQlmbXQuUHJpbnRmKCIlZFxuIiwgb25saW5l X2NwdXMpCisJfQorCit9CmRpZmYgLS1naXQgYS90b29scy9nb2xhbmcveGVubGlnaHQvdGVzdC94 ZW5pbmZvL3BoeXNpbmZvLmMgYi90b29scy9nb2xhbmcveGVubGlnaHQvdGVzdC94ZW5pbmZvL3Bo eXNpbmZvLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTQxYTczMAotLS0g L2Rldi9udWxsCisrKyBiL3Rvb2xzL2dvbGFuZy94ZW5saWdodC90ZXN0L3hlbmluZm8vcGh5c2lu Zm8uYwpAQCAtMCwwICsxLDMyIEBACisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRs aWIuaD4KKyNpbmNsdWRlIDxsaWJ4bC5oPgorI2luY2x1ZGUgInByaW50LmgiCisKK2ludCBtYWlu KHZvaWQpeworCisgICAgbGlieGxfY3R4ICpjb250ZXh0OworICAgIGxpYnhsX3BoeXNpbmZvIGlu Zm87CisgICAgaW50IGVycjsKKyAgICBpbnQgaTsKKyAgICBjb250ZXh0ID0gY3JlYXRlX2NvbnRl eHQoKTsKKyAgICBsaWJ4bF9waHlzaW5mb19pbml0KCZpbmZvKTsKKyAgICBlcnI9IGxpYnhsX2dl dF9waHlzaW5mbyhjb250ZXh0LCZpbmZvKTsKKyAgICBpZihlcnIgIT0gMCl7CisgICAgICAgIHJl dHVybiBlcnI7CisgICAgfQorCisgICAgcHJpbnRmKCIlZFxuJWRcbiVkXG4lZFxuJWRcbiIsIGlu Zm8udGhyZWFkc19wZXJfY29yZSwgaW5mby5jb3Jlc19wZXJfc29ja2V0LCBpbmZvLm1heF9jcHVf aWQsIGluZm8ubnJfY3B1cywgaW5mby5jcHVfa2h6KTsKKyAgICBwcmludGYoIiVsdVxuJWx1XG4l bHVcbiVsdVxuJWx1XG4lbHVcbiIsIGluZm8udG90YWxfcGFnZXMsIGluZm8uZnJlZV9wYWdlcywg aW5mby5zY3J1Yl9wYWdlcywgaW5mby5vdXRzdGFuZGluZ19wYWdlcywgaW5mby5zaGFyaW5nX2Zy ZWVkX3BhZ2VzLCBpbmZvLnNoYXJpbmdfdXNlZF9mcmFtZXMpOworICAgIHByaW50ZigiJXVcbiIs aW5mby5ucl9ub2Rlcyk7CisgICAgcHJpbnRmKCIlc1xuJXNcbiIsIGJvb2xfdG9fc3RyaW5nKGlu Zm8uY2FwX2h2bSksIGJvb2xfdG9fc3RyaW5nKGluZm8uY2FwX2h2bV9kaXJlY3RpbykpOworCisg ICAgZm9yKGkgPSAwOyBpIDwgODsgaSsrKXsKKyAgICAgICAgcHJpbnRmKCIldVxuIiwgaW5mby5o d19jYXBbaV0pOworICAgIH0KKworICAgIGxpYnhsX3BoeXNpbmZvX2luaXQoJmluZm8pOworICAg IGRlc3Ryb3lfY29udGV4dChjb250ZXh0KTsKKworfQorCmRpZmYgLS1naXQgYS90b29scy9nb2xh bmcveGVubGlnaHQvdGVzdC94ZW5pbmZvL3BoeXNpbmZvLmdvIGIvdG9vbHMvZ29sYW5nL3hlbmxp Z2h0L3Rlc3QveGVuaW5mby9waHlzaW5mby5nbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw MDAwMDAwLi5jZjdiZGQ0Ci0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvZ29sYW5nL3hlbmxpZ2h0 L3Rlc3QveGVuaW5mby9waHlzaW5mby5nbwpAQCAtMCwwICsxLDMyIEBACitwYWNrYWdlIG1haW4K KworaW1wb3J0ICgKKwkiZm10IgorCSJvcyIKKwkieGVucHJvamVjdC5vcmcveGVubGlnaHQiCisp CisKK2Z1bmMgbWFpbigpIHsKKwljdHggOj0geGVubGlnaHQuQ3R4CisJZXJyIDo9IGN0eC5PcGVu KCkKKwlpZiBlcnIgIT0gbmlsIHsKKwkJb3MuRXhpdCgtMSkKKwl9CisJZGVmZXIgY3R4LkNsb3Nl KCkKKwlpbmZvLCBlcnIgOj0gY3R4LkdldFBoeXNpbmZvKCkKKwlpZiBlcnIgIT0gbmlsIHsKKwkJ b3MuRXhpdCgtMSkKKwl9CisKKwlmbXQuUHJpbnRmKCIlZFxuJWRcbiVkXG4lZFxuJWRcbiIsIGlu Zm8uVGhyZWFkc1BlckNvcmUsIGluZm8uQ29yZXNQZXJTb2NrZXQsCisJCWluZm8uTWF4Q3B1SWQs IGluZm8uTnJDcHVzLCBpbmZvLkNwdUtoeikKKwlmbXQuUHJpbnRmKCIlZFxuJWRcbiVkXG4lZFxu JWRcbiVkXG4iLCBpbmZvLlRvdGFsUGFnZXMsIGluZm8uRnJlZVBhZ2VzLAorCQlpbmZvLlNjcnVi UGFnZXMsIGluZm8uT3V0c3RhbmRpbmdQYWdlcywgaW5mby5TaGFyaW5nRnJlZWRQYWdlcywKKwkJ aW5mby5TaGFyaW5nVXNlZEZyYW1lcykKKwlmbXQuUHJpbnRmKCIlZFxuIiwgaW5mby5Ock5vZGVz KQorCWZtdC5QcmludGYoIiV0XG4ldFxuIiwgaW5mby5DYXBIdm0sIGluZm8uQ2FwSHZtRGlyZWN0 aW8pCisKKwlmb3IgaSA6PSAwOyBpIDwgODsgaSsrIHsKKwkJZm10LlByaW50ZigiJWRcbiIsIGlu Zm8uSHdDYXBbaV0pCisJfQorfQpkaWZmIC0tZ2l0IGEvdG9vbHMvZ29sYW5nL3hlbmxpZ2h0L3Rl c3QveGVuaW5mby9wcmludC5oIGIvdG9vbHMvZ29sYW5nL3hlbmxpZ2h0L3Rlc3QveGVuaW5mby9w cmludC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRkNmM5ODcKLS0tIC9k ZXYvbnVsbAorKysgYi90b29scy9nb2xhbmcveGVubGlnaHQvdGVzdC94ZW5pbmZvL3ByaW50LmgK QEAgLTAsMCArMSwyMiBAQAoreGVudG9vbGxvZ19sb2dnZXJfc3RkaW9zdHJlYW0gKmxvZ2dlcjsK Kworc3RhdGljIGlubGluZSBjaGFyICpib29sX3RvX3N0cmluZyhib29sIGEpeworICAgIHJldHVy biAoYSA/ICJ0cnVlIiA6ICJmYWxzZSIpOworfQorCitzdGF0aWMgaW5saW5lIGxpYnhsX2N0eCAq Y3JlYXRlX2NvbnRleHQodm9pZCl7CisgICAgbGlieGxfY3R4ICpjb250ZXh0OworICAgIGxvZ2dl ciA9IHh0bF9jcmVhdGVsb2dnZXJfc3RkaW9zdHJlYW0oc3RkZXJyLAorICAgICAgICAgICAgWFRM X0VSUk9SLCAwKTsKKyAgICBsaWJ4bF9jdHhfYWxsb2MoJmNvbnRleHQsIExJQlhMX1ZFUlNJT04s IDAgLCAoeGVudG9vbGxvZ19sb2dnZXIqKWxvZ2dlcik7CisgICAgcmV0dXJuIGNvbnRleHQ7Cit9 CisKK3N0YXRpYyBpbmxpbmUgaW50IGRlc3Ryb3lfY29udGV4dChsaWJ4bF9jdHggKmNvbnRleHQp eworICAgIGludCBlcnIgPSBsaWJ4bF9jdHhfZnJlZShjb250ZXh0KTsKKyAgICBpZiAoZXJyICE9 IDApCisgICAgICAgIHJldHVybiBlcnI7CisgICAgeHRsX2xvZ2dlcl9kZXN0cm95KCh4ZW50b29s bG9nX2xvZ2dlciopbG9nZ2VyKTsKKyAgICByZXR1cm4gZXJyOworCit9CmRpZmYgLS1naXQgYS90 b29scy9nb2xhbmcveGVubGlnaHQvdGVzdC94ZW5pbmZvL3ZlcnNpb25pbmZvLmMgYi90b29scy9n b2xhbmcveGVubGlnaHQvdGVzdC94ZW5pbmZvL3ZlcnNpb25pbmZvLmMKbmV3IGZpbGUgbW9kZSAx MDA2NDQKaW5kZXggMDAwMDAwMC4uMTEzYmNlYQotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL2dv bGFuZy94ZW5saWdodC90ZXN0L3hlbmluZm8vdmVyc2lvbmluZm8uYwpAQCAtMCwwICsxLDIyIEBA CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxsaWJ4 bC5oPgorI2luY2x1ZGUgInByaW50LmgiCisKK2ludCBtYWluKHZvaWQpeworCisgICAgbGlieGxf Y3R4ICpjb250ZXh0OworICAgIGNvbnN0IGxpYnhsX3ZlcnNpb25faW5mbyAqIGluZm87CisgICAg Y29udGV4dCA9IGNyZWF0ZV9jb250ZXh0KCk7CisgICAgaW5mbyA9IGxpYnhsX2dldF92ZXJzaW9u X2luZm8oY29udGV4dCk7CisKKyAgICBwcmludGYoIiVkXG4lZFxuIiwgaW5mby0+eGVuX3ZlcnNp b25fbWFqb3IsIGluZm8tPnhlbl92ZXJzaW9uX21pbm9yKTsKKyAgICBwcmludGYoIiVzXG4lc1xu JXNcbiVzXG4lc1xuJXNcbiVzXG4iLCBpbmZvLT54ZW5fdmVyc2lvbl9leHRyYSwgaW5mby0+Y29t cGlsZXIsIAorCQkgICAgaW5mby0+Y29tcGlsZV9ieSwgaW5mby0+Y29tcGlsZV9kb21haW4sIGlu Zm8tPmNvbXBpbGVfZGF0ZSwgCisJCSAgICBpbmZvLT5jYXBhYmlsaXRpZXMsIGluZm8tPmNoYW5n ZXNldCk7CisgICAgcHJpbnRmKCIlbHVcbiVkXG4iLCBpbmZvLT52aXJ0X3N0YXJ0LCBpbmZvLT5w YWdlc2l6ZSk7CisgICAgcHJpbnRmKCIlc1xuJXNcbiIsIGluZm8tPmNvbW1hbmRsaW5lLCBpbmZv LT5idWlsZF9pZCk7CisKKyAgICBkZXN0cm95X2NvbnRleHQoY29udGV4dCk7CisKK30KZGlmZiAt LWdpdCBhL3Rvb2xzL2dvbGFuZy94ZW5saWdodC90ZXN0L3hlbmluZm8vdmVyc2lvbmluZm8uZ28g Yi90b29scy9nb2xhbmcveGVubGlnaHQvdGVzdC94ZW5pbmZvL3ZlcnNpb25pbmZvLmdvCm5ldyBm aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU1NDU0NzIKLS0tIC9kZXYvbnVsbAorKysg Yi90b29scy9nb2xhbmcveGVubGlnaHQvdGVzdC94ZW5pbmZvL3ZlcnNpb25pbmZvLmdvCkBAIC0w LDAgKzEsMjggQEAKK3BhY2thZ2UgbWFpbgorCitpbXBvcnQgKAorCSJmbXQiCisJIm9zIgorCSJ4 ZW5wcm9qZWN0Lm9yZy94ZW5saWdodCIKKykKKworZnVuYyBtYWluKCkgeworCWN0eCA6PSB4ZW5s aWdodC5DdHgKKwllcnIgOj0gY3R4Lk9wZW4oKQorCWlmIGVyciAhPSBuaWwgeworCQlvcy5FeGl0 KC0xKQorCX0KKwlkZWZlciBjdHguQ2xvc2UoKQorCWluZm8sIGVyciA6PSBjdHguR2V0VmVyc2lv bkluZm8oKQorCWlmIGVyciAhPSBuaWwgeworCQlvcy5FeGl0KC0xKQorCX0KKworCWZtdC5Qcmlu dGYoIiVkXG4lZFxuIiwgaW5mby5YZW5WZXJzaW9uTWFqb3IsIGluZm8uWGVuVmVyc2lvbk1pbm9y KQorCWZtdC5QcmludGYoIiVzXG4lc1xuJXNcbiVzXG4lc1xuJXNcbiVzXG4iLCBpbmZvLlhlblZl cnNpb25FeHRyYSwgaW5mby5Db21waWxlciwKKwkJaW5mby5Db21waWxlQnksIGluZm8uQ29tcGls ZURvbWFpbiwgaW5mby5Db21waWxlRGF0ZSwgaW5mby5DYXBhYmlsaXRpZXMsCisJCWluZm8uQ2hh bmdlc2V0KQorCWZtdC5QcmludGYoIiVkXG4lZFxuIiwgaW5mby5WaXJ0U3RhcnQsIGluZm8uUGFn ZXNpemUpCisJZm10LlByaW50ZigiJXNcbiVzXG4iLCBpbmZvLkNvbW1hbmRsaW5lLCBpbmZvLkJ1 aWxkSWQpCisKK30KZGlmZiAtLWdpdCBhL3Rvb2xzL2dvbGFuZy94ZW5saWdodC90ZXN0L3hlbmlu Zm8veGVubGlnaHQuZ28gYi90b29scy9nb2xhbmcveGVubGlnaHQvdGVzdC94ZW5pbmZvL3hlbmxp Z2h0LmdvCm5ldyBmaWxlIG1vZGUgMTIwMDAwCmluZGV4IDAwMDAwMDAuLjY5M2RhN2IKLS0tIC9k ZXYvbnVsbAorKysgYi90b29scy9nb2xhbmcveGVubGlnaHQvdGVzdC94ZW5pbmZvL3hlbmxpZ2h0 LmdvCkBAIC0wLDAgKzEgQEAKKy4uLy4uL3hlbmxpZ2h0LmdvL3Vzci9sb2NhbC9nby9zcmMveGVu cHJvamVjdC5vcmcveGVubGlnaHQveGVubGlnaHQuZ28KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBm aWxlCi0tIAoyLjcuMwoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fClhlbi1kZXZlbCBtYWlsaW5nIGxpc3QKWGVuLWRldmVsQGxpc3RzLnhlbi5vcmcKaHR0 cHM6Ly9saXN0cy54ZW4ub3JnL3hlbi1kZXZlbAo=